Travis CIのGitHub連携を停止する方法
Travis CIのセキュリティ的なリスクが表面化したため、GitHubのリポジトリとの連携をすべて切る方法について書いた記事です。
Summary
この記事がやっていることのサマリです。
- Travis CIに設定されているSecrets(環境変数)が、ForkしたPull Request(PR)に対するビルドへ露出していた脆弱性があった
- 具体的な影響範囲の開示や利用者へのメールでの通知などがないため、情報が不透明な状態
- Travis CIはメインで利用しなくなったため、安全のためにTravis CIのGitHub連携を止める
Travis CIのSecurity Bulletin
最初にブログでThe Travis CI Blog: Security Bulletinという簡潔な記事が公開された。
詳細は別途Security Bulletin - Announcements - Travis CI Communityというコミュニティに投稿された(初回はもっと簡潔で後から追記された)。
その後、別のスレッドやTwitterなどで外部の人がもう少し詳細な情報を書いていた。
Travis CIではsecrets env(環境変数)として設定した値は、ForkされたリポジトリからのPull Requestに対するビルドでは利用できないのが正常系です。
もし、ForkしたリポジトリからのPull RequestのビルドでSecrets envが利用できてしまうと、Secrets envを参照して外部にHTTPリクエストなどで送ることでSecretsを盗めてしまうためです。
今回の脆弱性は、このForkからPRにはSecrets envを露出しないという仕組みが一定期間壊れていて、Secrets envがForkされたリポジトリからのPRのビルドにも露出していたという問題です。
影響範囲はPublicリポジトリに限定(これはPrivateリポジトリはforkできる人が限定されるためと説明されている)で、影響期間は2021-09-03から2021-09-10までとされていますが、タイムラインが公開されているわけではないので正確な情報はありません。
- Travis CI Flaw Exposes Secrets of Thousands of Open Source Projects
- Travis CI flaw exposed secrets of thousands of open source projects | Ars Technica
Travis CIで利用しているSecrets(環境変数)をrevokeする
Travis CIの公式のアナウンスとしてThe Travis CI Blog: Security Bulletinがありますが、このセキュリティ速報ではSecretsのローテーションを推奨しています。
どのリポジトリが影響を受けたか(Secretsを利用していたか)は、次のスクリプトで一覧できるそうです(自分はやる前に連携切ってしまった)
- Python script to find ENV_VAR keys on your travis projects via Twitter
- travis-org-vuln-scanner - npm via community
必要なら連携を停止する前に、影響を受けたSecretsをすべてrevokeしたり、変更します(APIトークンなら、そのAPIトークンをrevokeしてregenerateするなど)。
GitHubのTravis CI連携を停止する方法
最近のTravis CIはGitHub Appで利用するようになっています。(過去はWebHookだったケースがあります)
また、Organizationでも利用している場合があるので、その場合にも対応します。
GitHub Appのuninstall
- Installed GitHub Appsへアクセス
- Travis CIのGitHub Appを開く
- Uninstallをクリック
これで基本的には、Pull Requestやコミットに反応するTravis CIでのビルドは動かなくなります。
📝 Organizationの場合は https://github.com/organizations/{org名}/settings/installations
からGitHub Appの一覧を確認できます。
OrganizationのTravis CIのThird-party application access policyを変更する
Organizationの場合は、自分以外のユーザーがTravis CIの連携をする場合があるので、Third-party access policyの設定で、OrganizationとしてのTravis CIのアクセスポリシーを変更します。
📝 この操作はOrganizationのOwner権限が必要です
- Organizationの"Third-party application access policy"ページ(
https://github.com/organizations/{org名}/settings/oauth_application_policy
)へアクセス - Travis CI(comとorgの2種類ある可能性があります)
- Travis CIからのアクセスを"Denied"に変更する
"Denies"とした場合、他のOrganizationユーザーがTravis CI連携しようとしても、Ownerがアクセスを"Grant"し直さない限り連携はできなくなります。
参考
- Organization の OAuth App アクセス制限を有効化する - GitHub Docs
- GitHub Organizationから特定の3rd-Party Appへのアクセス許可を一括または個別に無効化(Revoke)または再付与(Re-Grant)する | DevelopersIO
Travis CIからログアウトしてOAuthアプリをrevokeする
すべての連携を切ったあとはTravis CIにログインすることもなくなったので、
最後にTravis CIからSignoutして、GitHub側のTravis CIのOAuth連携を切ります。
(ログインに利用してるOAuthの連携)
- Authorized OAuth Appsにアクセス
- Travis CIを探す
- Revoke
Discussion