CircleCI セキュリティアラート: CircleCI 内に保存されているシークレットのローテーションをお願いいたします[1月13日更新]
最高技術責任者
セキュリティアップデート 2023年1月13日 - 21:25 UTC(日本時間1月14日午前6時25分)
を公開しました。
セキュリティアップデート 2023年1月12日 00:30 UTC(日本時間1月12日午前9時30分)
当社はAWSと提携し、このセキュリティインシデントに関連してAWSトークンが影響を受けた可能性のある、すべてのお客様に通知をいたしました。本日AWSは、影響を受けた可能性のあるトークンのリストをメールにてお客様へ配信を開始いたしました。メールの件名は、[Action Required] CircleCI Security Alert to Rotate Access Keys( [要対応] CircleCIセキュリティアラート - アクセスキーをローテーションしてください)です。
AWSと連携したことにより、お客様はより簡単に影響を受けたキーを特定し無効、またはローテーションさせることができるようになりました。ご不明な点がございましたら、アクセスキーのローテーションに関するAWSのドキュメントをご参照いただくか、Amazonサポートへご連絡ください。
想定されるご質問と回答:
-
Q. セキュリティアラートのメールを受け取った場合、記載されているAWSアカウントに不正アクセスがあったということですか? 現時点では、お客様のAWSアカウントがアクセスがあったことを示すものはございません。しかしCircleCIに保存されているトークンが流出した可能性があるため、AWSから削除してローテーションする必要があります。
-
Q. 1月4日のセキュリティに関するお知らせ以来、また何かあったのでしょうか? こちらはのセキュリティアップデートは、1月4日のお知らせに関する追加のアラートです。現時点で新たな情報や進展はございません。本文は、お客様がAWS上でAWSトークンを識別し、ローテーションさせることをサポートするためのものです。
セキュリティアップデート 2023年1月10日 - 21:10 UTC (日本時間1月11日午前6時10分)
インシデントレポートについてのアップデート
1月17日火曜日PST(日本時間1月18日中)には、お客様にインシデントレポートを提供できる見込みです。
当社はCircleCIプラットフォームのセキュリティに自信を持っており、お客様はビルドを続けて頂くことができます。 当社のサポートエンジニアリング、カスタマーサクセス、およびセキュリティチームは、引き続きお客様からのご質問やご不明な点にいち早く対応できるよう待機しております。また、こちらのフォーラムでも、ご質問への対応、アップデートを引き続き行っております。ご理解、ご協力を賜り誠に感謝申し上げます。
セキュリティアップデート 2023年1月7日07:30 UTC (日本時間1月7日午後4時30分)
昨日お知らせいたしました、当社でのお客様に代わりましての GitHub OAuth トークンのローテーションは、すべて完了いたしました。
お客様ご自身で OAuth トークンのローテーションをご希望の場合は、下に記載の手順で行っていただけます。
現時点では、社外の監査チームの調査が完了するまで、追加のアップデートはない見込みです。当社CircleCIプラットフォームのセキュリティは向上し、セキュリティに自信を持っておりますので、ご安心してビルドを続けて頂けます。
シークレットと環境変数のローテーション作業に関しお客様へは大変ご不便をおかけしております。また、システムの安全を保つためご協力をいただき、深く感謝申し上げます。当社では引き続きできる限りの緩和策を実行するために、24時間体制でサポートエンジニアリング、カスタマーサクセス、およびセキュリティの各チームがお客様サポートを行っております。また、こちらのフォーラムでもご質問への対応、アップデートを引き続き行っております。
セキュリティアップデート 2023年1月6日23:00 UTC(日本時間1月7日午前8時00分)
GitHub OAuthトークンのローテーションの現在の状況についてお知らせいたします。 2023年1月6日23:00 UTC(日本時間1月7日午前8時00分)現在、トークンのローテーションは99%まで終了しており、今後数時間以内に完了する見込みです。完了次第、再度お知らせいたします。
シークレットとキーのローテーションに取り組まれているお客様は、CircleCIからシークレットとキーを削除するだけではなく、ソース(アクセスを提供するシステム)でキーをローテーションし、新しいシークレットをCircleCIに保存してください。
お客様におかれましては、ご理解、ご協力いただき誠に感謝申し上げます。当社のサポートエンジニアリング、カスタマーサクセス、およびセキュリティチームは、引き続きお客様からのご質問やご不明な点にいち早く対応できるよう待機しております。また、こちらのフォーラムでも、ご質問への対応、アップデートを引き続き行っております。
セキュリティアップデート 1月6日 17:52 UTC (日本時間7日午前2:52)
当社は今回のインシデントに関し、お客様サポートに最善を尽くしております。
前回の更新以降、当社は以下の項目を対処、解決いたしました。
-
個人とプロジェクトの APIトークン: 2023年1月5日00:00 UTC(日本時間1月5日午前9時00分)以前に作成されたすべての個人とプロジェクトの APIトークンを削除しました。
-
Bitbucket OAuth: 2023年1月6日10:00 UTC(日本時間1月6日午後7時00分)時点で、当社のパートナーである Atlassian は Bitbucket ユーザーのすべての OAuthトークンを無効にさせました。Bitbucket トークンはログイン時に更新されますので、追加アクションは必要ありません。Bitbucket ユーザーは、SSH トークンを交換する必要があります。
-
GitHub OAuth: 2023年1月7日07:30UTC(日本時間1月7日午後4時30分)時点で、当社のお客様に代わり、すべてのGitHub OAuthトークンのローテーションを完了いたしました。ご自身でGitHub OAuthトークンをローテーションをご希望のお客様は、以下の手順で行ってください。
注: このセキュリティインシデントは、CircleCI サーバーを使用しているお客様には影響ありません。
1月10日 2:00UTC(日本時間1月10日午前11時00分)時点の更新手順
- OAuth トークン:
-
GitHubを利用している場合: 2023年1月7日07:30UTC(日本時間1月7日午後4時30分)時点で、当社のお客様に代わり、すべてのGitHub OAuthトークンのローテーションを完了いたしました。ご自身での変更を希望されるお客様は、CircleCIアプリケーションから一度ログアウトしていただき、https://github.com/settings/applications へアクセスし「Authorized OAuth Apps」を選択、CircleCIのエントリーを取り消すことで、ご自身でOAuthトークンをローテーションしていただくことができます。完了後、CircleCIに再度ログインし再認証してください。
-
Bitbucket を利用している場合: 2023年1月6日10:00UTC(日本時間1月6日午後7時00分)時点で、当社のパートナーである Atlassian は Bitbucketユーザーの OAuthトークンをすべて無効にさせました。Bitbucket のトークンはログイン時に更新されるため、追加アクションは必要ありません。SSH トークンを交換する必要があります。
-
GitLab を利用している場合: GitLab ユーザーは、アプリケーションへのアクセスを再認証する必要はありません。予防措置として、環境変数、個人とプロジェクトの APIトークン、すべてのSSHキーをローテーションすることを推奨いたします。
-
-
Project APIトークン: [Project Settings(プロジェクト設定)] > [API Permissions(API 権限)] > [Add API Token(API トークンを追加する)] の順に選択して、ローテーションを実行してください。更新: CircleCIは2023年1月5日00:00 UTC(日本時間1月5日午前9時00分)以前に作成されたすべてのトークンのローテーションを完了しました。お客様によるローテンションの実行は必要はありません。
-
プロジェクトの環境変数: [Project Settings(プロジェクト設定)] > [Environment Variables (環境変数)] と進み、既存の値の代わりとなる環境変数を、同じ名前で作成してください。
-
コンテキスト変数: [Organization Settings(組織設定)] > [Contexts (コンテキスト)] に移動し、各コンテキストについてプロジェクトの環境変数と同じことを実行してください。
-
注: 1月9日 22:50 UTC(日本時間1月7日午後4時30分)より、”最終更新日時” を含むようコンテキストAPIを更新しました。これにより、シークレットローテーションがいつ正常に完了したか判断ができるようになります。今後は、APIだけでなく、UIにも ”最終更新日時” が含まれるよう更新をする予定です。APIドキュメントコンテキストと環境変数で詳細をご確認いただけます。
-
ユーザーAPIトークン: [User settings(ユーザー設定)] > [Personal API Tokens(パーソナル API トークン)] に移動して、使用しているトークンを削除し、再作成してください。更新: CircleCI は 2023 年 1月5日 00:00 UTC(日本時間1月5日午前9時00分)以前に作成されたすべてのトークンを無効にさせました。
- プロジェクトSSHキー:
- [Project Settings(プロジェクト設定)] > [SSH Keys(SSH キー)]に移動します。
- デプロイキーを削除して、再度追加します。
- 追加のキーを使用していた場合は、それらを削除して再作成する必要があります。
- 注: SSHキーもターゲット環境からローテーションする必要があります。
- ランナートークン (Runner Tokens): CircleCI CLI を利用して、以下のコマンドを実行してください。
circleci runner token list <resource-class name>
circleci runner token delete "<token identifier>"
circleci runner token create <resource-class-name> "<nickname>"
- 以上のコマンドの実行後に、作成したトークンを 「launch-agent-config.yml」に追加し、ランナーサービス (runner service) を再起動してください。
注:CircleCI 上のすべてのシークレットを発見するためのツール から、実行可能なローテーションのリストをご確認いただけます。
更新 - 2023年1月9日:
get-checkout-key
API V1.1 エンドポイントを使用して、チェックアウト・キーのSHA256署名を返す機能を追加しました。
APIコールの例は、以下をご参照ください。
- curl -H “Circle-Token:
" https://circleci.com/api/v1.1/project/:vcs-type/:username/:project/checkout-key?digest=sha256 - ここでは、クエリパラメータに
sha256
を指定していることに注意してください。
更新 - 2023年3月13日: シークレット発見ツールについて、CircleCI に保存されているが UI 上には表示されないことがあるシークレットも検出するように更新しました。具体的には、名前が変更されたプロジェクトの変数や、GitHub では削除済みでも CircleCI では削除されていないプロジェクトの変数などです。
お客様には、今回のインシデントにつき深くお詫び申し上げると共に、システムの安全を守るため柔軟に対応していただき誠に感謝申し上げます。今後も詳細が明らかになり次第、このページで最新情報をお伝えしていきます。また、こちらのフォーラムでも引き続きお客様やコミュニティの皆様からのご意見、ご質問にお答えしています。
セキュリティアップデート 1月5日(日本時間 6日)
昨日 (1 月 4 日。日本時間 1 月 5 日) 公開したセキュリティインシデントについて、お客様へ最新情報をお伝えするとともに、お客様から多く寄せられているご質問についてもう少し詳しくご説明したいと思います。新年の始まりからこのようなセキュリティインシデントでご迷惑をおかけしておりますことを心よりお詫び申し上げるとともに、すべてのシステムの安全性を確保するための作業へのご理解・ご協力に心から感謝申し上げます。
現在、CircleCI でのビルドは可能です
お客様から一番多くお寄せいただいている質問は、「ビルドは可能ですか?」というものです。答えは「Yes」です。
当社は、今回のインシデントの原因となったリスクを排除できたと確信しています。また、プラットフォームの完全性を確保するために、以下の措置を講じました。
- すべての本番環境マシンをローテーションし、すべてのアクセスキーを入れ替えました。
- すべてのシステムアクセスに関する監査を完了しました。
- 第三者調査機関やパートナー企業と積極的に協力し、調査手順と対応に関する検証を進めています。
お客様に続けていただきたいこと
すべてのお客様に推奨されるアクションについて、より詳しくお伝えします。
CircleCI 内に保存されているシークレットをローテーションしてください。ローテーション方法は複数ありますので、お客様やお客様のチームに適した方法を使用することをお勧めいたします。以下の方法とアプローチをご覧ください。
- OAuthトークン:
-
GitHub を利用している場合: まず https://github.com/settings/applications にアクセスし、[Authorized OAuth Apps] を選択して、CircleCI のエントリを取り消します。取り消しが完了したら、CircleCI からログアウトして再度ログインし、再認証を行います。
-
Bitbucket を利用している場合: https://bitbucket.org/account/settings/app-authorizations/ にアクセスし、GitHub の場合と同様の手順を行ってください。
-
GitLab を利用している場合: 現時点では、GitLab のユーザー情報に不正にアクセスされた痕跡は確認されていません。しかし、念のため、環境変数、個人とプロジェクトの APIトークン、すべての SSH キーをローテーションすることをお勧めします。
-
-
Project APIトークン: [Project Settings (プロジェクト設定)] > [API Permissions (API 権限) ] > [Add API Token (API トークンを追加する)] の順に選択して、ローテーションを実行してください。
-
プロジェクトの環境変数: [Project Settings (プロジェクト設定)] > [環境変数 (Environment Variables)] と進み、既存の値の代わりとなる環境変数を、同じ名前で作成してください。
-
コンテキスト変数: [Organization Settings (組織設定)] > [Contexts (コンテキスト)] に移動し、各コンテキストについてプロジェクトの環境変数と同じことを実行してください。
-
ユーザーAPIトークン: [User settings (ユーザー設定)] > [Personal API Tokens (パーソナル API トークン)] に移動して、使用しているトークンを削除し、再作成してください。
-
プロジェクト SSH キー: [Project Settings (プロジェクト設定)] > [SSH Keys (SSH キー)] に移動し、デプロイキーを削除し、再度追加してください。追加のキーを使用していた場合は、そちらも削除して再作成する必要があります。
-
ランナートークン (Runner Tokens): CircleCI CLI を利用して、以下のコマンドを実行してください。
circleci runner token list <resource-class name>
circleci runner token delete "<token identifier>"
circleci runner token create <resource-class-name> "<nickname>"
- 以上のコマンドの実行後に、作成したトークンを 「launch-agent-config.yml」に追加し、ランナーサービス (runner service) を再起動してください。
*注: 上記手順は、すべてのプロジェクト ([Project Settings])、組織 ([Organization Settings])、およびユーザー ([User Settings]) について実行されることをお勧めします。
また、当社では本日、CircleCI 上のすべてのシークレットを発見するためのツールを作成しました。ローテーションが必要なシークレットのリストを作成するうえでお役立てください。
セキュリティに関する追加の推奨事項
キー、シークレット、変数のローテーションとあわせて、CI/CD パイプラインの構成に追加のプロテクション (保護) レイヤーを追加することもお勧めします。
以下に、お客様のパイプラインのセキュリティを高める方法をご紹介します。
-
可能な限り OIDCトークンを使用し、CircleCI には認証情報を長期間保存しないようにする。
-
IP アドレスの範囲機能を利用して、システムへのインバウンド接続を既知の IP アドレスに制限する。
-
コンテキストを使用してプロジェクト間で環境変数を共有し、API 経由で自動ローテーションを行う。
-
特権アクセスやコントロールを高めるためにランナーを使用する。IP 制限や IAM 管理など、お客様社内のリソースや環境に CircleCI プラットフォームを接続できます。
お客様の声への対応
このインシデントへの対応について、お客様からさまざまなご意見をいただいています。イテレーションと改善を重視する企業として、インシデント管理に関するお客様からのフィードバックは常に心より歓迎、感謝しています。
お客様から寄せられたご質問を以下にいくつかご紹介します。
-
CircleCI の監査ログにアクセスするにはどうすればいいですか?: セルフサービス型監査ログへのアクセスを、無料でご利用になられているお客様を含め、すべてのお客様に拡大いたしました。CircleCI の UI から、セルフサービスの監査ログにアクセスいただけます。最大 30 日間のデータを照会し、照会結果のログを 30 日間にわたりダウンロードすることができます。ただし、CircleCI の監査ログへのアクセスのリクエストは承っておりますが、まずは CircleCI にシークレットを保存していたシステムのログに焦点を絞り、監査および調査を実施することをお勧めします。
-
なぜ水曜日の夜遅く (アメリカ時間) にアラートを配信したのですか?: 1月4日 (水) 午前 11 時 30 分 (日本時間) に CircleCI からシークレット保護のためのガイダンスを発表した後、北米の多くのお客様が夜通しでオンコール対応に追われたことと思われます。これは難しい決断でしたが、最終的に当社は用心に用心を重ね、可能な限り早く情報を公開し、シークレットがリスクにさらされる時間を最小限にする決断を下しました。また、ほぼすべての国に顧客を持つグローバル企業として、セキュリティインシデントを公開するタイミングは “可能な限り早く” 以外にないこともご了承ください。
-
今回のセキュリティインシデントは、12 月 21 日にブログ (英語) に掲載した信頼性についての最新情報と関係があるのでしょうか?: いいえ、今回のインシデントと 12 月 21 日に発表した信頼性に関する件とは関係はございません。信頼性に関する最新情報の公開は、お客様とのコミュニケーションの一環として定期的に行っているものです。今回のインシデントの一部として、12 月 21 日から 1 月 4 日までの期間のログを見直すようお願いしたことと、12 月 21 日の信頼性に関する情報公開のタイミングが重なったのは、単なる偶然の一致に過ぎません。
おわりに
当社社員全員がシステムの安全を守るために努力している中、お客様やコミュニティの皆様のご支援に心から感謝を申し上げます。セキュリティインシデントは、関係者の皆様にとってストレスや負担となるものであり、その点につきましてお詫び申し上げます。詳細が明らかになり次第、このページで最新情報をお伝えしていきます。また、こちらのフォーラムでも、お客様やコミュニティの皆様からのご意見、ご質問にお答えしています。
セキュリティアラート 1月4日(日本時間 1月5日)
いつも CircleCI をご利用いただきありがとうございます。
この度、CircleCI でセキュリティインシデントが発生しましたので、ご報告いたします。詳細については現在鋭意調査中であり、事態の推移や今後の対応策については、判明し次第お知らせいたします。これまでのところ、CircleCI システム内での不正な活動は確認されておりません。しかしながら、万が一への備えとして、ユーザーのみなさまに、データを守るための予防措置へのご協力をお願いいたします。
ご対応のお願い
セキュリティに万全を期すため、みなさまには、以下のご対応を強くお願いいたします:
-
CircleCI 内に保存しているすべてのシークレットを直ちにローテーションしてください。 プロジェクト環境変数やコンテキストに保存されているシークレットも対象となります。
-
みなさまのシステムの内部ログについて、2022 年 12 月 21 日~ 2023 年 1 月 5 日 (または、上記シークレットのローテーションが完了した日) の期間に不正アクセスが行われていないかご確認ください。
また、プロジェクトでプロジェクト API トークンを使用されている方は、追加のご対応が必要となります。トークンはすべて無効化されましたので、こちらのローテーションもお願いいたします。トークンのローテーションの手順については、こちらのドキュメントをご覧ください。
この度は、ユーザーのみなさまに多大なご迷惑をおかけし、誠に申し訳ございません。CircleCI では、お客様および弊社のシステムのセキュリティを最優先に考えています。本インシデントについては現在鋭意調査中であり、事態の詳細については数日以内にお知らせいたします。
シークレットのローテーションへのご協力のほど、どうぞよろしくお願いいたします。