「Zapocalypse」は新たに開示された攻撃チェーンであり、攻撃者がZapierの「Code by Zapier」機能を悪用して、サンドボックス化された単一のPythonステップからZapierアカウントの全面的な乗っ取りへと移行できた可能性を示しています。
Token Securityが実施したこの調査は、未知のゼロデイや特殊なプリミティブに依存していない点で注目に値します。代わりに、5つの既知の脆弱性を連鎖させています。過剰な権限を持つクラウドロール、メモリ上での安全でない認証情報の取り扱い、コンテナイメージを通じたシークレットの漏洩、そして認証済みZapierセッションに読み込まれるフロントエンドパッケージへの過剰なNPM公開権限です。
その結果、ログイン中のすべてのZapierユーザーのブラウザに攻撃者が制御するJavaScriptを注入する現実的な経路が生まれ、接続済みサードパーティサービスの生のOAuthトークンはサーバー側に留まるものの、攻撃者はプラットフォーム全体でそれらのユーザーとして行動できるようになります。
ZapocalypseアタックによるZapierアカウントの乗っ取り
この攻撃チェーンは、ユーザーがZap内でPythonまたはJavaScriptを実行できるZapierの「Code by Zapier」ステップから始まりました。研究者たちはPythonコードブロック内で os.system(‘env’) を使ったシンプルな環境検査から着手しました。
us‑east‑1リージョンのPython 3.11を使用した AWS Lambda上で実行されていることを確認し、その後ディスク上にデプロイされた lambda_function.py を調査しました。
ユーザーコードを実行する前に、 AWS_ACCESS_KEY_ID や AWS_SESSION_TOKEN などのAWS認証情報を環境変数から明示的に削除するロジックが見つかりました。ハンドラー内のコメントには、これは主に誤検知レポートを避けるためであり、真の保護は allow_nothing_role と呼ばれるIAMロールによってもたらされると示唆されていました。
しかし、この前提は2つの点で失敗していました。第一に、 os.environ からキーを削除してもプロセスメモリ内の基底バイトはゼロにされません。そのため、認証情報はヒープ上に残存していました。第二に、このロールは実際には「何も許可しない」わけではなく、有効な読み取り権限を持っていることが判明しました。
最初の点を証明するため、研究者たちは同じLambdaプロセス内で動作するメモリスキャン用Pythonスクリプトを作成し、 /proc/self/maps を参照しながら /proc/self/mem を読み取り、AWSアクセスキーの形式やSTSセッショントークンで使用される IQoJ プレフィックスを検索する正規表現を適用しました。
環境変数は削除されていたにもかかわらず、スクリプトは有効なSTS認証情報を回復しました。これらの認証情報を aws sts get-caller-identity でテストすると、ZapierのAWSアカウント内の制限付きとされていた allow_nothing_role に属することが確認されました。有効なAWS認証情報を入手した後、次のステップは横方向への移動でした。
チームは標準的なIAM列挙技術を用いて、このロールが DescribeRepositories、 ListImages、 BatchGetImage、 GetDownloadUrlForLayer などのECR APIを呼び出せることを発見しました。
この組み合わせにより、1,000以上のプライベートECRリポジトリを列挙し、 ecr:GetAuthorizationToken を呼び出したりDockerの通常の認証フローを使用したりすることなく、S3から直接コンテナイメージをプログラムでダウンロードすることが可能になりました。
ローカルにイメージのコピーを入手した後、研究者たちはシークレットの探索を開始しました。最初にファイルシステムを調べましたが、最も重要なシークレットはイメージのメタデータから発見されました。
各イメージのconfig JSONを取得してビルド履歴を確認したところ、コンテナのビルド時に ARG または ENV を通じてNPM公開トークンが注入されていたことが判明しました。
そのトークンは、検査した結果、書き込みアクセス権を持ち、二要素認証をバイパスし、かつ単一パッケージにスコープされていませんでした。事実上、関連するNPMアカウントが管理できるあらゆるパッケージを公開する能力を付与しており、内部の @zapier/* パッケージや、重要なことにZapierフロントエンドが使用するプライベートな zapier-design-system パッケージも対象に含まれていました。
ブラウザの開発者ツールにより、このデザインシステムバンドルが認証済みの zapier.com の全ページで読み込まれていることが確認されました。攻撃者がこの漏洩したトークンを使って改ざんされたバージョンのパッケージを公開した場合、例えばリモートスクリプトを動的に読み込むことで、ログイン中のすべてのユーザーに対して自動的に実行されるJavaScriptを挿入できます。
その時点から、攻撃者のコードは認証済みZapierオリジンのコンテキストで実行されます。ユーザーとしてUIやAPIを操作し、Zapの作成・変更、テーブルやオートメーションの変更、既存の接続を通じたアクションのトリガーが可能になります。
攻撃者は接続済みサービスの生のOAuthトークンを確認することはできませんが、Zapier内でユーザーとして操作できる能力は、重大な連鎖的影響をもたらすプラットフォームアカウントの完全乗っ取りシナリオを意味します。
翻訳元: https://gbhackers.com/zapocalypse-attack-lets-threat-actors-hijack-zapier-accounts/