Cal.com のアクセス・コントロールの不備:Gecko の AI SAST エンジンが問題を検出

Cal.com Broken Access Controls Lead to Account Takeover and Data Exposure

2026/01/28 gbhackers — オープンソースのスケジューリング・プラットフォームである Cal.com は、開発者フレンドリーな Calendly の代替として知られている。しかし、最近になって、ユーザー・アカウントおよび機密データを攻撃者に露出させる、一連の深刻な脆弱性が発生し修正された。これらの欠陥は、Gecko の AI セキュリティ・エンジニアにより、Cal.com Cloud において発見されたものである。この脆弱性を悪用する攻撃者は、任意のユーザーに対する完全なアカウント乗っ取りと、非公開ミーティングや参加者メタデータなどの、組織を横断する機密情報への不正アクセスを可能にしていた。

AI 強化型の Static Application Security Testing (SAST) プラットフォームを用いる Gecko は、Cal.com のコードベースを自律的にマッピングさせることで、既存ツールや手動のペンテストでは見逃されていた多段階の複雑な脆弱性チェーンを、わずか数時間で特定した。

Gecko は、この種の作業領域の民主化を目指しているという。あらゆる開発者およびセキュリティ・チームによるソフトウェア保護のために、AI が拡張するセキュリティ専門知識を活用するとしている。

この調査は、実環境のアプリケーション・セキュリティにおいて、依然として主要な問題であるアクセス制御の不備に焦点を当てるものだ。

OWASP の 2025 Top-10 によると、テストされたアプリケーションの 100% が、何らかのアクセス制御不備を有しているという。Cal.com のような大規模なコントリビュータ・コミュニティを持つ、セキュリティ意識の高いオープンソース・プロジェクトにおいても、これらの問題が蔓延している状況が示されている。

アカウント乗っ取り (組織経由)

最も深刻な問題は、組織サインアップ・フローに存在する認証バイパスであり、メールアドレスと組織招待リンクのみを用いる攻撃者は、既存の Cal.com アカウントの乗っ取りを可能にしていた。攻撃者は、自身が所有する組織に対して共有可能な招待リンクを生成し、次のような URL を取得する。

https://app.cal.com/signup?token=<64-char-hex-token&gt;

この脆弱性は、サインアップ処理における 3 つの論理欠陥が連鎖 (チェーン) することで発生していた。

  1. usernameCheckForSignup 関数は “available: true” を既定値とし、いずれかの組織のメンバーであるユーザーに対して、事前に重要な検証をスキップしていた。本来であれば拒否されるべき既存の検証済みユーザーのメールアドレスを、登録可能なものとして扱い、有効なアカウントの再サインアップを許可していた。
  2. 第 2 の検証処理では、攻撃者自身の組織スコープ内でのみ、既存ユーザーを確認していた。つまり、”organizationId” によりフィルタリングされたクエリが実行され、このメールアドレスは自分の組織に存在するという確認しか行われていなかった。その結果、他組織に属する検証済みユーザーが、新規ユーザーとして誤判定されていた。
  3. 最後に、サインアップ・ハンドラは、メールアドレスがグローバルで一意であるスキーマに対して、prisma.user.upsert() を where: { email } という条件で実行していた。前段の 2 つの誤った検証を通過すると、この upsert は被害者の既存レコードに一致し、パスワードハッシュの上書き/新しいユーザー名の設定/メールアドレスの検証済みフラグ設定/”organizationId” の攻撃者組織への再割り当てを実行していた。

実際の攻撃は、きわめて単純である。攻撃者は新規または既存の組織を用意し、”https://app.cal.com/signup?token=<token>&#8221; といった招待リンクを生成し、被害者のメールアドレスと新しいパスワードを入力してサインアップ・フォームを送信するだけだった。

このサインアップが成功すると、被害者は通知されることなくアカウントから締め出される。その一方で攻撃者は、カレンダー連携/OAuth トークン/予約情報/API キーなどを含む、アカウントへの完全なアクセスを獲得していた。

すでに Cal.com は、バージョン 6.0.8 をリリースし、この問題を修正している。具体的には、招待トークンを用いたサインアップ処理の前に、ユーザー存在を厳格に検証するプロセスが追加されている。

予約およびカレンダー・エンドポイント

第 2 の脆弱性群は、API ルートの設定不備および IDOR 形式の欠陥により、すべての予約レコードとユーザーデータを露出させるものだ。

Gecko のインデックス化処理により、Cal.com の API v1 では、_get.ts/_post.ts/_patch.ts/_delete.ts といったアンダースコア付きファイルが、内部ルート・ハンドラとして使用されていることが判明した。

メインの index.ts エントリーポイントでは、これらのハンドラへ処理を委譲する前に、認可ミドルウェアが適切に適用されていた。しかし、Next.js のルーティング挙動により、これらのアンダースコア付きファイル自体が、直接ルートとして公開されていた。

これらの内部ルートを直接呼び出すことで、有効な v1 API キーを持つ任意の認証済みユーザーは、認可ミドルウェアを完全にバイパスできていた。その結果、このプラットフォーム全体の予約情報の読み取りと削除が可能となり、以下の情報が露出していた。

  • 参加者の氏名/メールアドレス/個人情報
  • ミーティングのメタデータ/カレンダー情報
  • ユーザーと組織を横断する完全な予約履歴

同様の問題は連絡先 (destination) カレンダー・エンドポイントにも存在し、ID を指定することで任意ユーザーの destination カレンダーを削除し、ルーティング規則を静かに破壊し、業務フローを妨害する可能性があった。

Cal.com は、Next.js のミドルウェアを更新し、/_get、/_post、/_patch、/_delete、/_auth-middleware といった内部ルート・ハンドラへの直接アクセスを明示的に遮断し、これらのパスに対するリクエストに対して HTTP 403 を返すことで対応した。

一連の調査結果が示すのは、認証/認可ロジックにおける小規模で局所的な欠陥が連鎖し、アカウントおよび機密データの完全な侵害へと発展し得ることだ。

Cal.com における影響は、管理者や有料ユーザーの完全なアカウント乗っ取りから、予約情報に埋め込まれた高機密の個人識別情報の露出にまで及んだ。

このインシデントは、多層防御の必要性を改めて示している。そこで必要となるのは、グローバルなアイデンティティ検証の厳格化/全経路における一貫した認可の適用/フレームワークのルーティング挙動に対する慎重な取り扱いである。

また、AI 強化型セキュリティ・ツールの役割も浮き彫りとなった。コードベースの意味的インデックスを構築し、データフローおよびビジネスロジックを推論する Gecko の AI SAST エンジンは、これらの複雑な脆弱性チェーンを迅速に特定するうえで、中核的な役割を果たした。

現時点の Gecko は、このプラットフォームを無料プレビューとして提供している。開発者/脆弱性研究者/セキュリティ・エンジニアに対して、AI 支援型コード・セキュリティをパイプラインに取り入れ、この水準の解析を体験するよう呼びかけている。