パスワードを忘れた? アカウント作成
121603 journal

beroの日記: HTTPパラメータ汚染(HPP)

日記 by bero

HTTP Parameter Pollution(HPP)
Http Parameter Pollution, a new category of web attacks (slideshare)
pdf

偶然知ったのだが日本ではあまり知られてない気がする。(検索しても日本語ページが出てこない。気づかなかっただけかもしれないが)

(GET/POST/Cookie)パラメータとして「dmy&param=value」をエンコードした「dmy%26param%3dvalue」を渡した場合、
処理の流れによってはparamを上書きできるという話、だと思う。

フロントエンドのパラメータをバックエンド(RESTサービスかなんか)にそのまま投げてる場合

String amount=request.getParameter("amount");
String beneficiary=request.getParameter("recipient");
HttpRequest("http://backendServer.com/servlet/actions","POST","action=transfer&amount="+amount+"&recipient="+beneficiary);

http://frontendHost.com/page?amount=1000&recipient=Mat%26action%3dwithdraw

action=transfer&amount=1000&recipient=Mat&action=withdraw
になる(20-21ページ)

まあこれはバックエンドに投げる前にエスケープ忘れてるだけじゃね?
SQLインジェクションと同種のバグであって、同種の対策でいんじゃね?
といえるが

GETパラメータが(SEO的に?)ウザいので
mod_rewriteでかっこいいURLに見せる、なんてのは

RewriteRule ^([^/]+)$ page.php?action=view&page=$1&id=0 [L]

http://host/abc
が内部的に
http://host/page.php?action=view&page=abc&id=0
となるが

http://host/abc%26action%3dedit

http://host/page.php?action=view&page=abc&action=edit&id=0

となり、ここでphpでは同名パラメータは後のほうが優先されるので
actionにはeditが入る(23-24ページ)

資料ではask.com,exciteなど現実サイトのヤバイ例が出てくる。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
typodupeerror

あつくて寝られない時はhackしろ! 386BSD(98)はそうやってつくられましたよ? -- あるハッカー

読み込み中...