Cloudflare、テナント間データ露出の脆弱性を修正

終了したコンテナは、一時データもろとも完全に消え去るのが本来の設計です。ところが、Cloudflareの広大なインフラでは、機密情報の断片が物理ディスクブロックの前の所有者から消えずに残っていました。同社は最近、Cloudflare Containersの深刻な脆弱性を修正しました。この重大な欠陥により、有料のWorkersアカウントを持つ顧客が、同じ物理サーバー上でかつて稼働していた、まったく無関係な他の顧客のコンテナに由来するデータ断片を回収できる状態になっていました。

Cloudflare Containersは、ワークロードごとに専用のFirecracker microVMを割り当てて厳格に分離しています。各microVMには、Linuxのデバイスマッパーとシンプロビジョニングの仕組みを使った仮想ディスクが提供されます。この洗練されたアーキテクチャは、実際に書き込みが行われた時点で初めて物理ブロックを割り当てるため、ストレージ容量を大幅に節約できます。今回の脆弱性は、従来型の局所的なコンテナエスケープではなく、まさにこのストレージ層に存在していました。

ゼロクリアされないディスクブロックの仕組み

基盤となるディスクは、64 KiBのブロック単位で分割されていました。コンテナが終了・削除されると、使用されていたブロックは共有ストレージプールに返却され、すぐに次の顧客へ割り当てられる状態になります。重要な点として、Cloudflareの内部設定にはskip_block_zeroingというパラメータがありました。この設定は、ブロックを再割り当てする前に行うべきデータの消去を明示的に無効にするものでした。

セキュリティ企業Accomplishの専門家らは、恐ろしいほど単純な悪用シナリオを実証しました。新しくプロビジョニングしたコンテナで、空き領域とみられる場所にわずか4 KiBを書き込むだけで、以前使われていた物理ブロックを手に入れられます。攻撃者はその後、ブロックデバイスから64 KiBの割り当て領域全体を直接読み取ることができます。新たに書き込んだ4 KiBはブロック先頭部分を上書きするだけで、残りの60 KiBには、まったく無関係な企業の機密データが残っている可能性があります。この事案は、それぞれ独立した顧客が同じ基盤インフラを共有するマルチテナント環境において、分離の細部がいかに重要であるかをあらためて示しています。

データ露出の範囲と対応

本番環境での検証では、24件のデプロイのうち18件、4つのグローバルリージョンにまたがる22台の物理ノードのうち20台で、こうした残存データの断片が確認されました。回収された断片には、ディレクトリ構造の全体像、断片化されたデータベースページ、さらには完全な状態のSQLiteデータベースまで含まれていました。その後の徹底的なファイルシステム調査では、他者のファイルシステムに属するディレクトリinodeが約2,700件見つかっています。

幸いなことに、この攻撃手法では、攻撃者が特定の顧客を狙い撃ちしたり、指定したサーバーを侵害したり、特定のファイル群を持ち出したりすることはできませんでした。また、同時に稼働している他のコンテナのライブディスクにアクセスすることも不可能でした。研究者らは、他者のデータを改ざんしたり、稼働中のワークロードを悪意をもって妨害したりできることも実証していません。Cloudflareは、参照可能な過去のディスク操作テレメトリをすべて調査しましたが、Accomplishと自社エンジニアリングチームによる管理下のテスト以外に、悪用された形跡は確認されませんでした。とはいえ、顧客間の分離の堅牢性をめぐって過去に厳しい目を向けられた巨大クラウドプラットフォームにとって、この種の脆弱性は極めて慎重に扱うべき問題です。

AccomplishのOren Yomtov氏は、9月4日にCloudflareの公式バグバウンティプログラムを通じて、この脆弱性を責任を持って報告しました。同社は危険なskip_block_zeroingパラメータを直ちに無効にし、9月7日までに最初の緩和策を展開しました。しかし、この設定を切り替えるだけでは、まったく不十分でした。従来のブロックが、稼働中のディスクや深くキャッシュされたイメージレイヤーと切り離せない形で結び付いていたためです。そのためCloudflareは、すべての仮想ディスクの再作成、基盤キャッシュの消去、影響を受けたmicroVMの全面的な再起動を余儀なくされました。同社は、この徹底的なサニタイズ作業を9月19日に完了しています。Cloudflareによるテナント間コンテナ脆弱性の技術分析によると、顧客側で対処すべき作業は一切ありません。

コンテナ分離をめぐる、より広い影響

この脆弱性が公表される数日前にも、Docker Sandboxesをめぐって、分離の信頼性に関するよく似た議論が起きました。重大なエラーにより、安全なはずのサンドボックス内で実行されたコードが、制限されたディレクトリを容易に突破し、macOSホスト上の極めて機密性の高いファイルに直接アクセスできてしまいました。この事案は、隔離された計算環境における脆弱な境界がひとつあるだけで、壊滅的な代償を払うことになると、あらためて浮き彫りにしました。

さらにCloudflareの中核インフラは最近、別の大規模なサイバーセキュリティインシデントにも巻き込まれました。侵害されたAPIキーにより、攻撃者が不正なWorkerをひそかにデプロイし、プラットフォームの信頼性を悪用して約100,000のウェブサイトを大量に感染させたのです。1月にも、Cloudflareは別の複雑なアーキテクチャ上の論争に直面しました。あるセキュリティ研究者が、Universal SSLとCAAレコードをめぐる議論を呼ぶ挙動を指摘し、数百万のホスト対象ドメインで証明書発行の制限が弱まりかねないと警告したためです。

翻訳元: https://meterpreter.org/cloudflare-containers-cross-tenant-data-flaw/

本記事は meterpreter.org の記事を翻訳・要約したものです。