🗓️ Contexte

Publié le 21 avril 2026 sur le blog Substack de calif.io, cet article s’inscrit dans la série MAD Bugs (avril 2026) et fait suite à deux divulgations précédentes : un 0-day dans radare2 et un auth bypass dans le serveur Ghidra de la NSA. Les chercheurs présentent ici quatre nouvelles vulnérabilités d’exécution de code arbitraire (RCE), toutes découvertes à l’aide des modèles d’IA Claude ou Codex.

🔍 Vulnérabilités divulguées

radare2 — Incomplete Fix / PDB Section Name Injection (issue #25752)

  • Le correctif précédent (issue #25731) avait encodé en base64 le champ fN, mais avait omis le champ f dans print_gvars().
  • Le nom de section PE brut (8 octets) est interpolé sans sanitisation via %.*s dans la commande f.
  • Un \n dans le nom de section termine le commentaire # et injecte une nouvelle commande r2.
  • Un stager de type HITCON CTF 2017 “BabyFirst Revenge” permet de transformer des écritures de 7 octets en exécution sh arbitraire.
  • Fix livré immédiatement par l’équipe radare2 après signalement.
  • PoC : https://github.com/califio/publications/tree/main/MADBugs/radare2-pdb-section-rce

Ghidra (NSA) — RMI Client Deserialization RCE (toutes versions ≥ 9.1)

  • Le serveur Ghidra dispose d’un ObjectInputFilter allow-list, mais le client Ghidra n’en installe aucun.
  • Un fichier .gpr malveillant contenant une URL ghidra:// dans son XML projectState force le client à se connecter silencieusement à un serveur attaquant.
  • Le premier appel RMI (reg.list()) est effectué avant toute authentification et sans filtre de désérialisation.
  • Chaîne d’exploitation originale via org.python.core.PyMethod (dans jython-standalone-2.7.4.jar), contournant le correctif readResolve() de PyFunction introduit par Jython 2.7.4.
  • La chaîne aboutit à un interpréteur CPython 2.7 bytecode (21 octets) appelant Runtime.getRuntime().exec().
  • Flux d’exploitation : PriorityQueue.readObject → Proxy(Comparator).compare → PyMethod.__call__ → __builtin__.eval → PyBytecode → Runtime.exec()
  • La victime voit une erreur PySingleton cannot be cast to Integer après l’exécution du payload.
  • PoC : https://github.com/califio/publications/tree/main/MADBugs/ghidra-rmi-rce

IDA Pro (Hex-Rays) & Binary Ninja Sidekick (Vector 35)

  • Deux vulnérabilités RCE arbitraires sous embargo de divulgation coordonnée.
  • Toutes deux se déclenchent sur le workflow standard « ouvrir un fichier reçu ».
  • Détails, PoCs et logs de prompts à publier à la levée des embargos.

🤖 Rôle de l’IA

L’ensemble des vulnérabilités a été identifié par Claude ou Codex. L’IA a notamment analysé le patch de radare2 et identifié le second champ non corrigé de manière autonome, produisant un PoC fonctionnel avant la fin du débat humain sur la pertinence de la recherche assistée par IA.

📄 Type d’article

Il s’agit d’une publication de recherche technique offensive à visée de divulgation responsable (coordinated disclosure), dont le but principal est de démontrer la capacité des LLM à découvrir des vulnérabilités complexes dans des outils de sécurité largement utilisés.

🧠 TTPs et IOCs détectés

TTP

  • T1203 — Exploitation for Client Execution (Execution)
  • T1211 — Exploitation for Defense Evasion (Defense Evasion)
  • T1059 — Command and Scripting Interpreter (Execution)
  • T1190 — Exploit Public-Facing Application (Initial Access)

IOC

  • Fichiers : jython-standalone-2.7.4.jar

Malware / Outils

  • ysoserial (tool)

🟡 Indice de vérification factuelle : 46/100 (moyenne)

  • ⬜ open.substack.com — source non référencée (0pts)
  • ✅ 5533 chars — texte complet (fulltext extrait) (15pts)
  • ✅ 1 IOC(s) (6pts)
  • ⬜ pas d’IOC vérifié (0pts)
  • ✅ 4 TTPs MITRE identifiées (15pts)
  • ✅ date extraite du HTML source (10pts)
  • ⬜ aucun acteur de menace nommé (0pts)
  • ⬜ pas de CVE à vérifier (0pts)

🔗 Source originale : https://open.substack.com/pub/calif/p/mad-bugs-all-your-reverse-engineering?r=q9u24