Hello there, ('ω')ノ
💡 どうしてSSPPが発生するのか?
アプリケーションが外部ユーザーからのリクエストを受け取り、その一部をそのまま内部APIリクエストのパラメータとして埋め込んでいるケースがあります。
例: 通常のフロー
- ユーザーが以下のURLで検索を行う:
GET /search?query=laptop
- サーバー側で内部APIにリクエストを組み立てて送る:
GET /internal/search?q=laptop&type=public
🚨 SSPP攻撃の例
攻撃者が以下のようなリクエストを送信:
GET /search?query=laptop&type=private
アプリケーションがこのtype=private
を適切に処理せず、内部APIにそのまま送ると:
GET /internal/search?q=laptop&type=private&type=public
💥 結果:type=private
が type=public
より優先され、非公開データが返ってくる可能性
🔍 テスト対象になる入力ポイント
入力箇所 | 例 |
---|---|
クエリパラメータ | ?id=1&type=admin |
フォームフィールド | <input name="role" value="user"> |
ヘッダー | X-User-Role: admin |
URLパス | /profile/admin?id=123 |
🧪 SSPPのテスト方法
✅ 1. パラメータの重複挿入を試す
?type=public&type=private
?user=123&user=456
- フォーム内で同じ名前のフィールドを2つ送る
✅ 2. エンコーディングを使ってバイパスを試す
type%3dadmin
(%3d
は=
のURLエンコード)type%3dadmin&type=guest
type=admin%26debug=true
(&
のURLエンコード)
✅ 3. ヘッダーやCookieにも注入を試す
X-Internal-User: admin
Cookie: user_id=1; is_admin=true
🧠 SSPPとよくある混同に注意
用語 | 内容 |
---|---|
Server-side Parameter Pollution | 内部APIに渡す際のサーバー側でのパラメータ注入 |
HTTP Parameter Pollution | 同じパラメータを複数指定してWAFをバイパスする手法 |
Server-side Prototype Pollution | JavaScriptオブジェクトの__proto__ を汚染する別の脆弱性 |
💡 このトピックでは SSPP = サーバー内でのパラメータ注入 のみに絞って解説します。
✅ まとめ:SSPP対策と実践ポイント
やること | 内容 |
---|---|
ユーザー入力をそのまま内部APIに渡さない | 必ずサニタイズ・エンコード処理を行う |
重複パラメータの優先順位を明確にする | 最初の値だけを採用するなどのルールを明示 |
Burp Intruderでパラメータ汚染テストを実行 | 同名パラメータやエンコード値を大量に試す |
内部APIの挙動を観察 | エラーやデータ漏洩が起こっていないかを注意深く確認 |
SSPPは、内部処理の見落としから発生する脆弱性です。ユーザー入力がどのように使われているかを深く理解し、表面的には見えない「裏側の処理」にこそ注目することが、発見の鍵です。
Best regards, (^^ゞ