Un mercredi comme les autres, ou presque
Vous l’avez peut-être vu passer aux nouvelles : la SAQ, la STM et la SAAQ ont verrouillé leurs sites de façon préventive. En cause, deux failles critiques de PHP, surnommées PHP2Shell et notées 9,2 sur 10. Eh bien, on a vécu la même situation. PHP fait tourner Laravel, Craft CMS, Statamic et WordPress : presque tout ce que Québec Studio construit et héberge depuis 10 ans. Soit 31 serveurs et environ 110 sites et applications, du plus petit au plus gros, préproductions comprises.
Mais encore?
Avec des demandes spécialement fabriquées, un inconnu pouvait faire exécuter ses propres commandes sur le serveur, de n’importe où, sans compte ni mot de passe. D’où le surnom : de PHP à shell, la console d’où l’on commande un serveur. Et une première tentative d’attaque a été observée quatre jours avant l’annonce officielle.
Ce n’est pas le signe que PHP est fragile, mais qu’il est populaire. Comme WordPress, il fait tourner une immense part du web, c'est aussi le plus visé par les pirates à la recherche constante de ses faiblesses. Des chercheurs épaulés par l’intelligence artificielle l’ont débusquée, et l’équipe de PHP a fait exactement ce qu’il fallait : correctifs préparés en coulisses, publiés le même jour pour toutes les versions supportées. La suite, c’était à nous de la jouer.
Sauf que les mises à jour automatiques ne corrigent pas PHP : il faut le faire serveur par serveur. Et neuf serveurs étaient trop vieux pour recevoir le correctif : il fallait les déménager. Ainsi a commencé l’opération « Fuck you Richard, tu dormiras la semaine prochaine ».
On avait autant besoin de cette faille que d'une claque sua yeule...
D’abord, fermer la porte
Dès le jour même, les 22 serveurs qui pouvaient recevoir le correctif l’ont reçu. Les neuf autres ont été mis en quarantaine, avec une mesure qui neutralisait la faille en attendant leur déménagement.
Restait à s’assurer que c’était vraiment fait, parce que l’outil de gestion répondait parfois « installé »… sans avoir rien installé. Chaque correctif a donc été vérifié directement sur le serveur. Et comme certains correctifs ne prennent effet qu’après un redémarrage, 20 serveurs ont été redémarrés en soirée, chacun vérifié avant et après : une trentaine de secondes de coupure par serveur, et aucun site tombé.
Quelques sites sont aussi hébergés chez notre partenaire Likuid. Un grand merci à leur équipe, qui a fait le même travail de son côté, avec rapidité et professionnalisme. Je n’ai pas eu à m’inquiéter de ces serveurs : ils étaient entre bonnes mains.
Ensuite, vérifier que personne n’est entré
Corriger ne suffit pas : entre l’annonce d’une faille et son correctif, des robots balaient Internet à la recherche de serveurs vulnérables. Il fallait donc chercher des traces de visite, partout.
Je vais être franc : on en a trouvé une. Un serveur tournait à plein régime depuis des semaines, parce qu’un intrus y avait installé un programme de minage de cryptomonnaie. La porte d’entrée n’était pas PHP2Shell, mais une vieille copie de travail d’un site, restée sur l’ancien serveur après le déménagement du vrai site. Le site en ligne était intact et aucun renseignement personnel ne se trouvait sur cette machine. Un soulagement : ça aurait pu être grave.
Le serveur a été isolé, les preuves conservées, puis il a été détruit. Le client a été informé, et l’événement est consigné dans notre registre d’incidents, comme le demande la Loi 25.
Chaque copie de site qui traîne, c’est une porte de plus à surveiller. Et c’est souvent celle-là qu’on essaie en premier.
Partout ailleurs, rien, y compris sur les 24 WordPress passés au peigne fin. Seule fausse alerte, et sans doute le moment le plus drôle de l’opération : le détecteur de pourriel s’est affolé devant des pages qui parlaient de services spécialisés… Relisez bien : spéCIALISé. Faut dire que les petites pilules du bonheur, les gros lots garantis et les « belles rencontres dans votre région » sont les vedettes du pourriel. Le détecteur avait l’œil vif… un peu trop.
Une visite d’inspection complète
Quand on ouvre tous les placards d’un coup, évidemment, il y a quelques vieux balais qui tombent :
- Des files d’attente débloquées. Sur quelques sites, des files d’attente étaient figées. Une fois débloquées, une foule d’images se sont optimisées d’un coup, et les sites concernés s’affichent maintenant plus vite.
- De vieilles adresses effacées. Une adresse web, c’est un peu comme une adresse postale : elle indique où trouver un site. Quelques vieilles adresses menaient encore vers des serveurs qu’on avait fermés. Or, un logement libéré ne reste pas vide longtemps : l’hébergeur avait déjà reloué l’un d’eux à quelqu’un d’autre, qui y affichait une page de pourriel en japonais. Le serveur n’était pas le nôtre, mais l’adresse, elle, l’était encore. Toutes ces vieilles adresses sont maintenant effacées, et la règle est claire : on retire l’adresse avant de fermer le serveur.
- Un garde-fou pour les recherches gourmandes. Sur un site, une simple recherche pouvait monopoliser la base de données au point de ralentir tout le serveur. Elle est maintenant contenue : si elle déraille, elle échoue seule.
- Des comptes dormants retirés. Sur certains sites, des comptes administrateurs ne s’étaient jamais connectés, ou plus depuis des années. Un compte qui ne sert pas, c’est une clé de plus en circulation : ils ont été supprimés.
Déménager plutôt que rapiécer
Restaient les neuf serveurs trop vieux pour être corrigés. Ceux-là n’avaient pas le choix : il fallait les remplacer. Tant qu’à les reconstruire, autant le faire selon les meilleures pratiques d’aujourd’hui :
- Des serveurs neufs et cloisonnés. Chaque site est isolé de ses voisins : si l’un a un problème, il le garde pour lui. Les applications, les municipalités et les gros sites ont leur propre serveur ; les plus petits cohabitent.
- PHP 8.3 ou plus, partout, et des CMS à jour. Un site Craft de 2023, qui cumulait 158 avis de sécurité, tourne maintenant sur Craft 5. Au passage, plusieurs sites ont été allégés.
- Des bascules la nuit, vérifiées à la donnée près. Avant chaque déménagement, les bases de données de l’ancien et du nouveau serveur étaient comparées, table par table. Aucun don, aucune commande, aucun formulaire perdu en route.
- Du ménage. Des sites morts et des services qui ne servaient plus ont été sauvegardés, puis supprimés. Moins de choses en ligne, c’est moins de choses à attaquer.
Résultat : un parc plus moderne, plus simple, et une bonne partie de la dette technique remboursée d’un coup. La dette technique, c’est un peu comme l’usure d’une maison : même bien entretenue, elle vieillit, et les normes évoluent autour d’elle. Cette semaine, on a fait le tour de la maison, de la cave au grenier, pour la remettre au goût du jour.
Une surveillance qui ne dort pas
Dernière leçon : ne plus attendre une crise pour regarder. Chaque nuit, un script relève maintenant ce qui a changé dans chaque WordPress et ne m’alerte que sur ce qui est nouveau et suspect, sans alourdir les sites. Parce qu’il laisse entrer l’air frais, mais pas les bestioles, je l’ai baptisé MoustiquaireWP, un outil maison, pour le moment réservé à nos propres serveurs.
La boucle est bouclée
Ironie de l’histoire : l’intelligence artificielle a contribué à trouver la faille… et c’est aussi avec elle que je l’ai corrigée. Pendant toute l’opération, un assistant d’IA m’a servi de copilote : inventaires, scripts de vérification, journaux à éplucher, bases de données à comparer, carnet de bord tenu heure par heure. Il m’a permis d’aller plus loin et de vérifier davantage.
Mais un copilote n’est pas un pilote. Il a fait ce que je lui demandais : sécuriser au maximum, par des moyens modernes et parfois inventifs. Les décisions, elles, sont restées les miennes.
Mon pote Claude et moi, on s’est lancé un défi : qui dormira le moins? J’avais perdu d’avance : lui, il ne dort jamais.
Ce que ça change pour vous
- Votre site est corrigé, vérifié et à jour. S’il a déménagé, c’est vers un serveur plus récent et mieux protégé.
- Vous n’avez rien à faire. Si une action de votre part avait été nécessaire, on vous aurait déjà écrit. C’est d’ailleurs ce qui s’est passé, et tous ont répondu. D’autres seront joints sous peu pour finaliser quelques déménagements non critiques.
- Une question? Écrivez-moi, ça me fera plaisir d’en parler.
Tout est bien qui finit mieux
On n’avait pas besoin de ça, c’est vrai. Mais au fond, on en avait peut-être un peu besoin : ça nous a forcés à faire tout de suite un grand ménage qui serait sûrement resté sur la liste des choses à faire « quand on aura le temps »… ce temps qu’on n’a jamais. Ce temps-là, on a fini par le prendre. Et c’est sans doute le mieux investi de l’année.