オープンソースのスケジューリングプラットフォームで、Calendlyの開発者向け代替でもあるCal.comは最近、攻撃者にユーザーアカウントと機密性の高い予約データを露出させる一連の重大な脆弱性を修正しました。
GeckoのAIセキュリティエンジニアがCal.com Cloudで発見したこれらの欠陥により、任意のユーザーに対する完全なアカウント乗っ取りと、組織をまたいだ予約への不正アクセス(非公開ミーティングや参加者メタデータを含む)が可能になっていました。
GeckoはAIで強化された静的解析プラットフォームを用いてCal.comのコードベースを自律的にマッピングし、複雑な多段階の脆弱性チェーンをわずか数時間で発見しました。これらは既存のツールや手動のペネトレーションテストの双方をこれまで回避していた問題でした。
Geckoによれば、これはまさに彼らが民主化を目指す種類の作業であり、AIで強化されたセキュリティ専門知識を、あらゆる開発者とセキュリティチームが利用できる形にして、ソフトウェアを大規模に安全化することを狙っています。
調査は、現実世界のアプリケーションセキュリティで引き続き支配的なカテゴリであるアクセス制御の不備に焦点を当てました。
OWASPの2025年Top 10は、テストされたアプリケーションの100%に何らかのアクセス制御の不備があったと報告しており、Cal.comのように大規模なコントリビューターコミュニティを持つセキュリティ意識の高いオープンソースプロジェクトであっても、これらの問題がいかに蔓延しているかを浮き彫りにしています。
組織経由のアカウント乗っ取り
最も深刻だったのは、組織のサインアップフローにおける認証バイパスで、攻撃者がメールアドレスと組織招待リンクだけを用いて既存のCal.comアカウントを乗っ取れるものでした。
攻撃者は自分が所有する組織の共有可能な招待リンクを生成し、 https://app.cal.com/signup?token=<64-char-hex-token>のようなURLを作成します。
この脆弱性は、サインアップ処理における3つのロジック不備が連鎖したことに起因していました。
usernameCheckForSignup関数がデフォルトでavailable: trueとなっており、すでにいずれかの組織のメンバーであるユーザーに対する重要な検証をスキップしていました。既存の検証済みユーザーを拒否する代わりに、組織メンバーを「そのメールアドレスは登録可能」として扱い、アクティブなアカウントの「再サインアップ」を可能にしていました。- 2つ目の検証ステップは、攻撃者の組織スコープ内の既存ユーザーのみをチェックしていました。クエリは
organizationIdでフィルタされ、実質的に「このメールは自分の組織に存在するか?」を尋ねる形で、グローバルには確認していませんでした。その結果、他組織にいる検証済みユーザーが誤って新規ユーザーとして扱われました。 - 最後に、サインアップハンドラが
prisma.user.upsert()を、メールがグローバルに一意となるスキーマに対してwhere: { email }で実行していました。2つの不備ある検証を通過すると、このupsertが被害者の既存レコードに一致して更新を行い、パスワードハッシュの上書き、新しいユーザー名の設定、メールの検証済みフラグの設定、そしてorganizationIdを攻撃者の組織へ再割り当てしていました。
実際の攻撃は容易でした。攻撃者は組織を作成するか既存の組織を使用し、https://app.cal.com/signup?token=<token>のような招待リンクを生成し、被害者のメールアドレスと新しいパスワードでサインアップフォームを送信するだけでした。
サインアップは成功し、被害者は通知されないまま締め出され、攻撃者はカレンダー連携、OAuthトークン、予約、APIキーを含むアカウントへの完全なアクセスを得ました。被害者には通知は送られませんでした。
Cal.comは、招待トークン経由のサインアップを処理する前に厳格なユーザー存在確認を追加することで、バージョン6.0.8でこれを修正しました。
予約およびカレンダーのエンドポイント
2つ目の脆弱性クラスでは、設定不備のあるAPIルートとIDOR(不適切な直接オブジェクト参照)型の欠陥により、すべての予約レコードとユーザーデータが露出していました。
Geckoのインデックス作成プロセスにより、Cal.comのAPI v1がアンダースコアで始まるファイル(_get.ts、_post.ts、_patch.ts、_delete.ts)を内部ルートハンドラとして使用していることが特定されました。
さらに詳しく
サイバー犯罪防止サービス
サイバーセキュリティ書籍
おすすめスマートフォン
拡張機能
ネットワークセキュリティアプライアンス
脅威インテリジェンスプラットフォーム
安全な通信アプリ
VPNサービス
情報セキュリティ
エクスプロイト
メインのindex.tsエントリポイントは、これらのハンドラに委譲する前に正しく認可ミドルウェアを適用していました。しかし、Next.jsのルーティングの扱い方により、アンダースコアのファイルが直接ルートとしても公開されていました。
これらの内部ルートを直接呼び出すことで、有効なv1のAPIキーを持つ任意の認証済みユーザーが、認可ミドルウェアを完全にバイパスできました。これにより、プラットフォーム全体の予約の読み取りと削除が可能となり、次の情報が露出しました。
- 参加者の氏名、メールアドレス、個人情報。
- 会議のメタデータおよびカレンダー情報。
- ユーザーおよび組織をまたいだ完全な予約履歴。
同様のパターンが宛先カレンダーのエンドポイントにも影響し、IDを指定することで任意ユーザーの宛先カレンダーを削除でき、ルーティング規則を静かに破壊して業務フローを妨害する可能性がありました。
Cal.comは、Next.jsのミドルウェアを更新して、/_get、/_post、/_patch、/_delete、/_auth-middlewareといった内部ルートハンドラへの直接アクセスを明示的にブロックし、これらのパスへの直接リクエストにはHTTP 403を返すことで、この問題を緩和しました。
これらの発見は、認証および認可ロジックにおける小さく局所的なバグが連鎖し、アカウントと機密データの完全な侵害に至り得ることを示しています。
Cal.comにおいては、管理者や有料ユーザーを含む完全なアカウント乗っ取りから、予約に埋め込まれた極めて機微なPII(個人を特定できる情報)の露出にまで影響が及びました。
このインシデントは、多層防御の必要性を改めて強調しています。すなわち、厳格なグローバルな本人性チェック、あらゆるパスでの一貫した認可の強制、そしてフレームワークのルーティング挙動の慎重な取り扱いです。
また、AIで強化されたセキュリティツールの役割も浮き彫りにしています。コードベースのセマンティックインデックスを構築し、データフローとビジネスロジックを推論するGeckoのAI SASTエンジンが、これらの複雑な連鎖を迅速に表面化させる鍵となりました。
Geckoは現在、プラットフォームを無料プレビューとして提供しており、開発者、脆弱性研究者、セキュリティエンジニアに対して、AI支援によるコードセキュリティを試し、このレベルの解析を自分たちのパイプラインに取り込むよう呼びかけています。
翻訳元: https://gbhackers.com/cal-com-broken-access/