Synkは1月31日(米国時間)、「Leaky Vessels: Docker and runc Container Breakout Vulnerabilities - January 2024|Snyk」において、Dockerおよびruncに「Leaky Vessels」と呼ばれる4つの脆弱性を発見したと報じた。これら脆弱性が悪用されると、コンテナ環境をすり抜けてホストオペレーティングシステムに不正アクセスを受ける可能性がある。深刻度は最も高いもので緊急(Critical)と評価されており注意が必要。
脆弱性「Leaky Vessels」の概要
発見された4つの脆弱性は次のとおり。
- CVE-2024-21626 - 内部のファイル記述子の漏洩により、新しく起動したコンテナプロセスにホストファイルシステムの名前空間内の作業ディレクトリーを持たせることができる。その結果、ホストファイルシステムへの不正アクセスおよびコンテナ環境を抜け出される可能性がある
- CVE-2024-23651 - BuildKitを使用して2つの構築処理を行う際に同じキャッシュマウントとサブパスを指定して同時に実行すると競合状態が発生し、ホストシステムからビルドコンテナのファイルにアクセスされる可能性がある
- CVE-2024-23653 - BuildKitのAPIを使用すると昇格した権限でコンテナを実行できる
- CVE-2024-23652 - 悪意のあるBuildKitフロントエンドやDockerfileの「RUN --mount」により、ホストシステムの任意のファイルまたはディレクトリーが削除される可能性がある
これら脆弱性の影響を受けるとされる製品およびバージョンは次のとおり。
- runc 1.1.11およびこれ以前のバージョン
- Docker BuildKit v0.12.4およびこれ以前のバージョン
これら脆弱性を修正した製品およびバージョンは次のとおり。
- runc 1.1.12およびこれ以降のバージョン
- Docker BuildKit v0.12.5およびこれ以降のバージョン
脆弱性検出ツールが公開
Synkはこれら脆弱性を検出する次の2つのツールを開発し、オープンソースで公開している。これらツールはいずれも偽陽性、偽陰性の結果を生じる可能性があると指摘されている点に注意。また、脆弱性の悪用を検出するだけで阻止しない点についても理解した上で活用する必要がある。
- 「GitHub - snyk/leaky-vessels-dynamic-detector: Leaky Vessels Dynamic Detector」 - 動的(ランタイム)検出ツール。LinuxのシステムコールとDockerデーモンの関数呼び出しをフックして脆弱性の悪用を検出する
- 「GitHub - snyk/leaky-vessels-static-detector: Static detection tool for runc and Docker "Leaky Vessels" vulnerabilities」- 静的検出ツール。BuildKitの「parser」パッケージを使用してDockerfileの抽象構文木(AST: Abstract Syntax Tree)を生成し、これをトラバースして脆弱性の悪用を検出する
影響と対策
Synkの調査によると現時点ではこれら脆弱性の悪用は確認されていない。しかしながら、パッチが適用されデプロイされるまでの間、上記のようなツールを活用して環境およびコンテナを監視することが推奨されている。また、既存のコンテナをスクリーニングし、オーケストレーションノードやビルドインフラストラクチャーがすでに影響を受けていないか確認することも推奨されている。