本文の内容は、2022年1月21日にMichael Clarkが投稿したブログ(https://sysdig.com/blog/cve-2022-0185-container-escape/)を元に日本語に翻訳・再構成した内容となっております。
今週、Linux のメンテナーおよびベンダーは、Linux カーネルに存在するヒープオーバーフローの脆弱性を公開しました。この脆弱性は、Common Vulnerability and Exposures IDとしてCVE-2022-0185が発行されており、深刻度はHigh(7.8)と評価されています。
この欠陥は、レガシーパラメータを処理する際の Filesystem Context システムで発生します。攻撃者はこの欠陥を利用して、DDoS を引き起こしたり、コンテナ環境でエスケープしたり、特権昇格させたりすることができます。
この問題のあるコードは、約3年前の2019年3月にバージョン5.1-rc1でLinux Kernelに導入されました。1月18日にリリースされたパッチでは、この問題が修正されています。すべてのLinuxユーザーは、最新バージョンのカーネルをダウンロードしてインストールすることをお勧めします。
リサーチャーのJamie Hill-DanielとWilliam Liuは、この脆弱性のディスカバリーとレスポンシビリティをもって開示に貢献しました。
CVE-2022-0185の問題点
CVE-2022-0185の欠陥は、FIlesystem Contextシステム(fs/fs_context.c)のlegacy_parse_param関数に見られる整数アンダーフローの状態に起因します。ファイルシステムコンテキストシステムは、ファイルシステムをマウントおよびリマウントするためのスーパーブロックを作成する際に使用されます。スーパーブロックには、ブロックサイズやファイルサイズなどのファイルシステムの特性や、任意のストレージブロックが記録されます。脆弱な関数に4095バイト以上のデータを送信することで、入力長のチェックがバイパスされ、境界外の書き込みにつながる可能性があります。これにより、攻撃者はメモリの他の部分に書き込みを行い、システムをクラッシュさせたり、脆弱なシステム上で特権を高めるために任意のコードを実行したりすることができます。
また、攻撃者はこれを利用して、コンテナのエスケープ移動を行うことができます。これに成功すると、攻撃者はホストOSとそのシステム上で動作するすべてのコンテナを完全に制御することができます。制御できるようになると、内部ネットワークセグメントのリソースを攻撃したり、悪意のあるコンテナを本番環境内にデプロイしたりすることができます。
パーミッションの検出
幸いなことに、攻撃者はこの攻撃を実行するために、CAP_SYS_ADMINケイパビリティが有効になっている必要もあります。現在のユーザーのコンテキストで”capsh -print”コマンドを使用すると、有効になっているケイパビリティをリストアップできます。
CVE-2022-0185の影響
この欠陥の深刻度は”高”で、スコアは7.8となっています。影響度が高く、ローカルの攻撃者が容易に行使できることがわかります。ネームスペースは、Linux におけるコンテナの基本的な側面です。Linux カーネルのこの機能は、カーネルリソースを分割し、あるプロセスセットがあるリソースセットを見ている間に、別のプロセスセットが異なるリソースセットを見ることを可能にし、潜在的に複数のスペースに存在します。
攻撃者がリモートからアクセス可能なサービスを悪用して、危険なコンテナに足場を築くことができれば、この欠陥を利用してコンテナ環境をエスケープし、ホストシステムのroot権限を取得することができます。
現時点では具体的な悪用方法は公開されていませんが、リサーチャーはこの脆弱性を確実に実証することができます。この脆弱性を利用した攻撃方法が公開されるのは時間の問題でしょう。
CVE-2022-0185の緩和策
CVE-2022-0185は、Linux Kernelのパッチをインストールすることで緩和できます。パッチが適用できない場合は、Linuxユーザが再起動せずに非特権ユーザのネームスペースを無効にすることもできます。警告:これらのコマンドは、コンテナを実行するホストの能力に影響を与える可能性があります。Ubuntuおよびほとんどのディストリビューションでは、以下のsysctlコマンドを使用して無効にすることができます。
sysctl -w kernel.unprivileged_userns_clone = 0
Red Hat Linuxでは、user.max_user_namespacesの設定を変更することで、この欠陥を緩和することができます。
echo "user.max_user_namespaces = 0" >> /etc/sysctl.d/userns.conf sysctl -p /etc/sysctl.d/userns.conf
不明な点は、お使いのLinuxディストリビューションの推奨手順をご確認ください。
Sysdig Secureのスキャナー機能は、ホストにインストールされているカーネルの脆弱なバージョンを検出し、その結果、カーネルを共有している実行中のコンテナを検出します。これにより、管理者はアップデートが必要なパッチが適用されていないシステムを検出することができます。
下記のように、各ホストの脆弱性が監視され、修正プログラムが利用可能かどうかが表示されます。
まとめ
幸運なことに、この脆弱性 CVE-2022-0175は、悪意のある攻撃者が悪用法を公開する前に発見され、パッチが適用されました。
管理者とユーザは、システムに最新のセキュリティパッチを適用するよう注意を払う必要があります。環境によっては、パッチの適用は時間のかかる作業になります。幸いなことにSysdig Secure は、攻撃者が攻撃する前に、パッチを当てていないシステムを追跡することができます。
Sysdig Secureでは、他のオープンソース・プロジェクトとともに、アウトオブボックスのルールでFalcoを拡張しており、Kubernetesのセキュリティとの連携や管理をさらに容易にしています。30日間の無料トライアルに登録して、ご自身の目で確かめてください!