Bitbucket artifact files can leak plaintext authentication secrets
2024/05/21 BleepingComputer — Atlassian Bitbucket アーティファクト・オブジェクト内で、平文として流出する認証シークレットを悪用する脅威アクターが、AWS アカウントに侵入していたことが判明した。最近に発生している Amazon Web Services (AWS) 侵害において、脅威アクターたちが不正アクセスに使用する、AWS のシークレットという問題がある。それを調査していた Mandiant が、Bitbucket との関連性を発見した。この調査中に発見された問題た示唆するのは、これまでは保護されていると考えられていたデータが、公開リポジトリに平文で流出する可能性である。

BitBucket の保護された変数
Atlassian が運営する、Git 互換のリポジトリ/ホスティングサービスである Bitbucketは、開発者にコード管理とコラボレーションのプラットフォームを提供している。そして、Bitbucket Pipelines は、ビルド/テスト/デプロイのプロセスを自動化する、CI/CD (continuous integration and continuous /deployment) サービスである。
システム管理者たちはアプリを迅速にデプロイした後に、AWS CLI/SDK などの AWS ツールを介してリソースにアクセスするために、AWS に対して Pipelines をダイレクト・リンクすることが多い。
この自動化を促進するために、AWS 認証シークレットなどの機密情報が、Bitbucket の “セキュア変数” に保存される。それにより開発者たちは、他人にキーを公開することなく、コード内で変数を簡単に使用できるようになる。
.png)
Source: Mandiant
BitBucket でセキュア変数を設定すると、Bitbucket 環境における値の公開を防ぐために、暗号化されたかたちでの保存が行われる。
Bitbucket のドキュメントには、「変数をセキュアに設定することで、スクリプトでは変数を使用できるが、その値はビルドログ内に隠される。したがって、セキュアな変数を編集したい場合は、新しい値を与えるか、削除する他に方法はない。 セキュア変数は暗号化された値として保存される」と記されている。
しかし、Mandiant が発見したのは、パイプラインの実行中に生成されるアーティファクト・オブジェクトに、セキュア変数を取り込んだ機密情報が、平文で含まれている可能性である。これらの機密情報がアーティファクト・ファイルで公開されていることに、開発者たちが気づいていない可能性がある。つまり、ソースコードが公開リポジトリに公開され、そこから脅威アクターたちが、シークレットを盗む可能性があるのだ。
平文でのシークレット
このアーティファクトは、Bitbucket プロジェクトの CI/CD プロセスを指定する、”bitbucket-pipelines.yml” コンフィグ・ファイルで定義される。
これらのファイル内の、ディレクティブの1つに “artifacts:” である。それにより、アーティファクト・オブジェクトへとエクスポートされる変数/ファイル/ディレクトリが保持され、その後のビルド/テストのプロセスで使用されていく。
Mandiant によると、開発者が用いる通常の手法は、printenv コマンドを使用して、すべての環境ファイルをテキスト・ファイルに保存し、それをアーティファクト・オブジェクトに渡して、その後のビルド・プロセス・ステップで使用するというものだ。

Source: Mandiant
ただし、このような手法では、セキュア変数は暗号化された形ではなく、平文でアーティファクト・ファイルにエクスポートされることになる。
したがって、アーティファクト・ファイルが公共の場所に保存されている場合において、脅威アクターはテキスト・ファイルを開いて、すべての変数をプレーン・テキストで表示できる。つまり、データ窃取などの悪意のアクションで使用できる、認証秘密を簡単に盗み出すことが可能となる。
Mandiant は、「開発チームがトラブル・シューティングの目的で、Web アプリケーションのソースコードに Bitbucket アーティファクトを使用した事例を見たことがあるが、開発チームが知らないうちに、それらのアーティファクトには秘密鍵のプレーン・テキスト値が含まれていた。その結果として、秘密鍵がインターネット上に公開され、攻撃者に不正アクセスされた」と述べている。
Mandiant によると、CI/CD パイプラインを定義する “bitbucket-pipelines.yml” ファイルを誤って設定し、ログやアーティファクトにセキュア変数が取り込まれることも考えられるという。
また、パイプライン・スクリプトがデバッグ目的で環境変数をログに記録する場合において、意図せずに機密情報がログに記録されてしまう可能性もある。それらのログは、通常において、アクセス可能な場所に保存されるため、秘密が暴露されるリスクが生じる。
緩和策のヒント
Mandiant が開発者に注意喚起しているのは、Bitbucket は機密を管理するようには設計されていないという点である。さらに、開発者に推奨されるのは、生成されたファイル内にプレーン・テキストの秘密が含まれていないことを確認するために、アーティファクトを注意深くレビューすることである。
最後になるが、パイプラインのライフサイクル全体にわたってコード・スキャンを導入し、コードがプロダクション環境に到達する前に、シークレットが暴露されるイベントをキャッチし、それらを削除することが推奨される。
Update 5/21/24:Atlassian は BleepingComputer に対して、Mandiant が示した方法は開発者にとって異例であり、セキュリティのベスト・プラクティスに反すると述べている。
Atlassian は、「ユーザーがパイプラインのビルド中に、セキュアな変数をファイルに出力するのは異例であり、この行為はセキュリティのベストプラクティスに反する。Bitbucket ユーザーに強く推奨するのは、パイプラインを設定する際に、セキュリティのベスト・プラクティスに従うことである。また、シークレット・スキャン、Snyk によるコード・スキャンなどの、サポートされているセキュリティ統合を追加することも推奨する。さらに、Bitbucket は業界スタンダードに従い、Pipelines 変数を暗号化し、ログ内にマスクすることで、不注意による秘密の漏えいを防いでいる」と指摘している。
とても便利なパイプラインですが、接続されるもの同士のポリシーの違いなどにより、さまざまな問題が生じるのだろうと思います。Atlassian の主張はベストプラクティスに従ってほしいというものですが、このゼロトラストと相反する見解にも、なんとなく同意したくなります。今後、いろんなところで、似たような問題が出てくるのかもしれません。よろしければ、CI/CD で検索も、ご利用ください。

You must be logged in to post a comment.