GoogleやMicrosoftの著名なオープンソースプロジェクトからGitHubトークンが漏えいしていたことが判明
GitHub上にあるGoogleやMicrosoft、Amazon Web Services(AWS)、Red Hatなどの複数の著名なオープンソースプロジェクトから、GitHubの認証トークンが漏えいしていたことが判明しました。認証トークンの漏えいは、GitHubが提供しているワークフロー自動化ツール・GitHub Actionsを通じて発生するとのことです。
ArtiPACKED: Hacking Giants Through a Race Condition in GitHub Actions Artifacts
GitHub Actions artifacts found leaking auth tokens in popular projects
https://www.bleepingcomputer.com/news/security/github-actions-artifacts-found-leaking-auth-tokens-in-popular-projects/
Unit 42 researchers uncover critical GitHub Actions vulnerability
https://www.developer-tech.com/news/unit-42-researchers-critical-github-actions-vulnerability/
GitHub Actionsはプロジェクトのビルドやテスト、デプロイのパイプラインを自動化する継続的インテグレーションと継続的デリバリー(CI/CD)のためのツールです。ユーザーはGitHub Actionsを使うことで、リポジトリに対するプルリクエストをビルドしてテストしたり、マージされたプルリクエストを運用環境にデプロイしたりするワークフローを作成できます。
GitHub Actionsでは、ワークフロー実行中に生成されるファイルを「artifacts(成果物)」として保存する機能があります。サイバーセキュリティ企業・Palo Alto Networksの脅威インテリジェンスチームであるUnit 42は、このartifactsを通じてGitHubの著名なオープンソースプロジェクトから、GitHubトークンやAPIキーなどの情報が漏えいしていたと報告しました。
Unit 42が「ArtiPACKED」と呼ぶ攻撃手法は、GitHubの安全でないデフォルト設定やユーザーの設定ミス、不十分なセキュリティチェックといった要因の組み合わせで可能になります。問題の1つは、リポジトリコードをクローンしてワークフロー実行中に使用できるようにする「actions/checkout」アクションの設定です。
デフォルトでは、「actions/checkout」アクションはワークフロー内の認証済みオペレーションを可能にするため、GitHubトークンをローカルの.gitディレクトリに保持します。しかし、ユーザーが誤ってチェックアウトディレクトリ全体をartifactsの一部としてアップロードした場合、gitフォルダ内のGitHubトークンが公開されてしまうそうです。また、同じフォルダにはAPIキーやクラウドサービスへのアクセストークン、さまざまなアカウント資格情報などが含まれている可能性があるとのこと。
もう1つの問題は、環境変数を使用してGitHubトークンを格納するCI/CDパイプラインです。ワークフロー内のアクションやスクリプトがこれらのデータを意図的に、あるいは誤ってログに記録した場合、ログはartifactsとしてアップロードされてしまいます。
これらの問題により、悪意のある攻撃者がGitHubトークンをartifactsのログから抽出し、有効期限が切れる前に悪用することができるとUnit 42は主張しています。また、Unit 42はGitHub Actionsを使用するプロジェクトやパブリックリポジトリを特定し、自動スクリプトでそれらをスキャンして攻撃対象を絞ることも可能だとのこと。
もし悪意のあるアクターがGitHubトークンなどを発見した場合、プライベートリポジトリにアクセスしたり、プライベートなソースコードを盗み出したり、悪意のあるコードを仕込んだりすることが可能となります。
Unit 42による調査の結果、以下の14の大規模なオープンソースプロジェクトでGitHubトークンを含むartifactsが公開されていることを発見しました。すでに以下のプロジェクトには連絡済みであり、いずれも問題を修正したと報告されています。
・firebase/firebase-js-sdk(Google)
・microsoft/TypeScript-repos-automation, microsoft/json-schemas, microsoft/typescript-bot-test-triggerer, Azure/draft(Microsoft)
・Ubuntu/adsys(Canonical)
・quay/clair(Red Hat)
・CycloneDX/cdxgen(OWASP)
・opensearch-project/security(AWS)
・penrose/penrose
・Aiven-Open/guardian-for-apache-kafka
・Deckhouse/Deckhouse
・datalad/git-annex
・schemacrawler/SchemaCrawler
・zama-ai/concrete-ml
・official-stockfish/Stockfish
・libevent/libevent
なお、Unit 42はこの問題をGitHubのバグ報奨金プログラムにも報告しましたが、GitHubはこの問題をバグではなく「情報」として分類し、アップロードしたartifactsの保護はユーザーに責任があるという判断を下したとのことです。