
脆弱なDrupal 7インストール (<= 7.57) を標的とする CVE-2018-7600 エクスプロイトの Rust 実装
これは、脆弱なDrupal 7インストール(<= 7.57)を標的としたCVE-2018-7600エクスプロイトのRust実装です。このCLIは次のPoCフローを再現します。user/passwordパスを介してキャッシュされたレンダリング可能なフォームを汚染し、form_build_idを抽出し、その後file/ajaxエンドポイントを通じてキャッシュされたペイロードをトリガーし、PHP関数呼び出しによるリモートコード実行を達成します。
CVE-2018-7600は、Drupal 7(および異なるコンテキストではDrupal 8)に影響を与えるリモートコード実行の脆弱性です。Drupal 7では、特定のレンダリング可能な配列がキャッシュされ、後でレンダリングされる際の不十分なサニタイズに問題があります。キャッシュされるエンドポイントに特別に細工されたレンダリングメタデータを注入することで、攻撃者はキャッシュされたデータが後でレンダリングまたはリクエストされたときに任意のPHP関数を実行させることができます。
#post_renderコールバックが任意のPHP関数(例えばpassthru)であるレンダリング可能な配列を挿入します。?q=user/passwordにPOST送信し、Drupalが汚染されたフォームをキャッシュするようにします。form_build_idを受け取った後、PoCは/file/ajax/name/#value/<form_build_id>を呼び出し、POSTボディにform_build_idを含めてペイロードをトリガーします。Drupalがキャッシュされた要素をレンダリングするとき、#post_renderコールバックが攻撃者制御のマークアップとともに実行され、コマンド実行が可能になります。このRust CLIは、ターゲットのDrupal 7サイトに対して2段階のシーケンス(汚染してからトリガー)を実行し、リクエストパラメータを構築し、HTMLレスポンスからform_build_idを解析し、次にfile/ajaxエンドポイントをトリガーして攻撃者が指定した関数を実行します。
クライアントは証明書検証を無効にしているため(元のPoCがverify=Falseを渡していたのを模倣)、自己署名または無効なTLS証明書を使用するターゲットに対してもツールは動作します。この動作は、有効な証明書を必要とする場合にソースで変更できます。
基本的な使用法(デフォルトのコマンドはwhoami、デフォルトの関数はpassthru):
cargo run -- -u http://target.com/
カスタムコマンドと関数を実行:
cargo run -- -u http://target.com/ -c "whoami" -f "passthru"
HTTP/Sプロキシを使用(形式:http://127.0.0.1:8080/):
cargo run -- -u http://target.com/ -p http://127.0.0.1:8080/
CLIオプションの概要:
-u, target: ターゲットのDrupalサイトのURL(例:http://target.com/)。-c, --command: ターゲット上で実行するコマンド(デフォルト:whoami)。-f, --function: 攻撃ベクトルとして使用するPHP関数(デフォルト:passthru)。-p, --proxy: リクエストをルーティングするためのオプションのプロキシURL。完全なフローの例:
user/passwordフォームを汚染し、#post_renderコールバックとコマンドを含む#markupを挿入します。form#user-pass内のform_build_idを見つけます。form_build_idを含めて?q=file/ajax/name/#value/<form_build_id>にPOSTし、レンダリングをトリガーしてコマンドを実行します。このツールは教育および許可されたペネトレーションテストの目的にのみ使用されます。責任を持って、自分が所有するシステムまたは明示的な許可を得たシステムでのみ使用してください。