RHSB-2021-006 カーネルおよび systemd でのマウントポイントの長いパス名による不具合 (CVE-2021-33909、CVE-2021-33910)
この情報は役に立ちましたか?
エグゼクティブサマリー
Red Hat は、長いパス名の不適切な処理による 2 つの不具合を認識しています。その 1 つは、Linux カーネル内に存在する脆弱性で、ローカルの攻撃者は権限を昇格することができます。これには CVE-2021-33909 が割り当てられました。もう 1 つの脆弱性は systemd に存在し、ローカルの攻撃者は systemd とシステム全体をクラッシュすることができます。これには CVE-2021-33910 が割り当てられました。
どちらの不具合も影響度は「重要な影響」となっています。
CVE-2021-33909 の影響を直接受ける Red Hat 製品のバージョンは次のとおりです。
Red Hat Enterprise Linux 8
Red Hat Enterprise Linux 7
Red Hat Enterprise Linux 6
CVE-2021-33910 の影響を直接受ける Red Hat 製品のバージョンは次のとおりです。
Red Hat Enterprise Linux 8
さらに、Red Hat Enterprise Linux (RHEL CoreOS を含む) でサポートされるすべての Red Hat 製品が影響を受ける可能性もあります。これには、以下が含まれます。
RHEL または UBI コンテナーイメージをベースとする製品コンテナー。この不具合の修正を追加するために、ベースイメージが更新されます。コンテナーが最新の状態であるようにしてください。Red Hat Container Catalog の一部である Container Health Index を使用すると、Red Hat コンテナーのセキュリティー状態を確認できます。
RHEL チャンネルからパッケージを取得する製品 (これには、OpenShift Container Platform、OpenStack、Red Hat Virtualization などのレイヤード製品が含まれます)。これらの製品環境で、基礎となる RHEL カーネルと systemd パッケージが最新の状態であるようにしてください。
現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断するには、以下の「診断」セクションを参照してください。
テクニカルサマリー
これらの 2 つの脆弱性は、長いパスを持つファイルが適切に処理されない場合に悪用が可能になります。
1 つ目の脆弱性 (CVE-2021-33909) は、Linux カーネルに対する攻撃です。権限のないローカル攻撃者は、パスの長さの合計が 1 GB を超えるような深いディレクトリー構造を作成、マウント、および削除することで、この脆弱性を悪用することができます。攻撃に成功すると、権限を昇格することができます。
2 つ目の脆弱性 (CVE-2021-33910) は、systemd (システムおよびサービスマネージャー) に対する攻撃で、ローカル攻撃者は長いパスを持つファイルシステムをマウントできる必要があります。この攻撃により、systemd、systemd によって管理されるサービス、およびシステム全体がクラッシュし、応答しなくなります。
軽減策
Red Hat はこの問題を軽減策を調査しましたが、実用的な例は特定できていません。影響を受けるパッケージを早急に更新してください。
技術情報
以下の 2 つの脆弱性が報告されました。それぞれの簡単な説明とその影響は次のとおりです。
CVE-2021-33909
ファイルシステムレイヤーの Linux カーネルの seq_file で境界外書き込みの不具合が見つかりました。この不具合により、ユーザー権限のあるローカル攻撃者が境界外のメモリーにアクセスできるようになるため、システムのクラッシュや内部カーネル情報の漏えいが可能になります。この問題は、操作の実行前に size_t から int への変換を検証しないことが原因です。
この脆弱性は、Linux カーネルのファイルシステムレイヤーにおける型変換の脆弱性です。型変換の脆弱性は、2 つの型の間で変換を行う場合の脆弱性です。これにより、オーバーフローが引き起こされ、大きな負の値が生成される可能性があります。
攻撃者は以下を実行できる必要があります。
長いパスの作成
ファイルシステムの特定場所へのマウント
マウントポイントの削除
/proc/<pid>/mountinfo ファイルの読み取り
この問題が発生すると、制御可能なオフセットでカーネルメモリーが上書きされます。
mountinfo ファイルは seq_file のー例です。これは、カーネルによって一連のレコードが提供される仮想ファイルです。各レコードは、サイズが size_t (64 ビットの符号なし値) として追跡される seq_file バッファーに収まる必要があります。この問題は、show_mountinfo 関数で非常に長いマウントポイントパスが使用される場合に発生します。
以下のように、このプロセスでは int はバッファーの長さ (32 ビットの符号付き値) として想定されます。
show_mountinfo() -> seq_dentry() -> dentry_path((.. , .. , int buflen)
「buflen」は size_t から int への変換で問題を引き起こす可能性があり、数字を負の値に変換し、後に境界外アクセスの脆弱性の原因となることに注意してください。
マウントポイントが使用中であるにも関わらずパスが削除されると、誤って計算された値がオフセットとして使用され、割り当てられたバッファーの外部に「//deleted」という文字列が書き込まれます。この値が負の値であるため、目的のバッファーの場所よりも 2GB から 10 バイト手前の場所に書き込まれます。
このオフセットの書き込みにより、サービス拒否 (DoS) が発生してシステムがクラッシュし、特定のメモリーの場所を標的とするメモリーの破損や権限の昇格が発生する原因となります。
CVE-2021-33910
systemd で不具合が発見されました。関数 unit_name_path_escape でサイズが制御されていない alloca 関数を使用し、ローカルの攻撃者が非常長いパスでファイルシステムをマウントできる場合、ローカルの攻撃者はスタックに非常に大きな領域を割り当てることで、systemd とシステム全体をクラッシュすることが可能になります。
これは、systemd で攻撃者が制御する alloca() で、ローカルの攻撃者は systemd サービス (PID 1) とシステム全体をクラッシュできるようになります。Alloca() は、スタックでプログラムが必要とする領域を割り当てるために使用されます。Alloca() は、要求されたサイズがユーザーによって制御される場合や、サイズが大きすぎる場合は使用してはなりません。プログラムによって、割り当てられたスタック領域外部に書き込みが行われ、クラッシュする可能性があるからです。
systemd は、/proc/self/mountinfo ファイルを継続的に監視して、マウントされたファイルシステムの詳細を取得し、alloca() を使用してマウントポイントの文字列を内部で複製します。攻撃者が非常に長いパスでファイルシステムをマウントできる場合 (FUSE を使用する場合など)、この問題が発生し、システムがクラッシュする可能性があります。
この問題は、Red Hat Enterprise Linux 7 に同梱されているバージョンの systemd には影響しませんでした。このバージョンは、alloca() を使用する strdupa() を使用せず、ヒープで領域を割り当てる strdup() を使用して unit_name_path_escape() 関数の文字列を複製するためです。
各 CVE の影響を受ける Red Hat の製品
CVE-2021-33909 (カーネル) 重要な影響 | CVE-2021-33910 (systemd) 重要な影響 | |
Red Hat Enterprise Linux 8 | 影響あり: 修正はアクティブなストリームすべてに対して提供される予定です。 | 影響あり: 修正はアクティブなストリームすべてに対して提供される予定です。 |
Red Hat Enterprise Linux 7 | 影響あり: 修正はアクティブなストリームすべてに対して提供される予定です。 | 影響なし |
Red Hat Enterprise Linux 6 | 影響あり: 修正はアクティブなストリームすべてに対して提供される予定です。 | 影響なし |
影響を受ける製品の更新
影響のあるバージョンの Red Hat 製品をご使用のお客様は、エラータが入手可能になり次第、該当製品を更新することが強く推奨されます。利用可能な更新を早急に適用し、適切であると思われる軽減策を有効にしてください。
製品 | コンポーネント | アドバイザリー/更新 [1] |
Red Hat Enterprise Linux 8 | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.2.0 Extended Update Support [2] | kernel | |
kernel-rt | ||
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 8.1.0 Extended Update Support [2] | kernel | |
kpatch | ||
systemd | ||
Red Hat Enterprise Linux 7 | kernel | |
kernel-rt | ||
kpatch | ||
Red Hat Enterprise Linux 7.7 Extended Update Support [2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.6 Extended Update Support [2] | kernel | |
kpatch | ||
Red Hat Enterprise Linux 7.4 Update Services for SAP Solutions, Advanced Update Support [3],[4] | kernel | |
Red Hat Enterprise Linux 7.3 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 7.2 Advanced Update Support [4] | kernel | |
Red Hat Enterprise Linux 6 Extended Life-cycle Support [5] | kernel | |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 8 | redhat-virtualization-host | RHSA-2021:2736 |
Red Hat Virtualization 4 for Red Hat Enterprise Linux 7 | redhat-virtualization-host |
[1] 更新の公開後にアドバイザリー/更新のリンクが追加されます。
[2] Red Hat Enterprise Linux Extended Update Support サブスクリプションとは何ですか?
[3] Advanced mission critical Update Support (AUS) とは何ですか?
[4] Red Hat Enterprise Linux for SAP Solutions サブスクリプションとは何ですか?
[5] このパッチを取得するには、有効な 延長ライフサイクルサポート (ELS) サブスクリプションが必要です。お持ちのアカウントに有効な ELS サブスクリプションがない場合は、Red Hat の営業部門または営業担当者に お問い合わせ ください。
診断
以下の脆弱性検出スクリプトを使用すると、現在ご使用のシステムにこの不具合による脆弱性が存在するかどうかを判断できます。正規のスクリプトであることを確認する場合は、GPG 分離署名 もダウンロードします。検証にGPG 署名を使用する方法 と手順は、カスタマーポータルで確認できます。
謝辞
Red Hat は、これらの脆弱性を報告していただいた Qualys Research Team に感謝いたします。
参考資料
https://access.redhat.com/security/cve/cve-2021-33909
https://access.redhat.com/security/cve/cve-2021-33910
https://www.qualys.com/2021/07/20/cve-2021-33909/sequoia-local-privilege-escalation-linux.txt
https://www.qualys.com/2021/07/20/cve-2021-33910/denial-of-service-systemd.txt
Comments