개발자들의 CORS 미이해 문제
원제: Developers don't understand CORS (2019)
왜 중요한가
웹 개발자의 CORS 미이해는 보안 취약점으로 직결되는 중요한 문제로, 업계 전반의 보안 강화와 개발 기준 정립에 영향을 미친다.
웹 개발자들이 CORS(Cross-Origin Resource Sharing)를 제대로 이해하지 못하고 있다는 지적이 제기됐다. 2019년 Zoom 보안 취약점 사건이 대표 사례로, Zoom이 localhost 웹서버 접근 시 CORS를 우회하기 위해 이미지 파일 차원으로 데이터를 인코딩하는 방식을 사용한 결과 심각한 보안 문제가 발생했다.
전스택 컨설팅 업계 전문가 Chris Foster는 다양한규모와 산업의 회사에서 만난 개발자들 사이에서 CORS에 대한 이해 부족이 광범위하게 나타난다고 지적했다.
Zoom 취약점이 대표적 사례다. 보안 연구자 Jonathan Leitschuh는 Zoom이 localhost:19421에서 웹서버를 운영하고 있다는 점을 발견했다. Zoom 링크를 열 때 Zoom 웹사이트가 이 로컬호스트 웹서버에 요청을 보내 네이티브 Zoom 앱을 실행한다.
Zoom은 일반적인 AJAX 요청 대신 이미지 파일을 로드하는 방식을 사용했다. 이미지 파일의 크기 차원으로 서버의 오류/상태 코드를 전달했다. Foster에 따르면 이는 CORS를 우회하기 위한 것이었다.
Forster는 올바른 구현 방식을 제시했다. localhost 웹서버는 REST API를 구현하고 Access-Control-Allow-Origin 헤더 값을 https://zoom.us로 설정해야 한다. 이렇게 하면 zoom.us 도메인에서 실행 중인 JavaScript만 로컬호스트 웹서버와 통신할 수 있다. 추가적으로 Content Security Policy 헤더로 iframe 렌더링을 차단해야 한다.
Forster는 또한 localhost 웹서버 자체가 위험하며, 인터넷의 모든 웹사이트에 소프트웨어 설치 같은 특권 접근을 제공해서는 안 된다고 강조했다. CORS를 올바르게 이용하면 이를 안전하게 수행할 수 있다고 지적했다.