【実務・中級編】JSONPにおけるコールバック関数のXSS脆弱性 – アプリケーションセキュリティ & 安全な開発防御ガイド

JSONPの「罠」:コールバック関数名という盲点を突くXSS攻撃の正体

現場でインシデント対応をしていると、「なぜ今さらJSONPなのか?」という声を聞くことがある。確かにモダンな開発現場ではCORS(Cross-Origin Resource Sharing)が標準だが、レガシーなシステムとの連携や、特定の広告配信タグ、あるいは古い社内ツールにおいて、JSONPは今もなお「死に体のゾンビ」のように生き残っている。

JSONP(JSON with Padding)は、クロスドメイン制約を回避するために「サーバー側でクライアント指定の関数名でJSONをラップして返す」という手法だ。しかし、この「クライアント指定」という仕様そのものが、セキュリティ屋から見れば最大の脆弱性になり得る。

今日は、開発者が「まさかここが?」と見落としがちな、JSONPにおけるコールバック関数のエスケープ漏れについて、その実態と防御策を叩き込む。

—

なぜコールバック関数が攻撃対象になるのか

JSONPの基本的な挙動はこうだ。

1. クライアント:GET /api/data?callback=processData
2. サーバー:processData({"id": 1, "name": "user"})

ここで攻撃者は、callback パラメーターに悪意あるスクリプトを仕込む。
GET /api/data?callback=alert(document.cookie)//

サーバー側でこの値をそのまま出力すれば、レスポンスは以下のようになる。
alert(document.cookie)//({"id": 1, "name": "user"})

見事にJavaScriptが実行される。これがJSONPにおけるXSSのメカニズムだ。ブラウザはこれを「正しいJSスクリプト」と認識し、迷わず実行する。防壁となるべきContent-Typeヘッダーも、

securityintronationalをフォローする

コメント

タイトルとURLをコピーしました