
Angular Expressionsは、Angular.JSウェブフレームワークの式をスタンドアロンモジュールとして提供します。バージョン1.4.3より前では、攻撃者がサンドボックスをエスケープする悪意のある式を作成し、システム上で任意のコードを実行できました。より複雑な(非公開の)ペイロードを使用すると、システム上での任意のコード実行への完全なアクセスが可能になります。この問題は、Angular Expressionsのバージョン1.4.3で修正されています。回避策は2つあります。__proto__ へのアクセスをグローバルに無効にするか、関数を1つの引数だけで使用するようにすることです。
この脆弱性を実証するために、脆弱性のあるバージョンのAngular Expressionsを使用する単純なNode.jsアプリケーションを作成しました。このアプリケーションは、ユーザーが提供した式を評価するエンドポイント /parse を公開しています。
リポジトリをクローンする:
git clone https://github.com/example/CVE-2024-54152-poc.git
cd CVE-2024-54152-poc
Dockerコンテナをビルドして実行する:
docker build -t vulnerable-app .
docker run -p 8080:8080 vulnerable-app
悪意のあるペイロードを送信する: 提供されたGoまたはPythonスクリプトのいずれかを使用して、ペイロードを送信できます。
Go を使用する:
go run poc.go
Python を使用する:
python3 poc.py
サーバーはペイロードを実行し、id コマンドの結果を返すはずです。これにより、任意のコード実行が実証されます。
この脆弱性を緩和するには、Angular Expressionsをバージョン1.4.3以降に更新してください。または、__proto__ へのアクセスをグローバルに無効にするか、関数が1つの引数だけで使用されるようにしてください。