あなたのAWSアカウントはブラックハット2021で提示された最新の攻撃に脆弱ですか?



AWSサーバレスアプリケーションリポジトリを利用した混乱した副攻撃の実行

ブラック帽子USA 2021、Wizからの研究者で今月早く.攻撃者があなたのAWS口座の中でデータにアクセスすることができる新しいpresented新しいconfused deputy attack.AWSサーバレスアプリケーションリポジトリ(SAR)内でアプリケーションを発行する際に、不正に設定されたIAMパーミッションを使用すると、攻撃者はアプリケーションのアーティファクトをホストするために使用されるS 3バケットから任意のデータを取得できます.この記事では、脆弱性、ショーケース実際のexploitを説明し、どのようにあなたのアカウントに脆弱性を修正する方法を説明します.SARを使用してアプリケーションを公開している場合は、アクセス許可をダブルチェックすることをお勧めします.
SARは開発者がAWSアカウントでSAMアプリケーションを公開し共有することができるプラットフォームです.これらのアプリケーションは、スタンドアローンまたはeasily be integrated into existing SAM applicationsを展開することができます.
SARへの適用はstraightforwardである.著者として、1つは、S 3のバケツで基本的なアプリケーションコード、テンプレート、ライセンス、およびREADMEファイルをパックし、SARのエントリを作成し、バケットにSARアクセスを付与するバケットにポリシーを添付する必要があります.
S 3ポリシーでは、SARが指定されたS 3バケットに格納されているすべてのオブジェクトを読み取ることができます.それらのドキュメンテーションで、AWSは最初に以下のIAM方針をバケツに付けることを提案しました:
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Principal": {
                "Service":  "serverlessrepo.amazonaws.com"
            },
            "Action": "s3:GetObject",
            "Resource": "arn:aws:s3:::<your-bucket-name>/*",
        }
    ]
}
この政策の問題点は何ですか.それはSARがバケツにアクセスすることが許されているアカウントを制限しません!SARアプリケーションの所有者以外のアカウントは実際にSARでアプリケーションのセットアップを変えることができませんが、あらゆるアカウントはSARを利用して、そのようなBucketPolicyとS 3バケットからオブジェクトとデータを照会することができます.
これは、攻撃者がソースコード、ハードコード化された資格情報、または他のものによってアクセスすることを意図した設定ファイルのような機密データを抽出することができます.さらに悪いことに、バケットがパックされたSARアプリケーションをホストする以上に使用されている場合、それは、反パターン自体ですが、攻撃者もこのデータを取得することができます!

脆弱性の利用
exploitを公開するために,我々はServerless-Goat-Javaの実装のsarアプリケーション設定を準備した.Serverlessなヤギは、OWASPによるJavaScriptのoriginally developedで、意図的に弱いServerlessなアプリケーションです.セキュリティトレーニング目的のためのAWS SARへの我々のpublished ServerlessなヤギJava.
次のテンプレートで、必要なバケットとポリシーを使用してAWS CloudFormationスタックを配備し、SARアプリケーションをホストします.
AWSTemplateFormatVersion: '2010-09-09'
Transform: AWS::Serverless-2016-10-31

Resources:
  ServerlessGoatPackages:
      Type: AWS::S3::Bucket
      Properties:
        BucketName: "serverless-goat-packages"

  ServerlessGoatPackagesPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket: !Ref ServerlessGoatPackages
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: ServerlessRepoAccess
            Action:
              - 's3:GetObject'
            Effect: Allow
            Resource: !Sub "arn:aws:s3:::${ServerlessGoatPackages}/*"
            Principal: 
              Service: "serverlessrepo.amazonaws.com"

その後、我々はServerlessなヤギJavaアプリケーションをパックし、新しく作成されたバケットにそれをアップロードし、SARの新しいSARアプリケーションを作成します.

ご覧のように、アプリケーションはアカウント028938425188にバインドされ、それによってのみ変更することができます.脆弱なアプリAliceをホストしている口座を呼びましょう.
我々の悪用をテストするために、別のSARアプリケーションを必要とします.アカウント242479142と呼びましょう.簡単にするために、Serverlessの山羊Javaを再び配備しますが、アカウントはEveになります.


どのように我々はそれを悪用することができます見てみましょう!
我々のセットアップが完了したので、我々はアカウントEve ' sバケツからデータを照会して、アカウントAliceのSARアプリのための構成としてそれを設定しようとすることができます.
したがって、アカウントEveから任意のファイルにアカウントEve ' sのREADMEファイルを設定するSARを指示します.

再びSARのアプリを見て、SARはアカウントAliceのアプリで次のREADMEが表示されます

Phew、我々は悪です!😈 我々は、著者のライセンスファイルを盗んだ!もう一つ試してみましょう

今回は、取得した情報はもっと興味深いものです.

もちろん、このデモのためのダミー情報だけです.😊
あなたが見たように、exploitはあなたがそれについて知っていれば非常に簡単です.アプリケーションのIDが公開されている場合、バケツとファイル名だけが攻撃者によって推測されなければなりません.これはハードに聞こえるかもしれない!まあ、私たちが知っているように、あいまいさによるセキュリティはあまりにもうまく動作しないので、適切な修正プログラムのために努力しよう!

脆弱性の修正
修正プログラムは、exploitよりも簡単です!我々は、SARのアプリをホストするために使用される当社のバケツは、実際には、アプリケーションを公開アカウントにアクセスできることを確認する必要があります.
したがって、私たちは、私たちのEveを変更しなければなりません.
  SampleBucketPolicy:
    Type: 'AWS::S3::BucketPolicy'
    Properties:
      Bucket: !Ref ServerlessGoatPackages
      PolicyDocument:
        Version: 2012-10-17
        Statement:
          - Sid: ServerlessRepoAccess
            Action:
              - 's3:GetObject'
            Effect: Allow
            Resource: !Sub "arn:aws:s3:::${ServerlessGoatPackages}/*"
            Principal:
              Service: "serverlessrepo.amazonaws.com"
            Condition:
              StringEquals:
                "aws:SourceAccount": "AWS::AccountId"

本当に、AWSは脆弱性が彼らに明らかにされた直後に新しい状態式を加えました、そして、updated their documentation accordingly.しかしながら、SARアプリケーションの所有者は彼らのS 3バケット方針をアップデートする必要があります、さもなければ、それぞれのAWS口座は弱く残ります.
固定ポリシーを使用してスタックを再配備した後、再度exploitを試してみると次のようになります.

すごい!現在SARはアカウントBucketPolicyの代わりにアカウントconditionのアプリを変更することができます!🛡
注:我々は修正プログラムを公開した後、ポリシーを変更するので、簡単に自分自身をSAR applicationで自分自身を試してみることができます!

脆弱性の修正は一つのことです.しかし、どのように最初の場所でそれを見つけるには?
開発者とセキュリティチームを見つけるために
クラウドネイティブアプリケーションでの脆弱性の修正.CodeShieldはまた、あなたの曇りのスタックとテンプレートファイルで描かれた混乱した副攻撃に脆弱なバケットを見つけるのを助けることができます.それをチェックし、CodeShield!
try CodeShield yourself
あなたがterraformを使用しているか、CloudFormationスタックを通してあなたのSARバケツをセットアップしないならば、とどまってください.我々は現在、CodeShieldは、スタックやテンプレートの独立して全体AWSのアカウントをスキャンすることができる拡張されます.場合は、アカウント全体のスキャン準備ができたら、通知通知を取得したい場合は、!
drop us a mail
著者について
マニュエル・ベンツは 、マイクロサービスアーキテクチャの詳細なプログラム分析に焦点を当てている新しいコンテクストを意識したクラウド・セキュリティ・ツールの共同創設者です.スタートアップの前に、マニュエルはパーダーボルン大学のSecure Software Engineeringグループで、脆弱性発見のために静的でダイナミックなプログラム分析の組合せに関する研究者として働きました.マヌエルは引き続きCodeShieldを維持している.
ヨハネスSPは、AWSコミュニティビルダーとSoot static program analysis framework for Javaの共同創設者です.ヨハネスは静的プログラム分析で博士号を取得した.彼の論文では、彼はセキュリティ脆弱性の自動検出を可能にするCodeShieldを発明した.