サイバーセキュリティ企業Wizのセキュリティ研究者らが、AWS CodeBuildサービス内の重大な脆弱性を発見した。この脆弱性により、Amazon自身のGitHubリポジトリを完全に乗っ取ることが可能となり、世界中のクラウド環境に壊滅的なリスクをもたらし得たという。
CodeBreachと名付けられたこの欠陥は、昨年8月にAmazonへ開示され、違法な悪用が起きる前の9月に修正された。研究者によれば、この対応により、規模の面で悪名高いSolarWinds侵害を上回り得たサプライチェーン攻撃が未然に防がれたという。「この脆弱性は、AWSコンソール内で利用される中核的なライブラリ――クラウドの中枢神経――を侵害していました」とWizの研究者Yuval AvrahamiはThe Registerに説明した。彼は、SolarWindsの侵入が攻撃者に企業ネットワークへのアクセスを与えた一方で、この侵害は管理者がインフラ全体を統制するインターフェース上で、攻撃者が直接コードを実行できるようにしてしまう可能性があった点を強調した。
脆弱性の発端は驚くほど初歩的だった。Webhookフィルターから、たった2文字が欠落していたのである。Amazonのマネージド継続的インテグレーションサービスであるCodeBuildは、GitHubリポジトリと頻繁に連携する。信頼できないプルリクエストから保護するために専用のフィルターが用いられており、具体的にはACTOR_IDフィルターが、ビルドをトリガーできる承認済みGitHubコントリビューターの厳選リストを許可する。
欠陥は、このフィルターを制御する正規表現にあり、「アンカリング」――文字列の開始と終了を示す記号――が欠けていた。これがないため、システムは識別子の完全一致を要求せず、単に部分文字列を検索してしまっていた。その結果、承認済みメンテナーのIDを含むIDを持つGitHubユーザーであれば、防御境界を回避できてしまった。
WizチームはGitHub Apps機能を用いて必要な識別子を登録する方法を考案し、200件のアプリ登録リクエスト生成を自動化した。1回の試行が成功し、AWS SDK for JavaScriptのメンテナーに紐づく信頼済みIDを取得できた。その後、正当な問題に対する通常の修正に見せかけたプルリクエストを仕立てた。内部には悪意あるペイロード――ビルド環境からGitHub認証情報を流出させるよう設計されたNPMパッケージ依存関係――が隠されていた。ほどなくして研究者らはリポジトリへの無制限のアクセスを得て、メインブランチへコードをマージし、その後のプルリクエストを承認できる権限を持つ管理者を任命できるようになった。
影響が及び得る範囲は途方もない。Wizのデータによれば、AmazonのJavaScript SDKはAWSコンソール自体を含むクラウド環境の66%に組み込まれている。攻撃者は週次リリースの直前にSDKへ有害なコードを密かに注入し、ライブラリの利用者全体を感染させることができた可能性がある。Avrahamiは、このような作戦に特別な高度技術は不要で、平均的な開発者程度のスキルで足りる一方、真の難しさは悪意を無害な貢献として偽装する点にあったと述べた。
Amazonは、顧客環境や社内サービスが侵害された事実はないと主張している。同社は最初の報告から48時間以内に欠陥を修正し、すべての公開ビルド環境の包括的な監査を実施し、ログ解析によりWiz以外の外部者がこの侵害を悪用した形跡がないことを確認したという。この件に関する正式なセキュリティ告知もすでに公開されている。
それでもAvrahamiは、こうした脅威はAWSに固有のものではないと警告する。この脆弱性はCI/CDパイプラインのセキュリティにおける根強い盲点を突くものであり、GitHub Actions、Jenkins、または類似の継続的インテグレーションシステムを利用する主要クラウドプロバイダーやテクノロジー企業すべてに共通するリスクだという。
翻訳元: https://meterpreter.org/codebreach-how-two-missing-characters-almost-toppled-the-aws-cloud/