Hello there, ('ω')ノ
🛠 どんな攻撃か?
一部のWebサイトでは、フォーム入力欄をURLのGETパラメータで事前に入力できる仕様があります。この機能をクリックジャッキングと組み合わせると、ユーザーが知らぬ間に事前入力されたフォームを送信してしまうという攻撃が可能になります。
🧪 攻撃の具体例
例えば、以下のようなURLでフォームの名前欄に「carlos」を自動入力できるとします:
https://vulnerable-website.com/update-profile?name=carlos
この機能を使って、以下のような透明なiframeを重ねたHTMLを用意します:
<style> iframe { position: relative; width: 700px; height: 500px; opacity: 0.0001; z-index: 2; } div { position: absolute; top: 300px; left: 50px; z-index: 1; } </style> <div>Click here for a prize!</div> <iframe src="https://vulnerable-website.com/update-profile?name=carlos"></iframe>
- ユーザーは「Click here for a prize!」という見た目のボタンをクリックしたつもりが、実際にはiframe内の「更新」ボタンをクリックしており、意図せずフォームが送信されてしまいます。
🧩 ポイント
- 🔍 フォームがGETパラメータで事前入力できるかを確認する
- 🧼 フォーム送信にトークン(CSRFトークンなど)を使っていないかを確認する
- 🧠 iframe内のボタン位置とデコイ要素の位置を正確に重ねる必要がある
- 🚨 被害者は本物のフォームを送信してしまうため、内容によっては深刻な情報改ざんが可能
🛡 対策
X-Frame-Options: DENY
またはSAMEORIGIN
ヘッダーを使用して、iframeでの表示を禁止する- Content Security Policy (CSP) の
frame-ancestors
ディレクティブで表示元ドメインを制限する - GETパラメータでフォーム値を事前入力させない、または確認画面を設ける
この手法は基本的なクリックジャッキングを応用したもので、意図しない情報の入力・送信をユーザーに強制できる強力な攻撃手法です。特に、認証されたセッション内でフォーム操作が可能な場合には大きな被害につながる可能性があります。
Best regards, (^^ゞ