đ Contexte
PubliĂ© le 26 octobre 2026 par Tomasz Kaye (Axe Ghost) sur axeghost.offprint.app, cet article prĂ©sente une divulgation publique anticipĂ©e d’une vulnĂ©rabilitĂ© dĂ©couverte dans le moteur de jeu Godot, affectant les versions 4.1 et ultĂ©rieures (confirmĂ©e sur 4.7-stable). La divulgation intervient aprĂšs l’absence de rĂ©ponse du vendor suite Ă un signalement privĂ© effectuĂ© le 23 septembre 2026.
đ VulnĂ©rabilitĂ©
Le chargeur de traductions .po de Godot stocke l’en-tĂȘte Plural-Forms sans validation grammaticale. Lors du premier appel Ă une traduction plurielle (tr_n()), cet en-tĂȘte est Ă©valuĂ© par l’Ă©valuateur d’expressions gĂ©nĂ©raliste de Godot (Expression), qui peut appeler toutes les fonctions utilitaires enregistrĂ©es du moteur, y compris bytes_to_var_with_objects() â explicitement documentĂ©e comme dangereuse sur des entrĂ©es non fiables.
âïž ChaĂźne d’exploitation (6 Ă©tapes)
core/io/translation_loader_po.cpp:232: stockage sans validationcore/string/translation.cpp:222: transmission ĂPluralRules::parse()core/string/plural_rules.cpp:40-46: Ă©valuation commeExpressiongĂ©nĂ©ralistecore/math/expression.cpp: dispatch versbytes_to_var_with_objects()core/io/marshalls.cpp:699-785: dĂ©codage d’un objet avec classe et propriĂ©tĂ©s choisies par l’attaquantmodules/gdscript/gdscript.cpp:1013-1017: compilation et exĂ©cution de l’initialiseur statique du script fourni
đŁ Impact dĂ©montrĂ©
- Preuve 1 :
plural=seed(123456789)â manipulation de l’Ă©tat RNG global du jeu (10/10 runs) - Preuve 2 : dĂ©codage d’un enregistrement Variant de 180 octets contenant un objet
GDScriptavec code source arbitraire â exĂ©cution de l’initialiseur statique (10/10 runs) - Le script de l’attaquant s’exĂ©cute avec les mĂȘmes privilĂšges systĂšme que le jeu
- Le payload tient en 180 octets dans l’en-tĂȘte Plural-Forms, sans fichier script, sans code natif, sans rĂ©fĂ©rence externe
đ Score CVSS
CVSS 3.1 : 7.8 (High) â CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:U/C:H/I:H/A:H
đ§ Ătat des correctifs
Au 24 octobre 2026, aucun correctif n’est mergĂ©. Deux PR sont ouvertes :
- PR #123130 (03/09/2026) : restreint partiellement les fonctions autorisĂ©es â la preuve
seed()reste exploitable - PR #123857 (26/09/2026) : restreint aux fonctions mathĂ©matiques pures â ferme la chaĂźne dĂ©montrĂ©e, mais sans parser gettext dĂ©diĂ©
đ Timeline
- 23/09/2026 : signalement privĂ© Ă
[email protected] - 24/09/2026 : deux suivis envoyés (caveat grammatical + vidéo de démonstration)
- 26/10/2026 : Godot modifie sa page de contact pour interdire les rapports assistĂ©s par IA â divulgation publique anticipĂ©e
đ Type d’article
Divulgation publique de vulnérabilité (full disclosure anticipée) avec preuve de concept, analyse de code source, scoring CVSS et timeline de coordination. But principal : alerter les développeurs de jeux Godot chargeant des traductions communautaires.
đ§ TTPs et IOCs dĂ©tectĂ©s
TTP
- T1195.002 â Supply Chain Compromise: Compromise Software Supply Chain (Initial Access)
- T1059.007 â Command and Scripting Interpreter: JavaScript (Execution)
- T1027 â Obfuscated Files or Information (Defense Evasion)
IOC
- Chemins :
core/io/translation_loader_po.cpp - Chemins :
core/string/translation.cpp - Chemins :
core/string/plural_rules.cpp - Chemins :
core/math/expression.cpp - Chemins :
core/io/marshalls.cpp - Chemins :
modules/gdscript/gdscript.cpp
â ïž Ă propos de ces IOC â ils sont extraits automatiquement de l’article original le 27 octobre 2026 et n’ont pas fait l’objet d’une vĂ©rification externe. Un indicateur peut avoir Ă©tĂ© rĂ©attribuĂ© depuis : une IP de C2 peut redevenir un service lĂ©gitime, un domaine sinkholĂ© peut changer de propriĂ©taire. Aucune garantie d’exactitude ni d’actualitĂ© â contrĂŽlez leur validitĂ© avant tout usage opĂ©rationnel, en particulier avant de les injecter dans une blocklist ou un SIEM.
đĄ Indice de vĂ©rification factuelle : 40/100 (moyenne)
- ⏠axeghost.offprint.app â source non rĂ©fĂ©rencĂ©e (0pts)
- â 9300 chars â texte complet (fulltext extrait) (15pts)
- â 6 IOCs (IPs/domaines/CVEs) (10pts)
- ⏠pas d’IOC vĂ©rifiĂ© (0pts)
- â 3 TTPs MITRE identifiĂ©es (15pts)
- ⏠date RSS ou approximée (0pts)
- ⏠aucun acteur de menace nommé (0pts)
- ⏠pas de CVE à vérifier (0pts)
đ Source originale : https://axeghost.offprint.app/a/3mysixmpap723-a-community-translation-can-run-attacker-chosen-code-in-an-exported-godot-game