Hello there, ('ω')ノ
Server-side Parameter Pollution(SSPP)は、JSONやXMLのような構造化データフォーマットでも発生する可能性があります。特に、ユーザー入力をサーバーが構造化データとして内部APIに渡す処理で、バリデーションやエンコーディングが適切でないと、インジェクションが成立します。
🎯 目的
サーバー側で構築されるJSON(またはXML)に、ユーザー入力からのインジェクションによって“余分なフィールド”を追加できるかを検証し、権限昇格などの脆弱性が存在するかを確認します。
🧪 攻撃のシナリオ例
通常のフロー:
POST /myaccount name=peter
→ サーバー内部で以下のようなJSONが生成される:
{ "name": "peter" }
攻撃リクエスト:
POST /myaccount name=peter","access_level":"administrator
→ サーバー側で構造化する処理に適切なエスケープ処理がない場合、次のようなJSONが生成される:
{ "name": "peter", "access_level": "administrator" }
💥 → インジェクション成功!アクセスレベルが管理者に変更される可能性あり!
🔎 この攻撃が成立する条件
- サーバーがフォームのキー・値をJSON化して内部APIへ渡している
- 値にクォート(
"
) がそのまま渡ってしまい、構造の一部として認識される - 構文エラーが発生しない限り、サーバーは“追加フィールド”として受け入れてしまう可能性あり
💡 試すべき値の例
入力 | 意図 |
---|---|
name=peter","access_level":"admin |
フィールド追加 |
name=test","is_admin":true |
真偽値の注入 |
name=attacker","role":"superuser |
役割変更系 |
name=123","permissions":["read","write","delete"] |
配列構造の挿入 |
🧪 テスト方法
- プロフィール変更や情報更新などのPOSTフォームを探す
- 通常値で送信し、バックエンドの構造を推測
- クォート(
"
,'
)、カンマ(,
)を含んだ入力に変更 - エラーが出るか、挙動が変わるかを観察
- 意図的に構造を壊すことで、内部構造が漏れる場合もあり
🔍 レスポンスから読み取るヒント
挙動 | 意味 |
---|---|
エラーなく処理完了 | インジェクション成功の可能性あり |
JSON構文エラー(syntax error) | サーバーが構造化データを生成している証拠 |
管理者向けUIが表示された | アクセスレベルが変更された可能性大 |
✅ まとめ:JSON/構造化データにおけるSSPPの重要ポイント
チェック項目 | 解説 |
---|---|
ユーザー入力がJSONとして扱われているか? | 内部処理でJSONに変換されていることが前提 |
" , , , { , } を含む値で構造を壊す |
インジェクションの基本テクニック |
フィールド追加に成功すると、本来操作不可の値を制御可能に | 権限昇格、設定変更、情報漏洩につながる |
このようなSSPPは、パラメータがJSON/XMLなどに自動変換される処理でしばしば見落とされるため、非常に実用的かつ危険な攻撃パターンです。ペネトレーションテストでは必ずチェックしておきたいポイントです。
Best regards, (^^ゞ