Security musings

Catégories

Tags

🔍 Licence d'Utilisation 🔍

Sauf mention contraire, le contenu de ce blog est sous licence CC BY-NC-ND 4.0.

© 2025 à 2042 Sébastien Gioria. Tous droits réservés.

On est le 1er janvier 2026. J’ai à peine eu le temps de finir mon premier thé (sencha — rien de fancy, juste ce qu’il faut pour se croire fonctionnel) que la première CVE de l’année tombe. On nous promettait des voitures volantes, des puces Neuralink pour coder par la pensée et des IA qui règlent la faim dans le monde. Mais non. La CVE-2026-0544 est là pour nous rappeler qu’on est toujours en 1998 : c’est une Injection SQL.

Oui, une SQLi. En 2026. C’est comme si on découvrait que le dernier vaisseau spatial de SpaceX était maintenu par du ruban adhésif et une prière.

1998 : L’année où tout a été dit (et ignoré)

Pour bien comprendre à quel point on est ridicules, il faut remonter à l’époque où on portait des baggies et où Internet faisait un bruit de mixeur en se connectant. En décembre 1998, Jeff Forristal (Rain Forest Puppy) publiait dans le Phrack n°54 l’article “NT Web Technology Vulnerabilities”.

Il y expliquait — avec une clarté que même un stagiaire d’aujourd’hui devrait saisir — comment un simple ' OR 1=1 -- permettait de bypasser une authentification. C’était il y a 28 ans. Depuis, on a eu le temps de voir passer sept versions de Windows, la naissance et la mort de Flash, et l’avènement des IA omniscientes. Pourtant, on en est toujours à se faire avoir par un guillemet mal placé. On n’a pas progressé, on fait juste de l’archéologie logicielle sans le savoir.

Et là, petite parenthèse « Retour vers le futur ». Si Doc Brown débarquait en DeLorean, me regardait droit dans les yeux et lançait : « Marty, nous devons retourner en 1998 ! », je lui répondrais : « Doc, pas besoin des 88 mph — 2026 y ressemble déjà beaucoup ». Les modems couinaient hier, nos agents IA couinent aujourd’hui quand on leur demande du SQL propre. Même combat, autres costumes. À 88 mph ou pas, la vulnérabilité nous rattrape.

Nicolas Ruff avait raison : La sécurité est un échec

Impossible de ne pas citer le prophète de notre malheur, Nicolas Ruff (aka News0ft). Son intervention au SSTIC 2009, “Pourquoi la sécurité est un échec”, n’est plus une présentation, c’est une description clinique de notre quotidien.

Le constat est simple : on ne règle rien. On empile. On a créé des ORM pour ne plus écrire de SQL, des containers pour isoler la misère, et des scanners IA pour nous dire que tout va bien. Mais comme le disait News0ft, la donnée utilisateur finit toujours par trouver un chemin vers le moteur d’exécution. La CVE-2026-0544 est la preuve par l’absurde que plus on complexe les couches de défense, plus on oublie de verrouiller la porte d’entrée. On a construit un coffre-fort avec des lasers, mais on a laissé la clé sous le paillasson parce que “c’était plus pratique pour les tests”.

Version BTTF : on a ajouté un convecteur temporel à la sécurité, mais on a oublié d’attacher le câble au clocher. Résultat : ça ne part jamais, et on reste bloqués en 1955… pardon, en 1998.

Anatomie d’un commit stupide

La faille vient d’un module analytique. Le plus beau ? Elle ressemble mot pour mot à des horreurs déjà vues sur GitHub, Stack Overflow, et même dans des projets open source réputés. C’est le syndrome du “j’ai vu ça quelque part, ça doit être correct”.

C’est de l’art brut. Le genre de code qui vous donne envie d’élever des brebis dans la montagne 2B…

Le code “Yolo” (Vulnerable) potentiel :

// On récupère l'ID et on prie pour que l'user soit sympa
$reportId = $_GET['id'];
$query = "SELECT * FROM analytics_reports WHERE report_id = " . $reportId . " AND status = 'active'";
$result = $db->query($query);

Le correctif (qui aurait dû être là, sou réserve du code précédent….)

// Spoiler : les requêtes préparées existent depuis avant votre naissance
$stmt = $db->prepare("SELECT * FROM analytics_reports WHERE report_id = ? AND status = 'active'");
$stmt->bind_param("i", $reportId);
$stmt->execute();

Trois lignes. Il suffisait de trois lignes pour éviter de devenir la risée du Net le premier jour de l’année. Comme dirait Doc : « Ce n’est pas vous qui êtes défaillant, ce sont vos… chaînes de caractères. »

Le saut quantique : De la SQLi au Prompt Injection

La cerise sur le gâteau de l’ironie en 2026, c’est que pendant qu’on laisse passer des SQLi de niveau collège, on s’extasie sur les Prompt Injections.

C’est le même film, juste avec un meilleur budget marketing. Et une bande-son plus moderne. Mais le scénario ? Identique : on appuie sur l’accélérateur, on oublie les freins, et on espère que la foudre frappera pile au bon moment.

  • En SQLi, on injecte des commandes dans une base de données.
  • En Prompt Injection, on injecte des instructions dans une IA pour lui faire oublier ses consignes de sécurité.

Et le summum, c’est la Second-Order Prompt Injection : une IA va lire une base de données infectée par une SQLi, et elle va exécuter l’ordre malveillant qui y était caché. On a réussi à créer une vulnérabilité hybride entre 1998 et 2026. C’est beau, on dirait du Christopher Nolan, sauf que c’est notre infrastructure qui explose à la fin. Ou comme Marty qui lit le mauvais almanach : on croit gagner, et en fait… Biff devient maire.

PHP : Le punching-ball increvable

On ne peut pas se quitter sans parler de PHP. En 2026, PHP 9.x est un langage ultra-performant et typé, mais il traîne son passé comme un boulet. Blâmer PHP pour une injection SQL, c’est comme blâmer un stylo parce que vous avez écrit une bêtise.

Mais avouons-le : PHP est ce vieux pote qui vous tend une pelle dès qu’il vous voit commencer à creuser votre propre tombe. “Oh, tu veux concaténer des strings dans une query ? Vas-y champion, je t’écoute.”

Pendant ce temps, les fans de Node.js ricanent derrière leurs écrans, oubliant que leur projet dépend de 5 000 packages npm, dont un maintenu par un mec qui n’a pas donné signe de vie depuis 2021 et un autre qui mine du Monero dès que vous lancez un build. On est tous dans le même bateau qui coule, on n’a juste pas la même couleur de gilet de sauvetage. Et Doc n’est pas là pour relier les câbles.

OWASP : Lisez-le, par pitié

Si vous n’avez pas envie que votre nom apparaisse dans un article comme celui-ci, il y a une solution radicale : lire la doc. L’OWASP n’est pas là pour faire joli. Petit clin d’œil BTTF : c’est le manuel d’entretien de la DeLorean — on le lit avant d’activer le convecteur temporel, pas après l’orage.

  • A03:2021 – Injection : Si c’est toujours sur le podium, c’est parce qu’on est collectivement feignants.
  • SQL Injection Prevention Cheat Sheet : C’est le code de la route de la base de données. Ne pas le suivre, c’est conduire à contresens sur l’autoroute en espérant que les autres feront attention.
À retenir 📌

  • Persistance : L'Injection SQL reste une menace majeure en 2026, malgré les avancées technologiques.
  • Parallèle : Le Prompt Injection est la nouvelle forme d'injection, exploitant les mêmes faiblesses conceptuelles.
  • Cause racine : L'absence de validation des entrées et la concaténation de chaînes restent les ennemis n°1.
  • Remède : Utiliser les requêtes préparées et suivre les standards OWASP (A03:2021).

Conclusion

La CVE-2026-0544 nous prouve que l’évolution humaine est une illusion, du moins en informatique. On a des serveurs qui pourraient simuler l’univers, mais on bloque toujours sur un caractère d’échappement. J’aimerais vous dire que mon thé vert m’a calmé, mais soyons honnêtes : j’ai reposé la tasse trois fois avant de finir ce paragraphe.

Nicolas Ruff avait raison : la sécurité est un échec tant qu’on traitera les vulnérabilités comme des accidents isolés plutôt que comme un problème de culture. Alors pour 2026, au lieu d’apprendre un 15ème framework JS, apprenez peut-être juste à ne plus jamais, au grand jamais, concaténer une variable dans une requête SQL.

Allez, bonne année quand même. Essayez de ne pas tout casser avant février. Et si vous croisez une DeLorean : ne cherchez pas à atteindre 88 mph, cherchez juste à éviter ' et ;. Petit écho final façon Doc & Marty : « Ce n’est pas la vitesse qui nous sauvera, c’est la validation des entrées. »


Sources :