サイバーセキュリティ研究者たちは、Amazon Web Services(AWS)の提供するサービスに複数の重大な欠陥を発見しました。これらが成功裏に悪用されると、深刻な結果を招く可能性があります

この「バケットモノポリー」はこれらの脆弱性の影響は、リモートコード実行(RCE)、フルサービスユーザー乗っ取り(強力な管理者アクセスを提供する可能性があります)、AIモジュールの操作、機密データの露出、データの持ち出し、サービス拒否(DoS)など多岐にわたります」と、クラウドセキュリティ企業のAquaは、The Hacker Newsと共有した詳細なレポートで述べています。

2024年2月に責任ある開示が行われた後、Amazonは3月から6月にかけて欠陥を修正しました。これらの発見は、Black Hat USA 2024で発表されました。

この問題の中心には、「バケットモノポリー」と呼ばれる攻撃ベクトルがあり、ここで言う「シャドウリソース」とは、CloudFormation、Glue、EMR、SageMaker、ServiceCatalog、CodeStarなどのサービスを使用する際に自動的にAWS S3バケットが作成されることを指します。

この方法で作成されたS3バケットの名前は一意であり、あらかじめ定義された命名規則(例: “cf-templates-{Hash}-{Region}”)に従います。攻撃者はこの動作を利用して、未使用のAWSリージョンにバケットを設定し、正当なAWS顧客が脆弱なサービスの1つを使用するのを待つことで、S3バケットの内容に秘密裏にアクセスすることができます。

敵対者が制御するS3バケットに付与された権限に基づいて、このアプローチを使用してDoS条件を引き起こしたり、コードを実行したり、データを操作または盗んだり、被害者アカウントを完全に制御したりすることが可能です。

成功の可能性を最大化するために、攻撃者はバケットモノポリーを使用して、すべての利用可能なリージョンに未請求のバケットを事前に作成し、バケットに悪意のあるコードを保存することができます。ターゲット組織が新しいリージョンで初めて脆弱なサービスの1つを有効にすると、悪意のあるコードが知らず知らずのうちに実行され、攻撃者に制御を与える管理ユーザーが作成される可能性があります。

CloudFormation脆弱性の概要

ただし、攻撃者は、被害者が新しいリージョンで新しいCloudFormationスタックを初めてデプロイするのを待たなければ、攻撃を成功させることはできません。また、S3バケット内のCloudFormationテンプレートファイルを変更して不正な管理ユーザーを作成することも、被害者アカウントがIAMロールを管理する権限を持っているかどうかに依存します。

Glue脆弱性の概要、CodeStar脆弱性の概要

Aquaは、AWS Glue、AWS Elastic MapReduce(EMR)、AWS SageMaker、AWS CodeStar、AWS Service Catalogの5つの他のAWSサービスも、S3バケットの命名方法論に類似したものを使用しており、これによりシャドウリソース攻撃にさらされ、最終的には脅威行為者が権限をエスカレートし、DoS、情報漏洩、データ操作、任意のコード実行などの悪意のある行動を行うことを許可することを発見しました。

  • AWS Glue: aws-glue-assets-{Account-ID}-{Region}
  • AWS Elastic MapReduce (EMR): aws-emr-studio-{Account-ID}-{Region}
  • AWS SageMaker: sagemaker-{Region}-{Account-ID}
  • AWS CodeStar: aws-codestar-{Region}-{Account-ID}
  • AWS Service Catalog: cf-templates-{Hash}-{Region}

同社は、AWSアカウントIDは秘密と見なされるべきであり、Amazonがそのドキュメントで述べていることとは反対であると指摘しました。なぜなら、それらは同様の攻撃を行うために使用される可能性があるからです。

さらに、AWSアカウントに使用されるハッシュは、GitHubの正規表現検索やSourcegraphを使用して発見することができるか、オープンな問題をスクレイピングすることで特定でき、アカウントIDやその他のアカウント関連メタデータから直接ハッシュを計算する方法がなくても、S3バケット名を組み立てることが可能になります。

「この攻撃ベクトルはAWSサービスだけでなく、組織がAWS環境にリソースをデプロイするために使用する多くのオープンソースプロジェクトにも影響します」とAquaは述べています。「多くのオープンソースプロジェクトは、その機能の一部として自動的にS3バケットを作成するか、ユーザーにS3バケットをデプロイするよう指示します。」

「バケット名で予測可能または静的な識別子を使用する代わりに、各リージョンおよびアカウントのために一意のハッシュまたはランダムな識別子を生成し、この値をS3バケット名に組み込むことをお勧めします。このアプローチは、攻撃者があなたのバケットを早期に主張するのを防ぐのに役立ちます。」