新たにセキュリティ企業Aquaが発見したAWSクラウド開発キット(CDK)の脆弱性により、攻撃者がアーティファクトS3バケットを手動削除することでターゲットのAWSアカウントを完全に乗っ取る可能性がある。AWSはこの脆弱性を修正したが、CDKバージョンv2.148.1以前を使用している場合はまだ対策が必要だ。
AWSクラウド開発キット(CDK)は開発者がPython、TypeScript、JavaScriptを使用してクラウドインフラストラクチャを定義できるIaCツールである。
Aqua社のセキュリティ研究者Ofek Itach氏とYakir Kadkoda氏によると、脆弱性の根本原因はユーザー要求に基づいてAWSインフラストラクチャを作成するプロセスをブートストラップするために、CDKに要求されるファイルを保存するS3バケット名が容易に予測可能であることだ。いくつかのIAMロール、ポリシーなどを含むこれらのファイルは、すべてcdk-{Qualifier}-{Description}-{Account-ID}-{Region}
というパターンに従って命名された同じS3バケットに保存される。
実際にはユーザーはCDKを実行する際に使用するQualifier
を指定できる、しかし:
多くのユーザーがQualifierをカスタマイズせずに
cdk bootstrap
コマンドを実行するため、ステージングバケットのS3バケットの命名パターンが予測可能になります。これはバケット名qualifierのデフォルト値がhnb659fds
に設定されているためで、バケット名の推測が容易になっています。
研究者によるとこれを知ることによって攻撃者はあるアカウントにCDKブートストラップ
が使用するS3バケットを事前に作成し、正当なアカウント所有者がCDKブートストラップ
を使用しようとした場合にエラーを引き起こす可能性がある。
これ自体が一種のサービス拒否(DoS)攻撃だが、さらに悪いことに完全なアカウント乗っ取りにつながる可能性がある。実際、侵害されたS3バケットが読み取りと書き込みの両方に使用されている場合、例えば攻撃者は管理者ロールを注入できる:
CDKステージングバケットにはCloudFormationテンプレートが含まれています。もし攻撃者が他のユーザーのCDKステージングバケットにアクセスできるようになると、これらのファイルは容易に改ざんされ、デプロイ中に被害者アカウントに悪意あるリソースを注入できるようバックドアを仕込まれる可能性があります。
このシナリオは、具体的にはユーザーがブートストラップした後、例えば使用バケット数を減らそうとCDK S3バケットを削除することで可能になる。研究者たちが論文で詳述しているように攻撃者はリリースされたCDK S3バケットを「ハイジャック」し、所有者側で今後cdk bootstrap/cdk
/deploy
のその後の実行を妨害する権限とメカニズムを設定するかもしれない。
本質的には、ブートストラッププロセス中に作成されたCDKステージングS3バケットを誰かが削除し、その後再びCDKを使用しようとした場合、ターゲットアカウントに管理者ロールを作成できました。
約4万アカウントの分析に基づき、研究者はCDKユーザーの約1%がこの攻撃ベクトルに対して脆弱であると推定している。
AWSはより厳格な所有権チェック とカスタムQualifierを使用することの重要性を強調するドキュメント更新を用いてCDKバージョン2.149.0以降で修正)したが、以前のバージョンでCDKをブートストラップした全てのユーザーはCDKを更新しても脆弱性が残っている。CDKをアップデートするだけでなく、実際にこれらのユーザーはcdk bootstrap
コマンドを再実行するか、FilePublishingRole
CDKロールにIAMポリシー条件を定義する必要がある:cdk-${Qualifier}-file-publishing-role-${AWS::AccountId}-${AWS::Region}