開発者がCORSを理解できていない (2019)

2026/06/21 10:35

開発者がCORSを理解できていない (2019)

RSS: https://news.ycombinator.com/rss

要約

Japanese Translation:

この記事は、Zoom に深刻なセキュリティ上の欠陥を暴露している。

http://localhost:19421
という Web サーバーは画像を読み込むために使用されており、標準的な AJAX を使用するのではなく意図的に CORS をバイパスさせている。ブラウザが localhost に対して CORS を無視するという主張とは逆に、Chrome はローカルオリジンに対しても CORS ヘッダーを強制しており、この脆弱性の原因はブラウザの動作ではなく、不適切なオリジンのフィルタリングにある。これにより、どのウェブサイトも認可なしでネイティブの Zoom クライアント操作をトリガーし、機密データをアクセスできるようになる。安全なアプローチとして、
Access-Control-Allow-Origin
を信頼できるドメイン(例:
https://zoom.us
)に明確に制限することが必要である。Google Meet は、コンテンツセキュリティポリシーヘッダーを用いて危険な iframe 渲染をブロックする点で、より安全なパターンを示している例である。特権アクションのために localhost の迂回策に依存することは本質的にリスクが高く、CORS の要件を無視することは、Firefox がセキュアから非セキュアへのリクエストの扱いに対する誤解のような誤認に基づくとしても正当ではない。同様の事故を防ぐために、開発者は一貫性のない CORS バイパスを採用するのをやめ、意図されたドメインと整合した厳格なオリジンポリシーを実装しなければならない。

本文

開発者が CORS を理解していないこと:Zoom の脆弱性から学ぶ教訓

2019 年 7 月 10 日に Chris Foster が執筆した記事に基づき、CORS(Cross-Origin Resource Sharing)の誤解とそのリスクについて整理します。

📌 コースの概要

  • 開発者と企業の規模・業界は多様であるが、共通する課題がある。
  • 特に顕在化している問題は、**「Web 開発者の多くが CORS の仕組みを理解していない」**という点です。
  • この問題は直近で発覚したZoom のセキュリティ脆弱性とも密接に関連しています。

🔍 Zoom 脆弱性の背景と問題点

セキュリティ研究者の Jonathan Leitschuh が Zoom に以下の問題を発見しました:

  • http://localhost:19421
    というポートでローカルホスト上で動作する Web サーバーが存在する。
  • Zoom のウェブサイトへのアクセスにより、同サーバーにリクエストを送信することでネイティブの Zoom アプリを起動させることができる。
  • この攻撃手法において、AJAX リクエストではなく、画像ファイルを読み込むことでデータを取得しています。
  • 画像の幅や高さなどの情報は、エラーコードやステータスコードを決定するために利用され、ソースコード内で明確な実装が行われています。

❓ なぜ画像を使ってデータ返却するのか?

  • 答えはCORS を回避するためです。
  • かつてブラウザが localhost サーバーに対して CORS ポリシーを無視すると主張された事例がありましたが、これは誤りでした。
  • Chrome は localhost 上の Web サーバーに対しても CORS ヘッダーを正しく尊重します。
  • 「Create React App」などでは、フロントエンド(別のポート)とバックエンド API(localhost)を分離して動作させており、クロスオリジンリクエストが全ブラウザでサポートされているのが一般的です。

⚠️ 脆弱性がもたらすリスク

  • Zoom が CORS の仕組みを理解していなかったため、AJAX リクエストを実行できず、「画像ハック」という迂回策を採用せざるを得なくなりました。
  • この手法の結果:
    • Zoom ウェブサイトからネイティブクライアントをトリガーし、応答データを取得できます。
    • インターネット上のあらゆるウェブサイトからも同様の操作が可能になり、重大な脆弱性が露見しました。

✅ 安全な実装方法の推奨例

localhost:19421
で動作する Web サーバーは以下のように実装すべきです:

  • REST API を実装する必要があります。
  • Access-Control-Allow-Origin
    ヘッダーを設定し、値を**「https://zoom.us」**に指定します。
    • これにより、ローカルホストとの通信は**「zoom.us」ドメイン上の JavaScript のみ**が許可されます。
  • 自動的な Zoom ミーティングの立ち上げを防ぐために、CSP(Content Security Policy)ヘッダーを設定し、
    zoom.us
    が Iframe 内でのレンダリングをブロックするよう指示します。

🔒 ユーザーエクスペリエンス(UX)に関する追加課題

  • ブラウザが意図しない
    zoom.us
    リンクに誘導される脆弱性は完全には排除できません。
  • これはソフトウェア欠陥というよりUX 上の判断の問題ですが、不適切です。
  • 良い UX の原則は「ソフトウェアが予測可能であること」にあります。
    • リンクをクリックしてカメラやマイクが突然利用可能になることは絶対に避けるべきです。
  • Zoom は「アプリを直接起動させて優れた UX を実現したい」と述べていますが、標準ブラウザのポップアップ表示を避けたい場合でも、そのポップアップ自体を実装するのが適切です(Google Meet が適切に実装しています)。

🧩 脆弱性の原因と代替案

Zoom がこのように設計した理由は完全に特定はできませんが、以下の点が見解されます:

  • 正当な理由を見出すことができない現行の実装手法。
  • Reddit のユーザー
    lerunicorn
    が提言し、Firefox が「安全なオリジンからの XHR を非安全なオリジンに対してブロックする可能性」を示唆したことで、そのアプローチの動機だったのではないかという解釈も可能。
  • ただし、以下のような事実により、「フィルタリングを見落とす正当な理由」とはなり得ません:
    • Firefox は
      localhost
      でもこの挙動をサポートしている。
    • ネイティブアプリは独自に自己署名証明書を作成可能。
    • ブラウザ拡張機能を利用する代替案が存在する。

💡 開発コミュニティ全体の課題

  • Zoom の問題だけではありません。多くの開発者が CORS の仕組みを十分に理解していないのが現実です。
  • Stack Overflow への投稿などでも、数多くの実例があります。
  • 危険なデフォルト設定のコピー&ペースト
    • 「特定の Express 設定」などの不安全な値を採用しているページが多い。
    • これらをそのままコピーすると、アプリケーション自体が脆弱化してしまいます。
  • 多くのベンダーでZoom と同一の脆弱性が確認されています。

🚫 開発者の傾向と警告

  • 開発者はコードを動作させることに主眼を置いているため、サマージポリシーを完全にはぐらかす手法で機能を働かせようとする傾向があります。
  • 外部からその事実が明らかになれば、Zoom が直面しているような重大な問題を引き起こします。

🎓 今後の課題:CORS の理解と教育

  • CORS の混同は、経験豊富な開発者だけでなく、初心者にも見られます。
  • 2 つの可能性:
    • CORS API が複雑で分かりにくすぎるのか?
    • より優れた開発者教育が必要なのか?
  • 確信はありませんが、現在のアプローチでは明らかな改善が見られないのが現状です。

結論: CORS を正しく活用すれば、この種の操作も安全に実現可能です。それを迂回するハックを行ってはなりません!

同じ日のほかのニュース

一覧に戻る →

2026/06/22 6:29

アペルトス:主権 AI 向けのオープンファウンデーションモデル

## Japanese Translation: スイス AI イニシアチブによって、EPFL、チューリッヒ工科大学(ETH)、CSCS の協力により、画期的な完全にオープンな多言語 AI モデルが開発されました。本モデルは、全データの透明性を確保しながら強力な技術への即時アクセスを提供します——再現性を確保するため、すべてのデータ、コード、重み付け、手法、アライメント原則が文書化されています。1,000 以上の言語から DAY ONE にトレーニングを開始し、8B および 70B パラメータ規模の両方で競争力を誇る性能を実現しています。EU AI アクトの要件に厳格に準拠しており、データ opting-out を尊重し、個人情報を削除するとともに、メモライゼーションを防止します。スイスエコシステム内でスイスコミが戦略パートナーとして携わっており、本イニシアチブはさらなる開発のためのグローバルなスケーラブルな基盤となっており、強力な能力と責任ある管理の間でバランスを保つ道徳的で再現可能な枠組みを確立しています。

2026/06/22 6:40

私の以前の職場は不正行為があるためにだけ存在していたのでしょうか?

## Japanese Translation: 最も重要な教訓は、UK のスタートアップ GenieDB が、そのコア技術革新は後に真面目な業界プレイヤーによって採用されたにもかかわらず、ポートフォリオの成長のためではなく、投資家の資金を手数料主導で吸い上げるための仕組みを可能にするために、Stuart Frost 所有の US ベンチャーファンド「Frost VP」に買収された点である。GenieDB は M&A を狙って収益機会を積極的に見送っており、顧客数は最大 3 ヶ社を超えたことがなかった。また、チームが交代させられ、U.S. に残ったのは著者の一人だけだった。10 年後、Frost VP が SEC から詐欺容疑で訴えられたというニュースが明らかになり、同社は関連のないサービス(例:料理人を雇う個人シェフサービス、クリーニング業者、ビザスポンサーシップやマーケティング会社など)に対して過剰な手数料を徴収するインキュベーターとして活動していたことが判明した。仲裁の結果、投資家が勝訴し、反訴では上記のような詐欺の嫌疑が詳細に記載されていた。Frost は当初、投資家との共謀を主張したが、証拠に立ち向かうことができず敗訴した。GenieDB の CEO やインサイダーは両方とも、投資がこの手数料モデルに動機付けられていたことを認めたが、裁判所は GenieDB がなぜポートフォリオに加わったのかについて具体的な理由を判定することはなかった。このスキームは資金残高を枯渇させ、著者の人生軌道(U.S. 市民権の喪失やキャリアの安定性への影響を含む)を変え、さらに Frost から資金管理の禁止という恒久的な禁制を下すことで、事実上 Frost VP の運営を終了させた。この事例は、高額手数料型のインキュベーターモデルについて鋭い警告を示しており、詐欺的な手数料構造が正当な企業価値を覆い隠し、投資家や従業員双方に壊滅的な長期的影響をもたらす可能性があることを示している。

2026/06/22 6:10

すべては対数なりである

## Japanese Translation: 以下の文章は、情報のすべてを維持しつつ、流れと簡潔性を向上させるための改訂版である: > 本書は、対数($\log N$)を具体的な底を持たない抽象的な実体として捉え直すことで、特定の単位や底が選択される場合にのみ数値的値を獲得するという視点を提案する。この見解は、点そのものが基礎的なものであり、原点の選択を行うことで初めて数値的な変位(displacements)となるベクトル幾何学の概念と直接的な対応を確立する。この枠組みにおいて、対数の底の変更は物理的な単位系の変更、あるいは微積分における微分形式の書き換えに等しい。この議論は対称性を他の分野にも拡張しており、$p$ 進評価($p$-adic valuation)や複素解析における消滅位数(order of vanishing)は、対数代数的構造内での投影として機能し、さらにベクトル空間の対数としての振る舞いを見せる次元などは、分数次元といった仮想的な構成すら許容する。自然対数を多項式の振る舞いと関連付ける極限や導関数を通過して再定義することで、本書は次元、導関数、評価という一見異なる概念が、乗法的構造と加法的结构との間のより深い同型写像(isomorphism)の現れであるとして論じる。結局のところ、この視点を採用することにより、数学に一般共変性(general covariance)を適用することは、冗長な単位依存記号によって遮られている単純で座標freeな実在にアクセスする手段を示唆している。