
CVE-2023-4863(libwebp のヒープバッファオーバーフロー)を、完全に分離され自動化された Docker 環境で再現します。CEFIRE の倫理的ハッキングモジュールの演習に基づいています。
プライベートネットワーク上に8つのコンテナを起動します:
| Container | 役割 |
|---|---|
| attacker | craft.c で exploit.webp を生成し、模擬フィッシングページとともに HTTP で配信する |
| victim-cli | libwebp 1.2.2-2ubuntu0.22.04.1(脆弱)を搭載した Ubuntu 22.04。エクスプロイトを自動的にダウンロードして処理 → クラッシュ |
| victim-patched | Ubuntu セキュリティリポジトリの libwebp(パッチ適用済み)を搭載した Ubuntu 22.04。同じエクスプロイト → 制御されたエラー、クラッシュなし |
| victim-gui | XFCE、VNC、Firefox 110(脆弱)を搭載した Ubuntu 22.04。exploit.webp による実際のブラウザクラッシュ |
| victim-gui-patched | XFCE、VNC、Firefox 126(パッチ適用済み)を搭載した Ubuntu 22.04。同じエクスプロイト → ブラウザはクラッシュしない |
| postgres | PostgreSQL — Guacamole の認証・接続のバックエンド |
| guacd | Apache Guacamole のデーモン(プロトコルプロキシ) |
| guacamole | SSH または VNC で全コンテナにアクセスできる Web インターフェース。追加インストール不要 |
自動デモ(victim-cli 対 victim-patched)は起動時に自動的に実行されます。GUI での視覚的なデモは、Guacamole からの手動操作が必要です。
make up
初回の場合、make up は自動的に次の3つのことを行います:
initdb.sh を実行)初回のビルドには数分かかります(ベースイメージのダウンロード、PoC リポジトリのクローン、パッケージのインストール)。2回目以降は Docker キャッシュが使用されるため、ほぼ即座に完了します。
完了すると、出力に Guacamole の URL が表示されます。被害者コンテナは、攻撃者が準備完了となりエクスプロイトを配信し始めるまで起動しません(healthcheck)。
| アクセス方法 | ユーザー名 | パスワード |
|---|---|---|
ラボの稼働中に、ターミナルで次のコマンドを実行します:
# Ver el crash en la víctima vulnerable
make logs-victim-cli
# Ver la respuesta controlada en la víctima parcheada
make logs-victim-patched
victim-cli に表示される内容:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
*** glibc detected *** double free or corruption (!prev) ***
Aborted (core dumped)
[!] EXIT CODE: 134 (SIGABRT)
[!] CVE-2023-4863 CONFIRMADO
victim-patched に表示される内容:
[*] Ejecutando: dwebp /tmp/exploit.webp -o /tmp/salida.png
Decoding of exploit.webp failed.
Status: 3(BITSTREAM_ERROR)
[+] EXIT CODE: 1 — Error controlado
[+] CVE-2023-4863 MITIGADO
最も視覚的なデモは、XFCE デスクトップのターミナルで dwebp を使用し、victim-gui(脆弱)と victim-gui-patched(パッチ適用済み)を比較することで行います。
guacadmin / guacadminfirefox --no-sandbox http://attacker/index.html
exploit.webp のレンダリングを試みる → クラッシュ(SIGABRT、プロセス終了)Mozilla は全バージョンの恒久的な公開アーカイブを releases.mozilla.org で維持しています。Google は古い Chrome バージョンの URL を CDN から削除したため、Chrome 116 を確実にダウンロードすることは不可能になりました。Firefox 110 も同様に脆弱であり(両方とも libwebp を内部に同梱)、Mozilla のアーカイブからのダウンロードは安定しており再現性があります。
ssh root@localhost -p 2220 # attacker
ssh root@localhost -p 2221 # victim-cli
ssh root@localhost -p 2223 # victim-patched
ssh root@localhost -p 2222 # victim-gui
ssh root@localhost -p 2224 # victim-gui-patched
直接 VNC: localhost:5900(victim-gui)および localhost:5901(victim-gui-patched)。
make logs # todos los logs en tiempo real
make status # estado de los containers
make shell-attacker # shell en el atacante
make shell-victim-cli
make shell-victim-gui
make shell-victim-gui-patched
make down # parar el lab
make clean # parar + borrar imágenes y redes
Chrome と libwebp: Chrome は独自の libwebp をバンドルしています(システムのものは使用しません)。バージョン ≥ 116.0.5845.187 にはパッチが含まれています。Google が古いバージョンの URL を削除したため、Dockerfile は現在の安定版(パッチ適用済み)へのフォールバックを使用します。dwebp によるクラッシュのデモも同様に有効であり、より信頼性があります。
隔離されたネットワーク: 実行中、どのコンテナもインターネットにアクセスできません。すべてのトラフィックは Docker のプライベートネットワーク cve4863-lab-net 内に留まります。
| Guacamole (web) |
guacadmin |
guacadmin |
| SSH(全コンテナ) | root | toor |
| VNC(victim-gui および victim-gui-patched) | — | secret |