🛑

Travis CIのGitHub連携を停止する方法

2021/09/17に公開

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で利用しているSecrets(環境変数)をrevokeする

Travis CIの公式のアナウンスとしてThe Travis CI Blog: Security Bulletinがありますが、このセキュリティ速報ではSecretsのローテーションを推奨しています。

どのリポジトリが影響を受けたか(Secretsを利用していたか)は、次のスクリプトで一覧できるそうです(自分はやる前に連携切ってしまった)

必要なら連携を停止する前に、影響を受けたSecretsをすべてrevokeしたり、変更します(APIトークンなら、そのAPIトークンをrevokeしてregenerateするなど)。

GitHubのTravis CI連携を停止する方法

最近のTravis CIはGitHub Appで利用するようになっています。(過去はWebHookだったケースがあります)
また、Organizationでも利用している場合があるので、その場合にも対応します。

GitHub Appのuninstall

  1. Installed GitHub Appsへアクセス
  2. Travis CIのGitHub Appを開く
  3. Uninstallをクリック

https://twitter.com/azu_re/status/1437798969917128705?conversation=none

これで基本的には、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権限が必要です

  1. Organizationの"Third-party application access policy"ページ(https://github.com/organizations/{org名}/settings/oauth_application_policy)へアクセス
  2. Travis CI(comとorgの2種類ある可能性があります)
  3. Travis CIからのアクセスを"Denied"に変更する

"Denies"とした場合、他のOrganizationユーザーがTravis CI連携しようとしても、Ownerがアクセスを"Grant"し直さない限り連携はできなくなります。

https://twitter.com/azu_re/status/1437804072812244996?conversation=none

参考

Travis CIからログアウトしてOAuthアプリをrevokeする

すべての連携を切ったあとはTravis CIにログインすることもなくなったので、
最後にTravis CIからSignoutして、GitHub側のTravis CIのOAuth連携を切ります。
(ログインに利用してるOAuthの連携)

  1. Authorized OAuth Appsにアクセス
  2. Travis CIを探す
  3. Revoke

その他

Discussion