Secure 플래그가 없는 민감한 쿠키 설정
Sensitive Cookie Without Secure Flag
설명
이 취약점은 세션 ID나 로그인 상태 같은 민감한 정보를 담은 쿠키를 만들 때 Secure 플래그를 설정하지 않아, HTTP(암호화되지 않은) 요청에도 쿠키가 전송될 수 있을 때 발생합니다. 공격자는 같은 네트워크(공용 Wi-Fi 등)에서 트래픽을 가로채(패킷 스니핑) 이 쿠키 값을 탈취할 수 있고, 탈취한 세션 쿠키로 사용자를 가장해 로그인 세션을 탈취할 수 있습니다.
잠재적 영향
세션 탈취 (Session Hijacking): HTTPS 페이지에서 발급된 세션 쿠키가 이후 HTTP 요청에도 전송되면, 같은 네트워크 상의 공격자가 패킷을 가로채 세션 ID를 훔칠 수 있습니다.
계정 도용 (Account Takeover): 탈취한 세션 ID로 사용자를 가장해 로그인 상태를 그대로 재현할 수 있어, 계정 정보 조회, 설정 변경, 결제 등의 행위를 대신 수행할 수 있습니다.
정보 노출 (정보 유출): 쿠키에 권한 정보, 사용자 식별자 등 추가 민감 정보가 들어있는 경우, 탈취된 쿠키를 통해 더 많은 개인정보가 노출될 수 있습니다.
해결 방법
모든 세션/인증 관련 쿠키에
Secure: true를 설정합니다.서비스 전체를 HTTPS-only로 구성하고, HTTP 요청은 모두 HTTPS로 리다이렉트합니다.
HttpOnly: true도 함께 설정하여 JavaScript를 통한 쿠키 탈취(예: XSS) 위험을 줄입니다.민감하지 않은 쿠키라 하더라도, 가능하면 기본 정책으로
Secure를 사용하는 것을 권장합니다.쿠키 생성/삭제용 공통 헬퍼 함수를 만들고, 그 안에서 항상
Secure와HttpOnly를 기본값으로 설정하도록 합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
setSessionCookie함수는 로그인 세션과 같이 민감한 정보를 담은SESSIONID쿠키를 생성하면서Secure: true를 설정하지 않았습니다. 이 경우 브라우저는 HTTP(암호화되지 않은) 요청에도 이 쿠키를 전송할 수 있고, 공용 Wi-Fi 등에서 공격자가 네트워크 트래픽을 스니핑하여 세션 쿠키를 탈취할 수 있습니다. 또HttpOnly도 설정하지 않아, XSS 취약점이 있을 경우 JavaScript로 쿠키를 읽어갈 위험도 커집니다.안전한 코드: 수정된 코드에서는 세션 쿠키에
Secure: true를 설정해 HTTPS 연결에서만 쿠키가 전송되도록 했습니다. 덕분에 평문 HTTP 트래픽을 가로채도 세션 쿠키는 노출되지 않습니다. 또한HttpOnly: true를 설정하여 브라우저의 JavaScript 코드에서 쿠키에 접근할 수 없도록 막아 XSS를 통한 쿠키 탈취 위험을 줄였습니다. 삭제용 쿠키를 설정할 때도 동일한 보안 속성을 유지해, 브라우저가 같은 쿠키로 인식하고 안전하게 제거하도록 했습니다.
참조
Last updated