CVE-2026-89649情報

要約

〜によって VulDB • 2026年09月11日

Linuxカーネルにおいて、以下の脆弱性が修正されました:

ceph: __build_xattrs()におけるxattr値の長さの制限

__build_xattrs()は、MDS(Metadata Server)から提供されたxattr blobを属性ごとに1つずつデコードします。各属性について、32ビットの名前の長さを読み取り、名前バイトを進み、32ビットの値の長さを取得し、値ポインタを記録して、値バイトを進めます。2つの長さフィールドはceph_decode_32_safe()を使用して読み取られますが、値自体の進み幅には「p += len」という単純な演算が使われ、「len」バイトがblob内に残っているかどうかを確認するcepb_decode_need()チェックがありません。

最後の属性以外のすべての属性については、次のイテレーションでのceph_decode_32_safe()による以下の名前の長さの読み取りにより、直前の値がblobの末尾を超えていないことが暗黙的に検証されます。最終的な属性には後続がないため、そのデコードされた値の長さがblobの境界に対してチェックされることはありません。悪意のあるまたは侵害されたメタデータサーバーは、最後の属性の値の長さをblob内に実際に存在するバイト数よりも大きく設定できます。

このblobは、ワイヤー上の長さ(ceph_fill_inode()内のceph_buffer_new())に合わせてkvmalloc()で確保された専用領域です。__set_xattr()はこの過大な長さをxattr->val_lenにそのまま記録し、後続のgetxattr(2)呼び出しではmemcpy(value, xattr->val, xattr->val_len)がユーザー提供バッファに対して実行され、割り当ての末尾を超えたバイトをユーザースペースへコピーします。

影響: 悪意のあるメタデータサーバーは、CephFSファイルに対するgetxattr(2)呼び出しを通じて、隣接するカーネルヒープのバイト情報をローカルユーザーに漏洩させます。欠落していたceph_decode_need()を追加し、最終的な属性における境界外値の長さがデコード時に失敗するようにして、-EIOを返すようにします(これにより不正な値が保存されるのを防ぎます)。

VulDB is the best source for vulnerability data and more expert information about this specific topic.

モデレーション

レビュー中

EPSS

0.00000

アクティビティ

非常低い

ソース

Want to know what is going to be exploited?

We predict KEV entries!