Hello there, ('ω')ノ
🔍 ラボの概要
このラボでは、submit feedback
ページにおいて、DOMベースのクロスサイトスクリプティング(DOM XSS)脆弱性が存在します。
具体的には、jQueryの $
セレクタ関数が location.search
から取得したデータを使用して、アンカータグの href
属性を動的に変更しています。
この実装により、攻撃者は悪意のあるJavaScriptコードを注入し、ユーザーがリンクをクリックした際に任意のスクリプトを実行させることが可能となります。
🛠️ 解決手順
submit feedback
ページにアクセスします。URLのクエリパラメータ
returnPath
に任意の文字列を設定し、ページをリロードします。例:
https://YOUR-LAB-ID.web-security-academy.net/feedback?returnPath=/test
([medium.com][1])ブラウザの開発者ツールを開き、
<a id="backLink">
要素を確認します。この要素の
href
属性が、returnPath
パラメータの値に設定されていることを確認します。returnPath
パラメータの値を、JavaScriptスキームを使用した悪意のあるコードに変更します。例:
javascript:alert(document.cookie)
([infosecwriteups.com][2])最終的なURL:
https://YOUR-LAB-ID.web-security-academy.net/feedback?returnPath=javascript:alert(document.cookie)
ページがリロードされたら、
<a id="backLink">
要素のhref
属性がjavascript:alert(document.cookie)
に変更されていることを確認します。Back
リンクをクリックすると、alert
ダイアログが表示され、document.cookie
の内容が表示されます。([medium.com][3])
🧠 解説
この脆弱性は、ユーザーからの入力(この場合はURLのクエリパラメータ)が適切に検証・サニタイズされずに、DOM要素の属性に直接挿入されることに起因します。
特に、href
属性に javascript:
スキームを使用することで、リンククリック時に任意のJavaScriptコードを実行させることが可能となります。
このような実装は、ユーザーの信頼を悪用し、セッションハイジャックやフィッシング攻撃などのリスクを高めます。
💡 対策
ユーザーからの入力をDOMに挿入する前に、適切なエスケープやサニタイズ処理を行う。
href
属性にユーザー入力を使用する場合、javascript:
スキームを禁止し、許可されたスキーム(例:http
,https
)のみを許容する。セキュリティライブラリやフレームワークの利用を検討し、既知の脆弱性を回避する。
Best regards, (^^ゞ