02/01/2024にruncの脆弱性(Leaky Vessels: CVE-2024-21626, CVE-2024-23651, CVE-2024-23653, CVE-2024-23652 )が公開されていました。今回はこちらの脆弱性の概要と、各ディストリビューションの対応について纏めます。情報は逐次更新します。
一次情報源
- Leaky Vessels: Docker and runc container breakout vulnerabilities (January 2024)
- container breakout through process.cwd trickery and leaked fds
- Vulnerability: runc process.cwd and leaked fds container breakout (CVE-2024-21626)
- Buildkit mount cache race: Build-time race condition container breakout (CVE-2024-23651)
- Buildkit GRPC SecurityMode privilege check: Build-time container breakout (CVE-2024-23653)
- Buildkit build-time container teardown arbitrary delete (CVE-2024-23652
クラウドベンダー等の対応
- Amazon
- CVE-2024-21626
- ALASNITRO-ENCLAVES-2024-036 (important): runc
- ALASDOCKER-2024-036 (important): runc
- ALASECS-2024-033 (important): runc
CVSS/プライオリティ
- CVE-2024-21626
- 影響するバージョン
- 1.0.0-rc93 <= runc < 1.1.12
- Priority
- Vendor: 8.6 High
- CVSS Score / CVSS Vector
- Vendor: CVSS:3.1/AV:L/AC:L/PR:N/UI:R/S:C/C:H/I:H/A:H
- 影響するバージョン
- CVE-2024-23651
- 影響するバージョン
- N/A
- Priority
- N/A
- CVSS Score / CVSS Vector
- N/A
- 影響するバージョン
- CVE-2024-23653
- 影響するバージョン
- N/A
- Priority
- N/A
- CVSS Score / CVSS Vector
- N/A
- 影響するバージョン
- CVE-2024-23652
- 影響するバージョン
- N/A
- Priority
- N/A
- CVSS Score / CVSS Vector
- N/A
- 影響するバージョン
修正方法
各ディストリビューションの情報を確認してください。
CVE概要(詳細はCVEのサイトをご確認ください)
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-21626
- ファイルディスクリプタの漏洩
- runc 1.1.11 以前では、いくつかのファイル記述子が runc 内で誤って内部的に漏洩してしまいました。これにより、ユーザーをだまして、悪意のあるイメージを実行したり、悪意のあるDockerfileまたはアップストリームイメージを利用してイメージを構築させる事が出来ます。最終的には、デモがSnykの説明のサイトにもありますが、コンテナを抜け出してホストのファイルにアクセスすることが可能です。
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-23651
- Buildkit: コンテナイメージビルド時の競合状態によるコンテナの脱出(CVE-2024-23651)
- コンテナーのビルド時にキャッシュボリュームをマウントする際のチェック時間/使用時間(TOCTOU)に競合状態が発生することで、 ターゲットのキャッシュディレクトリが既にマウントされている際に、シンボリックリンクでパスを置き換えることができます。これにより、キャッシュファイルシステムがマウントされるはずだったパスにホストのルートファイルシステムがマウントされる可能性があります。
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-23653
- Buildkit: GRPC エンドポイントでの不充分な権限チェック
- Dockerでは、通常のDockerfile構文の代わりにカスタム入力形式パーサーを指定できます。これにより、 Dockerイメージのビルド時に昇格された権限のコンテナーを起動できるようにすることができます。攻撃が成功すると、昇格された特権(完全なLinux機能)を使用してコンテナから脱出し、rootとしてホスト上のコマンドを実行出来る可能性があります。
- https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2024-23652
- Buildkit: コンテナ破棄を悪用した任意のファイルの削除
- 一時的に追加されたディレクトリを使用後に Buildkitがクリーンアップしようとする際、RUN –mountDockerfile内で、マウントのターゲットディレクトリがコンテナファイルシステムに存在しない場合には、そのディレクトリはマウントポイント用に作成され、使用後に再度削除されます。コンテナが生きてる間にこのターゲットディレクトリがシンボリックリンクに置き換えられた場合には、コンテナの破棄中に削除されてしまいます。Buildkitは通常root権限で実行されるため、結果としてホストファイルシステム内の任意のファイルを削除できる可能性があります。
主なディストリビューションの対応方法
詳細は、各ディストリビューションの提供元にご確認ください
- Debian
- Red Hat Enterprise Linux/CentOS/Rocky Linux/Alma Linux
- Ubuntu
- SUSE/openSUSE
対処方法
各ディストリビューションの案内に従い、アップデートを行ってください。
[参考]
- Leaky Vessels: Docker and runc container breakout vulnerabilities (January 2024)
- container breakout through process.cwd trickery and leaked fds
- Vulnerability: runc process.cwd and leaked fds container breakout (CVE-2024-21626)
- Buildkit mount cache race: Build-time race condition container breakout (CVE-2024-23651)
- Buildkit GRPC SecurityMode privilege check: Build-time container breakout (CVE-2024-23653)
- Buildkit build-time container teardown arbitrary delete (CVE-2024-23652)