과도하게 허용된 CORS 설정 (Permissive CORS)
Permissive Cross-Domain Policy with Untrusted Domains
설명
Cross-Origin Resource Sharing(CORS)은 웹 브라우저가 다른 출처(origin)의 리소스를 요청할 수 있도록 허용하는 정책입니다.
잘못된 CORS 설정을 사용하면 공격자가 악의적인 웹사이트에서 사용자의 인증 정보를 포함한 요청을 전송하도록 유도할 수 있습니다.
특히, Access-Control-Allow-Origin 값을 사용자 입력을 기반으로 동적으로 설정하는 경우, 공격자가 이를 조작하여 악성 사이트로 세션 쿠키나 민감한 정보를 전송할 수 있습니다.
잠재적 영향
인증 정보 탈취: 공격자가 악성 사이트에서 사용자의 세션 쿠키를 포함한 요청을 보내도록 유도할 수 있습니다.
권한 없는 리소스 접근: 공격자가 CORS 설정을 악용하여 원래 허용되지 않은 리소스를 요청할 수 있습니다.
Cross-Site Scripting(XSS) 공격 강화: CORS와 XSS가 결합되면 공격자가 사용자의 계정으로 API 요청을 실행할 수 있습니다.
해결 방법
정해진 허용 목록(Whitelist)만 사용하기
Access-Control-Allow-Origin헤더를 신뢰할 수 있는 도메인만 반환하도록 설정합니다.*(wildcard)를 사용하지 않도록 합니다.
사용자 입력값을 기반으로 CORS 설정을 동적으로 변경하지 않기
HttpServletResponse.setHeader("Access-Control-Allow-Origin", userInput)과 같은 코드를 사용하지 않습니다.
정적 또는 신뢰할 수 있는 출처만 허용하기
사전에 정의된 허용된 출처 목록을 사용하고, 요청된 도메인이 목록에 포함된 경우에만
Access-Control-Allow-Origin을 설정합니다.
취약한 코드 및 안전한 코드 예시
취약한 코드
안전한 코드
설명:
취약한 코드:
사용자 입력값을 직접
Access-Control-Allow-Origin에 설정하여 공격자가 악의적인 도메인을 설정할 수 있음.
안전한 코드:
허용된 도메인 목록을 미리 정의하고, 요청된
Origin값이 목록에 포함된 경우에만 CORS를 허용.
참조
Last updated