[論文レビュー] Silent Spring: Prototype Pollution Leads to Remote Code Execution in Node.js
本稿では、リモートコード実行(RCE)を狙ったNode.jsにおけるプロトタイプ汚染脆弱性を検出・利用するための、最初の体系的フレームワークを提示する。多ラベル静的ターンニング解析を用いて汚染を検出するとともに、ハイブリッド静的・動的解析を用いてNode.jsコアにおけるユニバーサルガジェットを同定する。著者らはNode.jsに11のユニバーサルガジェットを発見し、NPM CLI や Rocket.Chat といった高知名度アプリケーションで8件のRCE脆弱性を手動で利用した。これにより、プロトタイプ汚染が実世界のシステムで完全なRCEを引き起こしうることを実証した。
Prototype pollution is a dangerous vulnerability affecting prototype-based languages like JavaScript and the Node.js platform. It refers to the ability of an attacker to inject properties into an object's root prototype at runtime and subsequently trigger the execution of legitimate code gadgets that access these properties on the object's prototype, leading to attacks such as Denial of Service (DoS), privilege escalation, and Remote Code Execution (RCE). While there is anecdotal evidence that prototype pollution leads to RCE, current research does not tackle the challenge of gadget detection, thus only showing feasibility of DoS attacks, mainly against Node.js libraries. In this paper, we set out to study the problem in a holistic way, from the detection of prototype pollution to detection of gadgets, with the ambitious goal of finding end-to-end exploits beyond DoS, in full-fledged Node.js applications. We build the first multi-staged framework that uses multi-label static taint analysis to identify prototype pollution in Node.js libraries and applications, as well as a hybrid approach to detect universal gadgets, notably, by analyzing the Node.js source code. We implement our framework on top of GitHub's static analysis framework CodeQL to find 11 universal gadgets in core Node.js APIs, leading to code execution. Furthermore, we use our methodology in a study of 15 popular Node.js applications to identify prototype pollutions and gadgets. We manually exploit eight RCE vulnerabilities in three high-profile applications such as NPM CLI, Parse Server, and Rocket.Chat. Our results provide alarming evidence that prototype pollution in combination with powerful universal gadgets lead to RCE in Node.js.
研究の動機と目的
- 過去の研究がDoS攻撃に限定してプロトタイプ汚染を検出しているというギャップを埋めるために、検出範囲をリモートコード実行(RCE)のエクスパンションに拡張する。
- RCEを達成するためにプロトタイプ汚染と組み合わせて利用可能な、Node.jsコアAPIにおけるユニバーサルガジェットを同定・検証する。
- 実世界のNode.jsアプリケーションにおけるプロトタイプ汚染およびガジェットベースRCEのエンドツーエンド検出を可能にする、スケーラブルで段階的なフレームワークを構築する。
- 生産環境アプリケーションにおける手動でのRCE脆弱性悪用を通じて、プロトタイプ汚染がDoSにとどまらないことの実現可能性と深刻度を実証する。
- JavaScriptエコシステムにおける新たなエクスプロイのクラスとして、プロトタイプベースのオブジェクトインジェクション脆弱性(POIVs)を検出するための体系的な手法を確立する。
提案手法
- CodeQLを用いた多ラベル静的ターンニング解析を活用し、信頼できないデータの流れがObject.prototypeの変更に到達するのを追跡することで、プロトタイプ汚染を検出する。
- Node.jsソースコードの静的解析と動的ターンニング追跡を組み合わせたハイブリッド解析アプローチを設計し、コアAPIにおけるユニバーサルガジェットを同定する。
- 実世界のコードベースにおけるレアなインジェクションシンクを検出するため、再現率を最適化するよう静的解析をチューニングする(精度を多少犠牲にしても)。
- コードレベルの分析および実アプリケーションの手動での悪用を通じて、ガジェットの到達可能性と利用可能性を手動で検証・確認する。
- 100件の脆弱なパッケージをセキュリティアドバイザリーから収集したデータセットを用い、汚染検出コンponentのトレーニングおよび検証に活用する。
- 15の代表的なNode.jsアプリケーションにフレームワークを適用し、汚染の原因となる経路および利用可能なガジェットチェーンを同定する。
実験結果
リサーチクエスチョン
- RQ1Node.jsにおけるプロトタイプ汚染は、既知のDoS攻撃を超えて、リモートコード実行(RCE)を達成するために体系的に悪用可能か?
- RQ2プロトタイプ汚染を介してトリガー可能な、Node.jsコアにおけるユニバーサルガジェットの特徴と位置は何か?
- RQ3静的および動的解析をどのように組み合わせることで、実世界のNode.jsアプリケーションにおける利用可能なガジェットチェーンを検出できるか?
- RQ4プロトタイプ汚染のための既存の静的解析ツールは、再現率が低いため、重要なRCEベクターをどれだけ見逃しているか?
- RQ5NPM CLI、Parse Server、Rocket.Chat といった高知名度の生産環境アプリケーションを、プロトタイプ汚染を活用して悪用可能か?
主な発見
- 著者らは、任意のこれらのAPIを使用するアプリケーションでRCEを達成可能な、11のユニバーサルガジェットをコアNode.js APIで発見した。
- NPM CLI、Parse Server、Rocket.Chat などの実世界のアプリケーションで8件のRCE脆弱性を手動で悪用した。これにより、エンドツーエンド攻撃の実現可能性が確認された。
- 提案された多ラベル静的ターンニング解析フレームワークは、最先端のODGenツールに比べて著しく高い再現率を達成したが、精度はわずかに低下した。
- プロトタイプ汚染はDoSに限定されない。ユニバーサルガジェットと組み合わせることで、生産環境アプリケーションで完全なコード実行が可能になる。
- 本研究では、Node.jsコアにおけるユニバーサルガジェットが、制御フローを乗っ取るために使われないコードパスをプロトタイプの変更によって悪用することで、新たな脅威のクラスをもたらすことが明らかになった。
- ハイブリッド解析アプローチは、静的解析だけでは見逃してしまうガジェットチェーン(特に複雑または間接的なデータフローにおいて)を効果的に同定できた。
より良い研究を、今すぐ始めましょう
論文の読解から最終レビューまで、研究時間を劇的に削減しましょう。
クレジットカード登録不要
このレビューはAIが作成し、人間の編集者が確認しました。