| タイトル | LinuxのLinux Kernelにおける境界外書き込みに関する脆弱性 |
|---|---|
| 概要 | Linuxカーネルにおいて、以下の脆弱性が修正されました。ksmbdのsmb_check_perm_dacl()関数でACEの最小サイズを適切に要求するように改善されました。smb_check_perm_dacl()内の両方のACEウォークループは、残りのバッファが小さすぎる場合のみ防御しており、構造体より小さいと宣言されたace-sizeに対しては防御していませんでした。最初のチェックは4バイトのACEヘッダーが範囲内であることのみを要求しており、offset 4のaccess_req(4バイト)が読み取り可能であることは要求していませんでした。攻撃者が所有するファイルに細工されたDACLを設定すると、ace-sizeが4かつaces_sizeが4と宣言し、両方のチェックを通過した後、上位ループでgranted |= le32_to_cpu(ace-access_req);を、下位ループでcompare_sids(&sid, &ace-sid);を呼び出しますが、これはoffset 4のaccess_req(最大4バイトのOOB)およびoffset 8のace-sid(最大CIFS_SID_BASE_SIZE + SID_MAX_SUB_AUTHORITIES * 4バイトのOOB)を読み取る結果となります。これらの両ループを厳密化し、ace_sizeがoffsetof(struct smb_ace, sid) + CIFS_SID_BASE_SIZE以上であることを要求するようにしました。これは最小の有効なオンワイヤACEレイアウト(4バイトヘッダー+4バイトaccess_req+8バイトのsidベースでサブ認証なし)です。また、compare_sids()はsub_auth[]エントリを参照する前にsid.num_subauthがSID_MAX_SUB_AUTHORITIESを超えるACEを却下するようにしました。parse_sec_desc()は既に同等のチェックを実施していました(行441から448)が、smb_check_perm_dacl()は時間経過とともに検証が弱くなっていました。到達条件はファイルのACL設定権限を持つ認証済みSMBクライアントです。そのファイルに対するCREATE操作時にカーネルが保存されたDACLをsmb_check_perm_dacl()経由で走査し、OOB読み取りを引き起こします。これは事前認証ではなく、OOB読み取りの影響は攻撃者に反映されませんが、KASANレポートやカーネル状態の破損が発生する可能性があります。 |
| 想定される影響 | 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報の一部が書き換えられる可能性があります。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 |
| 対策 | リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。 |
| 公表日 | 2026年5月1日0:00 |
| 登録日 | 2026年5月8日12:05 |
| 最終更新日 | 2026年5月8日12:05 |
| CVSS3.0 : 重要 | |
| スコア | 8.3 |
|---|---|
| ベクター | CVSS:3.0/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:H |
| Linux |
| Linux Kernel 5.15 以上 6.12.84 未満 |
| Linux Kernel 6.13 以上 6.18.25 未満 |
| Linux Kernel 6.19 以上 7.0.2 未満 |
| No | 変更内容 | 変更日 |
|---|---|---|
| 1 | [2026年05月08日] 掲載 |
2026年5月8日12:05 |
| 概要 | In the Linux kernel, the following vulnerability has been resolved: ksmbd: require minimum ACE size in smb_check_perm_dacl() Both ACE-walk loops in smb_check_perm_dacl() only guard against an if (offsetof(struct smb_ace, access_req) > aces_size) The first check only requires the 4-byte ACE header to be in bounds; granted |= le32_to_cpu(ace->access_req); /* upper loop */ reads access_req at offset 4 (OOB by up to 4 bytes) and ace->sid at Tighten both loops to require ace_size >= offsetof(struct smb_ace, sid) + CIFS_SID_BASE_SIZE which is the smallest valid on-wire ACE layout (4-byte header + parse_sec_desc() already enforces an equivalent check (lines 441-448); Reachability: authenticated SMB client with permission to set an ACL |
|---|---|
| 公表日 | 2026年5月1日23:16 |
| 登録日 | 2026年5月2日4:06 |
| 最終更新日 | 2026年5月7日5:16 |
| 構成1 | 以上 | 以下 | より上 | 未満 | |
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 5.15 | 6.12.84 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.13 | 6.18.25 | |||
| cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* | 6.19 | 7.0.2 | |||