피드로 돌아가기
개발자들은 CORS를 이해하지 못한다 (2019)
GeekNewsGeekNews
Security

개발자들은 CORS를 이해하지 못한다 (2019)

CORS 우회 구현으로 인한 localhost 보안 경계 붕괴 및 취약점 분석

neo2026년 6월 22일13intermediate

Context

Zoom이 사용자 머신에 localhost:19421 서버를 운용하며 웹사이트와 네이티브 앱을 연동하는 구조를 채택함. AJAX 요청 시 발생하는 CORS 제약을 회피하기 위해 이미지 리소스의 크기로 상태 코드를 전달하는 비정상적인 우회 설계를 적용함.

Technical Solution

  • CORS 정책을 준수하는 대신 이미지 로딩 메커니즘을 이용해 브라우저의 SOP(Same-Origin Policy)를 무력화한 구조 설계
  • 특정 도메인(zoom.us)에 한정된 접근 제어를 포기하고 모든 웹사이트가 로컬 서버의 기능을 트리거할 수 있는 보안 허점 노출
  • REST API 기반의 정석적 구현 및 Access-Control-Allow-Origin 헤더를 통한 명확한 화이트리스트 기반 출처 제한 설계 필요
  • 비멱등성 요청에 대한 Preflight(OPTIONS) 요청 메커니즘을 활용해 실제 요청 전 서버의 허용 여부를 검증하는 표준 프로토콜 적용
  • CSP(Content Security Policy) 헤더 도입을 통한 iframe 렌더링 차단 및 추가적인 실행 경로 제어 계층 구축

1. localhost 서버 운용 시 반드시 Access-Control-Allow-Origin에 특정 도메인만 명시하고 와일드카드(*) 사용을 금지했는가?

2. CORS Preflight를 우회할 수 있는 단순 GET/POST(multipart/form-data) 요청이 서버 상태를 변경하는 사이드 이펙트를 유발하지 않는가?

3. API 엔드포인트에서 Content-Type 헤더를 엄격히 검증하여 예상치 못한 형식의 요청을 차단하고 있는가?

4. CSP 헤더를 통해 신뢰되지 않은 도메인에서의 리소스 로딩 및 스크립트 실행 경로를 원천 차단했는가?

원문 읽기