SV.SESSION.FIXATION.COOKIE
cookie は、セッションの固定化に対して脆弱であってはなりません。
汚染された値を使用して JSESSIONID cookie が設定されると、Klocwork が SV.ECV.TRUSTMANAGER 欠陥を報告します。
脆弱性とリスク
攻撃者は、汚染データを cookie で使用することにより、セッション ID を既知の値に設定し、自分も被害者のセッションを利用できるようにすることができます。そうすることで、攻撃者は機密情報に不正アクセスできるようになります。
軽減と防止
汚染データが JSESSIONID cookie で使用されないようにします。
脆弱コード例
コピー
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.*;
import java.io.IOException;
public class Test {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
String value = req.getParameter("value");
Cookie cookie = new Cookie("jsessionid", value); // SV.SESSION.FIXATION.COOKIE
}
}
要求に含まれている汚染データを使用して cookie のセッション ID が設定されているため、Klocwork が 9 行目で SV.SESSION.FIXATION.COOKIE 欠陥を報告します。
修正コード例
コピー
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.*;
import java.io.IOException;
public class Test {
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
SecureRandom secureRandom = SecureRandom.getInstance("NativePRNG");
long value = secureRandom.nextLong();
Cookie cookie = new Cookie("jsessionid", value);
}
}
JSESSIONID cookie がランダムな値に設定されるので、Klocwork で SV.SESSION.FIXATION.COOKIE 欠陥が報告されなくなります。
関連チェッカー
外部参考資料
セキュリティトレーニング
Secure Code Warrior が提供しているアプリケーションセキュリティトレーニング教材。