과도하게 허용적인 CORS 정규식(와일드카드 및 이스케이프되지 않은 점)

Permissive CORS Regex (Wildcard with Unescaped Dot)

설명

CORS(Cross-Origin Resource Sharing)에서 허용 도메인을 지정할 때, 정규식 내에 이스케이프되지 않은 '.'(점)을 사용하면 매우 넓은 범위의 도메인을 허용할 수 있습니다. 이로 인해 의도하지 않은 외부 사이트도 접근이 허용되어 보안 취약점이 발생할 수 있습니다. 공격자는 자체 악성 도메인을 통해 민감한 데이터에 접근하거나 세션 하이재킹 등의 악용을 시도할 수 있습니다.

잠재적 영향

  • 허가되지 않은 도메인 접근(비인가 도메인 접근): 잘못된 정규식으로 인해 의도하지 않은 여러 도메인이 리소스에 접근 가능해집니다.

  • 개인 정보 및 민감 데이터 노출(정보 유출): 공격자가 악성 도메인을 통해 중요한 데이터에 접근할 수 있습니다.

  • 세션 탈취(세션 하이재킹): 악성 사이트에서 인증정보를 가로챌 수 있습니다.

해결 방법

  • 도메인 지정 정규식에서는 '.'(점)을 반드시 '\.'(역슬래시와 함께)로 이스케이프 처리합니다.

  • 특정 신뢰 도메인만 명확하게 허용하도록 CORS 정책을 설정합니다.

  • 와일드카드(*)나 과도하게 허용적인 패턴 사용을 지양합니다.

  • CORS 설정을 변경할 때는 철저히 테스트하여 실제 허용되는 도메인이 의도한 범위 내에 있는지 확인합니다.

취약한 코드 및 안전한 코드 예시

취약한 코드

안전한 코드

설명:

  • 취약한 코드: 정규식의 '.'(점)이 이스케이프되지 않아, 'abcexamplexcom'이나 'hacker.evil.com' 등 의도하지 않은 도메인까지 허용될 수 있습니다. 이는 허가하지 않은 사이트에서 민감 정보에 접근할 수 있게 만듭니다.

  • 안전한 코드: 정규식 내 '.'(점)을 '\.'으로 명확히 이스케이프하여, 오직 의도한 정확한 도메인(예: 'www.example.com')만 접근을 허용합니다. 과도한 와일드카드 사용을 지양하고 안전한 도메인만 명확하게 지정하여 CORS 취약점을 예방합니다.

참조

Last updated