多くの開発者がCORSを理解していない
原題: Developers don't understand CORS (2019)
なぜ重要か
CORSはウェブセキュリティの基本であり、多くの開発者の理解不足がセキュリティ脆弱性につながる。正しい実装知識は、エンタープライズアプリケーションのセキュリティ強化に直結する。
2019年7月、セキュリティ専門家は、Zoomがlocalhost上で動作するウェブサーバーの脆弱性を発見した。Zoomはブラウザの跨域リソース共有(CORS)ポリシーを回避するため、画像ファイルのサイズでステータスコードを返すというハック的手法を採用していた。専門家は、CORS機構を正しく理解していれば、このような脆弱な実装は必要なかったと指摘している。
セキュリティ研究者Jonathan Leitschuhlが発見したZoomの脆弱性は、ブラウザのセキュリティメカニズムに対する誤解から生じたものだ。Zoomのウェブサイトがユーザーのマシン上のlocalhost:19421で動作するウェブサーバーに対してリクエストを送信し、ネイティブZoomアプリケーションを起動する仕組みになっていた。
Zoomが採用していた手法は、AJAXリクエストの代わりに、ローカルウェブサーバーから画像ファイルを読み込むというものだった。返却される画像ファイルの寸法によってサーバーのエラーやステータスコードを表現していた。この実装方法は、CORSポリシーを回避するために設計されたものだが、ブラウザはlocalhost上のウェブサーバーに対してもCORSヘッダーを尊重する。
著者は、CORS機構を正しく理解していれば、セキュアな実装方法は存在したと述べている。適切なアプローチとしては、localhost:19421上のウェブサーバーがREST APIを実装し、Access-Control-Allow-Originヘッダーの値をhttps://zoom.usに設定すべきだったという。これにより、zoom.usドメイン上で実行されたJavaScriptのみがlocalhost上のウェブサーバーと通信可能になる。
加えて、他のページによるZoom会議の自動開始を防ぐため、zoom.usはiframe内のレンダリングをブロックするContent Security Policyヘッダーを設定すべきだった。著者は、多くのウェブ開発者がCORSの仕組みを理解していないため、このような脆弱な実装が発生すると警告している。localhostで実行されるウェブサーバーが特権的な機能へのアクセスを提供する場合、CORSメカニズムを適切に活用することが重要だと強調している。