
開発者の CORS 誤解がもたらすセキュリティ脆弱性――Zoom の実装に見る問題
セキュリティ研究者 Jonathan Leitschuh が発見した Zoom のローカルサーバー実装は、CORS(Cross-Origin Resource Sharing)に対する開発者の根本的な誤解を露呈させた。同社は適切なセキュリティヘッダーではなく、画像エンコーディングで脆弱性を隠蔽していたという。
2019年7月10日に報告された本件は、インターネット上のあらゆるウェブサイトから Zoom ネイティブアプリの動作を遠隔で引き起こされ、レスポンスにアクセスされる可能性があることを示唆している。
Zoom のローカルサーバー脆弱性
セキュリティ研究者 Jonathan Leitschuh は、Zoom がマシン上の http://localhost:19421 でリッスンするウェブサーバーを稼働させていることを発見した。Zoom リンクを読み込むと、Zoom のウェブサイトはこのローカルサーバーへリクエストを送信し、ネイティブ Zoom アプリを起動するよう指示する。
Jonathan Leitschuh の報告によると、「通常の AJAX リクエストの代わりに、このページは Zoom のローカルで稼働するウェブサーバーから画像を読み込む。その画像の寸法がサーバーのエラー・ステータスコードを指示する」という。インターネット上のいかなるウェブサイトでも、この仕組みを利用してネイティブ Zoom クライアントの動作をトリガーし、レスポンスにアクセスすることが可能である。
CORS 回避のための画像エンコーディング
Zoom は Cross-Origin Resource Sharing(CORS)ポリシーを回避するため、画像の寸法データにステータス情報をエンコードする手法を採用していた。Jonathan Leitschuh の報告では、「ブラウザは明白に意図的な理由から、localhost で稼働するサーバーに対する CORS ポリシーを完全に無視する」と指摘されている。
Chrome は localhost ウェブサーバーの CORS ヘッダーを尊重する。セキュアな実装であれば、Access-Control-Allow-Origin ヘッダーに https://zoom.us という値を設定するだけで足りたはずである。一方、Firefox が安全でないオリジンからの XHR をブロックする可能性があり、これが Zoom のアプローチの背景にあるとも考えられるが、Firefox は localhost をオリジンとする場合は対応するとされている。

開発者教育の欠落と安全設計の欠如
Chris Foster は「開発者は単にコードを動作させたいだけであり、同一オリジンポリシーを全面的にバイパスすることで動作させるかもしれないが、行動が発覚すれば Zoom が今直面している問題のような事態を招く」と述べた。
同氏はさらに「リンクをクリックする場合、急に知らない人にカメラとマイクが利用可能にされることを期待しない」とも指摘している。Zoom の実装は、ユーザーが予測可能なソフトウェア動作に対して持つ期待を破るものとなっていた。


筆者の見立て
- Zoom はこの機能をリリース期間内に実装する必要があり、CORS を理解していなかった可能性があると論じている。
- localhost でのウェブサーバー稼働は根本的にリスクのある取り組みであるという意見を示している。
- CORS と Content Security Policy(CSP)に関する開発者向けの教育改善が必要な可能性を示唆している。
この記事は元記事の事実のみに基づいて自動生成されました。
出典
fosterelli.co 「Developers don't understand CORS」 https://fosterelli.co/developers-dont-understand-cors