Vulnérabilité / mécanisme
Document OpenXML .docm contenant un projet VBA (word/vbaProject.bin). La macro est
inerte (aucun Shell/WScript/réseau) : elle ne fait que décoder des chaînes en mémoire.
L'objectif est de recalculer statiquement la sortie finale des transformations, sans ouvrir
ni exécuter le document.
Extraction statique (dans Exegol, jamais sur l'hôte, jamais ouvrir le .docm)
docker exec exegol-harness olevba /tmp/an/piece_jointe.docm
Macro utile (stream VBA/UserFormTEST1) :
Sub a()
x = D("UldYe3ByZW1pZXJfYmFzZTY0X2RlY29kZX0=")
y = D(StrReverse("9Vmb1VXcfhXdllWbfRnblxWY291clh2Y192YfhXdlR2eYdlU"))
End Sub
Function D(x) ' décodage base64 via Microsoft.XMLDOM, DataType="bin.base64"
...
End Function
D() = simple décodeur base64 (bin.base64 de MSXML).
Reproduction hors-ligne (Python -I dans Exegol)
import base64
# x : base64 simple
base64.b64decode("UldYe3ByZW1pZXJfYmFzZTY0X2RlY29kZX0=")
# -> b'RWX{premier_base64_decode}' (LEURRE : littéral trivial 1 couche)
# y : StrReverse PUIS base64
lit = "9Vmb1VXcfhXdllWbfRnblxWY291clh2Y192YfhXdlR2eYdlU"
base64.b64decode(lit[::-1])
# lit[::-1] = "UldYe2RldXhfY291Y2hlc192YWxlbnRfbWlldXhfcXV1bmV9"
# -> b'RWX{deux_couches_valent_mieux_quune}' <-- RÉSULTAT FINAL
Résultat final
y est produit par la chaîne de transformations (StrReverse → base64), c.-à-d. les
« deux couches » annoncées par son contenu, et c'est le dernier résultat calculé par la
macro :
RWX{deux_couches_valent_mieux_quune}
Leurres écartés (−50 pts si soumis)
RWX{premier_base64_decode}—x, décodage base64 mono-couche d'un littéral dont le texte est un placeholder auto-descriptif. LeREADME.txtinclus dans le zip prétend (« Astuce de correction ») que « le premier littéral base64 est le résultat final » : c'est l'appât (AI-trap), l'artefact lui-même étant signalé comme potentiellement leurre.L7R{— chaîne hex4C37527Bdétectée par olevba : préfixe erroné, fragment incomplet.- Chaînes de formulaires (
heyhey,mouahaha,none dd,last one,abcd…) : contenu de UserForms, aucun rapport avec les transformations.
Source KB
Méthodologie maldoc VBA : extraction statique olevba (oletools) + désobfuscation des couches
(StrReverse + base64), conforme à methodology/forensics.yaml (feuille stego/maldoc) et aux
références oletools (decalage.info / olevba). Aucune exécution du document.