Express Prototype Pollution Gadgets
Last updated
Last updated
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
詳細については 元の研究を参照してください
JSONコンテンツタイプレスポンスを使用し、JSONを反映するExpressアプリで:
これらのケースでは、JSONコンテンツタイプでは通常XSSは不可能です。しかし、プロトタイプ汚染を利用することで、Expressを混乱させてHTMLレスポンスを提供させることができます。 この脆弱性は、アプリケーションが**res.send(obj)
**を使用し、application/jsonコンテンツタイプでボディパーサーを使用することに依存しています。
body
と _body
プロパティを 汚染 することで、ExpressがHTMLコンテンツタイプを提供し、 _body
プロパティを反映させることが可能になり、結果として保存されたXSSが発生します。
Expressが UTF-7コンテンツをレンダリングする ことが可能です:
次のPPは、JSON内の属性に余分なスペースを追加し、機能を壊さないようにします:
次のような反射されたJSONになります:
次のPPガジェットは、サーバーがHTTPヘッダーを返すようにします: Access-Control-Expose_headers: foo
CORSモジュールをインストールする必要があります
次のペイロードを使用すると、OPTIONSレスポンスからメソッドを隠すことが可能です:
次のPPペイロードを使用して、返されたステータスコードを変更することが可能です:
文字列のようなプリミティブをプロトタイプに割り当てると、プロトタイプはオブジェクトでなければならないため、何もしない操作が生成されます。プロトタイプオブジェクトをObject.prototype
自体に割り当てようとすると、例外がスローされます。これらの2つの動作を使用して、プロトタイプ汚染が成功したかどうかを検出できます:
アプリケーションがレスポンスにオブジェクトを含めるとき、__proto__
と一緒に異常な名前の属性を作成することは有益です。特に、異常な属性のみがレスポンスに返される場合、これはアプリケーションの脆弱性を示している可能性があります:
さらに、Lodashのようなライブラリが使用されるシナリオでは、プロトタイプ汚染(PP)を介してプロパティを設定することと、オブジェクト内で直接設定することが、別の診断アプローチを提供します。そのようなプロパティがレスポンスから省略されている場合、Lodashがマージする前にターゲットオブジェクト内のプロパティの存在を確認していることを示唆しています。
Expressには、クエリ文字列パラメータからオブジェクトを作成するオプションがあります。 これは、プロトタイプ汚染の脆弱性を悪用するバグチェーンで確実に使用できます。
?foo.bar=baz
はNodeでオブジェクトを作成します。
AWSハッキングを学び、実践する:HackTricks Training AWS Red Team Expert (ARTE) GCPハッキングを学び、実践する:HackTricks Training GCP Red Team Expert (GRTE)