sanadamaru's blog

学びメモや考えごとなど

Codecovのセキュリティアップデートの対応~iOS編

コードのカバレッジの計測や可視化をするためにCodecovを使用しているのですが、4/30にCodecovからセキュリティの問題があったと公表したことを知らせるメールが届きました。

On Thursday, April 1st, we learned that someone had gained unauthorized access to our Bash Uploader script and modified it without our permission. The actor gained access because of an error in Codecov’s Docker image creation process that allowed the actor to extract the credential required to modify our Bash Uploader script.

Unfortunately, we can confirm that you were impacted by this security event.

We strongly recommend taking action by reading our security notice about this event to understand how you are impacted and next steps you should take.

about.codecov.io

概要を要約するとCIでCodecov使ってた場合に、CIで使ってる環境変数がもれた可能性があるのでCodecovのBash Uploader利用者はシークレット情報などを更新を推奨しますといった内容でした。

私が業務で携わってるプロジェクトはCircleCIを使用しているので、今回はiOSプロジェクトでどんな対応をしたのかについて書いていこうと思います。

対応内容

CircleCIのEnvironment Variablesに登録している以下のシークレット情報を更新しました。

  • FASTLANE_PASSWORDの変更

  • ASC_API_KEY_IDとASC_API_KEY_CONTENTの変更

  • MATCH_PASSWORDと証明書、プロファイルの変更

FASTLANE_PASSWORDの変更

FASTLANE_USERとセットでFASTLANE_PASSWORDを登録していますが、この設定項目はApple IDとApple IDのパスワードになります。

上記の秘匿情報が悪用された場合、Apple Store Connectやその他Apple関連のサービスに対してアクセスが可能になるため、公開しているアプリを削除されてしまったり、口座情報を知られてしまう等のリスクがあります。

そのため今回は、登録していたApple IDのパスワードを変更して対応しました。

ASC_API_KEY_IDとASC_API_KEY_CONTENTの変更

ASC_API_KEYはApp Store Connectにアクセスするために利用するAPI_KEYです。CircleCIでApp Store Connectの2ファクタ認証をパスするために利用してます。

これはAppleの公式ドキュメントを参考に新規作成して再設定しました。

developer.apple.com

これは今回の対応と関係ないのですが、App Store Connectの2ファクタ認証をパスするためのASC_API_KEYのFastlaneでの使用方法などはFastlaneにわかりやすいドキュメントがあるのでこちらを参照して私は実装しました。

docs.fastlane.tools

MATCH_PASSWORDと証明書、プロファイルの変更

私のチームではfastlane matchを使用して証明書とプロファイルを管理しています。

fastlane matchはチームで共通の証明書とプロファイルの作成や維持を行い、プライベートリポジトリに格納、そして全ての開発者間で共有できるようにするツールです。

docs.fastlane.tools

MATCH_PASSWORDが漏洩した場合、証明書が悪意ある利用をされるリスクがあるためMATCH_PASSWORDを変更しました。

MATCH_PASSWORDの変更は

fastlane match change_password 

のコマンドで変更可能です。このパスワードは任意のものが使えるので、1passwordで発行して設定しました。

MATCH_PASSWORD変更後、証明書とプロファイルも

fastlane match development
fastlane match adhoc
fastlane match appstore

で最設定しました。(証明書の更新期限も近かったのでタイミングとしてはちょうど良かったです。)

最後に

CIやFastlaneは一度設定するとしばらく触ることもなかったりするので「これ何に使ってるんだっけ」「このパスワードどこに保存してあるんだっけ」とか、「どうやって変更するんだっけ」みたいなものが結構あり大変でした。

Androidリポジトリも同様に対応が必要だったためAndroidのプロジェクトも対応しました。(こっちはさらに学びが多かった) その内容も後日書こうと思います。