Security Blog

ソースを表示し、キーをコピーし、すべてを手に入れる

#56

October 2, 2026 · By Marketing team

← All posts

ある研究者が ClickUp のページソースを開いたところ、JavaScript にハードコードされた API キーを発見し、それを使って 1 回のリクエストで 959 件のメールアドレスと 3,165 件の内部機能フラグを取得しました。このキーにはスコープも、レート制限も、有効期限もありませんでした。

セキュリティ研究者が clickup.com にアクセスしました。ページソースを開き、JavaScript にハードコードされた API キーを見つけ、コピーし、GET リクエストを 1 件送信しました。

返ってきたのは、959 件のメールアドレスと 3,165 件の内部機能フラグです。Home Depot、Fortinet、Autodesk、Tenable、Rakuten、Mayo Clinic の従業員のものでした。

文字列 1 つ。リクエスト 1 件。すべてが手に入る。

なぜ起こり得るのか

フロントエンドから API を呼び出す必要がありました。API には認証が必要でした。そこでキーを JavaScript に埋め込んだのです。リリースして、次へ進み、次のスプリントへ。

これは高度な攻撃ではありません。エクスプロイトも、ゼロデイも、ソーシャルエンジニアリングもありません。view-source: と curl だけです。ブラウザとターミナル。初日のインターンが好奇心でやるような行為です。

このキーにはスコープがありませんでした。API が公開するすべてにアクセスできました。レート制限もありませんでした。1 回のリクエストで全件が返りました。有効期限もありませんでした。誰かが気づくまで有効なままでした。多要素認証もありませんでした。この文字列を持っていることが唯一の関門でした。

金銭的な側面

データの露出について語られがちです。では、このデータがどれだけの価値を持つかを考えましょう。

Fortune 500 企業に属する 959 件の企業用メールアドレスです。これは、脅威アクターが対価を支払ってでも欲しい標的型フィッシングのリストです。氏名、役職、そしてこれらの企業が ClickUp を利用しているという事実。それが、フィッシングを成立させるソーシャルエンジニアリングの背景情報になります。

3,165 件の内部機能フラグ。これはロードマップに相当します。競合他社に対して、ClickUp が何を構築し、何をテストし、何がゲートの向こうにあるかを伝えてしまいます。攻撃者に対しては、どの機能が半ば完成していて脆弱である可能性が高いかを教えてしまいます。

これはプライバシーの事故ではありません。ビジネスインテリジェンスの漏洩です。

なぜ繰り返されるのか

これは、今月取り上げたソースコード内資格情報の事故で 4 件目です。Bitwarden の CLI では、平文ファイルに置かれた資格情報が収集されました。Vercel の環境変数は、「sensitive」フラグがデフォルトでなかったため復号可能でした。ある開発者は、復号キーが同じディスク上にあったため、Chrome のパスワード 634 件を失いました。

パターンは常に同じです。資格情報が文字列として存在し、ファイルの中に、変数の中に、ページソースの中にあり、何かがそれを読み取る。読み取るものは変われど、パターンは変わりません。

JavaScript 内の API キーは、その中でも最も悪質な形態です。攻撃が一切不要だからです。キーは公開されています。すべての訪問者に配信されます。ブラウザがダウンロードし、描画し、右クリックした人なら誰にでも表示してしまいます。

どうあるべきだったか

API 呼び出しを、クライアント側の静的キーで認証すべきではありませんでした。選択肢は次のとおりです。

  • バックエンドプロキシ。 フロントエンドは自社バックエンドを呼び出し、バックエンドがキーをサーバー側で保持して API 呼び出しをプロキシします。キーがブラウザに届くことはありません。
  • セッションスコープのトークン。 フロントエンドは、認証後に短命かつ狭いスコープのトークンを取得します。有効期限があり、認証済みユーザーが実行可能な操作のみを行えます。マスターキーではありません。
  • キー自体を使わない。 データが公開情報であれば、認証なしで配信します。公開情報でなければ、未認証の JavaScript には配信しないでください。

クライアント側コードに API キーをハードコードすることは、家の鍵を玄関マットの下に置いたうえで、住所を公開するのに等しい行為です。

資格情報のライフサイクルの問題

この ClickUp のキーは、おそらく一度作成され、JavaScript ファイルに貼り付けられ、リポジトリにコミットされ、本番環境にデプロイされ、それ以降誰も考えていなかったものでしょう。ローテーションした人はいません。スコープを限定した人もいません。有効期限を設定した人もいません。アクセス内容を監視した人もいません。

これが、多くの組織における多くの API キーのライフサイクルです。急いで作成され、必要な場所に貼り付けられ、忘れ去られます。コードベース、設定ファイル、CI/CD パイプライン、そして明らかにページソースに至るまで蓄積されていき、それぞれが開いたままのドアになっています。

問題は、自組織にこのようなキーが存在するかどうかではありません。問題は、それが何本あるのか、そして今日誰かが 1 本コピーしたことに気づけるかどうかです。