CRI-Oコンテナランタイムは多くのKubernetesインストールで使用されているが、その新たな脆弱性により、悪意のあるユーザがホストへroot権限でアクセスできるようになる。この脆弱性はCrowdStrikeの研究者によって発見され、CRI-Oプロジェクトによってすぐに修正された。
この脆弱性は、CrowdStrikeの研究者によって発見・報告され、CRI-Oに開示された。CRI-Oプロジェクトはパッチで脆弱性を修正した。「cr8escape」と呼ばれるこのバグは、Common Vulnerability Scoring System(CVSS)でスコアが8.8となっている。
CVEレポートで次のように報告されている。
この問題により、Kubernetesクラスタにポッドをデプロイする権限を持つユーザが許可されてしまいます。そのユーザはCRI-Oランタイムを使って、悪意のあるポッドがデプロイされたクラスタノードでroot権限でコンテナエスケープと任意のコードを実行できるようになります。
CRI-Oは、オープンソースのKubernetes Container Runtime Interface(CRI)のコンテナ実装である。 2019年にCNCFインキュベーターとして承認され、一部のKubernetesインストールでDockerの代替として使われている。ランタイムとしてCRI-Oを使うマネージドKubernetesプロバイダーには、Red HatのOpenShiftとOracleのCloud Native Environmentがある。AWS EKS、GKE、Azure AKSなどの最もよく知られているマネージドサービスは、Dockershimあるいはcontainerdのいずれかを使っている。
コンテナは、名前空間のあるカーネルパラメータを設定できるため、同じホストで実行される他のコンテナに影響を与えることなく、そのコンテナにのみ影響を与えることができる。これは、コンテナがKubernetes内で実行されているか、スタンドアロンコンテナランタイムで実行されているかに関係なく当てはまる。「Kubernetesとそれが駆動するコンテナランタイムは、ポッドに対して他のユーザへのアクセスをブロックすると共に、これらの「安全な」カーネル設定を更新することを許可する」とCrowdStrikeの研究者は記事で説明している。
CRI-Oバージョン1.19で脆弱性が混入した。その脆弱性により、悪意のあるユーザがこれらの安全対策を回避し、ホストマシンに任意のカーネルパラメータを設定できるようになる。「kernel.core_pattern」パラメーターを使って、ホスト上でrootとしてコマンドを実行できる。内部的には、CRI-Oプロジェクトは「pinns」ユーティリティを使ってポッドのカーネルオプションを設定する。これが、何の検証もなく実行され、ホスト上での任意のコードの実行につながった。
これを悪用するには、ユーザがランタイムあるいはKubernetesクラスターに対してポッドデプロイ権限を持っている必要があることに注意してください。DataDogのセキュリティ研究者であるChristophe Tafani-Dereeper氏は、ポッドセキュリティアドミッションやポッドセキュリティポリシーなどのセキュリティ対策が有効になっていないKubernetesクラスタは、この脆弱性に関係なく同レベルのリスクにさらされると述べている。ただし、ポッドセキュリティポリシーはKubernetes 1.21以降非推奨になっている。
2019年に表面化したrunc CLIツールの別の脆弱性により、悪意のあるコンテナが、そのホストシステムへroot権限でアクセスできるようになる。プラットフォームおよび関連ツールであるKubernetes自体には、近年いくつかの脆弱性が報告・修正されており、ガイドの強化にますます注目が集まっている。