쿠키의 secure
속성이 true
로 설정되어 보호되면, 브라우저는 암호화되지 않은 HTTP 요청에 쿠키를 보내지 않으므로 중간자 공격(man-in-the-middle attack) 중에 권한이 없는 사용자가 쿠키를 확인할 수 없습니다.
스스로에게 물어보십시오
- 쿠키가 HTTPS 요청이 아닌 통신을 통해 전송되도록 설계되지 않았습니다.
- 웹사이트에 mixed content 가 포함되어 있는지 여부가 확실하지 않습니다.(즉, 모든 곳에서 HTTPS 를 사용하는지 확실하지 않습니다.)
이러한 상황에 해당되는 경우, 위험할 수 있습니다.
추천되는 안전한 코딩 관습
- 모든 곳에서 HTTPS 를 사용하는 것이 바람직합니다. 따라서 쿠키의
secure
플래그를true
로 설정하는 것이 기본값이 되어야합니다. - 세션 쿠키에 대해
secure
플래그를true
로 설정합니다.
취약한 코드의 예
java 코드로 보안에 취약한 쿠키를 만드는 경우:
Cookie c = new Cookie(COOKIENAME, sensitivedata);
c.setSecure(false); // 취약한 코드: secure 플래그가 false 인 채로 생성된 취약한 쿠키입니다.
기본적으로 secure
플래그가 false
로 설정된 경우:
Cookie c = new Cookie(COOKIENAME, sensitivedata); // 취약한 코드: secure 플래그가 정의되지 않은채로 생성된 취약한 쿠키입니다. (기본적으로 false 로 설정됩니다.)
규칙을 준수한 해결책
Cookie c = new Cookie(COOKIENAME, sensitivedata);
c.setSecure(true); // 규칙을 준수한 코드 : secure 플래그가 true 로 설정되어있기에, 암호화되지 않은 HTTP 요청에 대해 민감한 쿠키가 전송되지 않을 것입니다.
참고
- OWASP Top 10 2021 Category A4 - Insecure Design
- OWASP Top 10 2021 Category A5 - Security Misconfiguration
- OWASP Top 10 2017 Category A3 - Sensitive Data Exposure
- MITRE, CWE-311 - Missing Encryption of Sensitive Data
- MITRE, CWE-315 - Cleartext Storage of Sensitive Information in a Cookie
- MITRE, CWE-614 - Sensitive Cookie in HTTPS Session Without ‘Secure’ Attribute
- SANS Top 25 - Porous Defenses
If you like SONARKUBE, don’t forget to give me a star.