製品・ソフトウェアに関する情報
LinuxのLinux Kernelにおける境界外読み取りに関する脆弱性
Title LinuxのLinux Kernelにおける境界外読み取りに関する脆弱性
Summary

Linuxカーネルにおいて、以下の脆弱性が修正されました。smbクライアントがシンボリックリンクのエラー応答を解析する際に範囲外読み取りの問題が発生していました。CREATEがSTATUS_STOPPED_ON_SYMLINKを返すと、smb2_check_message()は長さ検証を行わずに成功を返し、信頼できないサーバーに対して唯一の防御であるシンボリックリンクパーサーに依存する状態となっていました。symlink_data()関数はSMB 3.1.1のエラーコンテキストを走査する際、範囲外読み取りを引き起こす可能性があり、ヒープ内の未初期化データが読み取られてしまう原因となっていました。smb2_parse_symlink_response()も代替名の範囲検査に誤りがあり、代替名の読み取りがiov_lenを超えて行われる場合がありました。これらの問題は、ループの条件を厳格化し、代替名の範囲検査を正しく行うことで修正されました。その結果、範囲外読み取りが防止され、シンボリックリンクのターゲットが安全にユーザースペースに返されるようになりました。

Possible impacts 当該ソフトウェアが扱う全ての情報が外部に漏れる可能性があります。 また、当該ソフトウェアが扱う情報について、書き換えは発生しません。 さらに、当該ソフトウェアが完全に停止する可能性があります。 そして、この脆弱性を悪用した攻撃の影響は、他のソフトウェアには及びません。 
Solution

リリース情報、またはパッチ情報が公開されています。参考情報を参照して適切な対策を実施してください。

Publication Date April 24, 2026, midnight
Registration Date April 30, 2026, 11:04 a.m.
Last Update April 30, 2026, 11:04 a.m.
CVSS3.0 : 重要
Score 8.1
Vector CVSS:3.0/AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:H
Affected System
Linux
Linux Kernel 6.1 以上 6.18.24 未満
Linux Kernel 6.19 以上 6.19.14 未満
Linux Kernel 7.0 以上 7.0.1 未満
CVE (情報セキュリティ 共通脆弱性識別子)
CWE (共通脆弱性タイプ一覧)
その他
Change Log
No Changed Details Date of change
1 [2026年04月30日]
  掲載
April 30, 2026, 11:04 a.m.

NVD Vulnerability Information
CVE-2026-31613
Summary

In the Linux kernel, the following vulnerability has been resolved:

smb: client: fix OOB reads parsing symlink error response

When a CREATE returns STATUS_STOPPED_ON_SYMLINK, smb2_check_message()
returns success without any length validation, leaving the symlink
parsers as the only defense against an untrusted server.

symlink_data() walks SMB 3.1.1 error contexts with the loop test "p <
end", but reads p->ErrorId at offset 4 and p->ErrorDataLength at offset
0. When the server-controlled ErrorDataLength advances p to within 1-7
bytes of end, the next iteration will read past it. When the matching
context is found, sym->SymLinkErrorTag is read at offset 4 from
p->ErrorContextData with no check that the symlink header itself fits.

smb2_parse_symlink_response() then bounds-checks the substitute name
using SMB2_SYMLINK_STRUCT_SIZE as the offset of PathBuffer from
iov_base. That value is computed as sizeof(smb2_err_rsp) +
sizeof(smb2_symlink_err_rsp), which is correct only when
ErrorContextCount == 0.

With at least one error context the symlink data sits 8 bytes deeper,
and each skipped non-matching context shifts it further by 8 +
ALIGN(ErrorDataLength, 8). The check is too short, allowing the
substitute name read to run past iov_len. The out-of-bound heap bytes
are UTF-16-decoded into the symlink target and returned to userspace via
readlink(2).

Fix this all up by making the loops test require the full context header
to fit, rejecting sym if its header runs past end, and bound the
substitute name against the actual position of sym->PathBuffer rather
than a fixed offset.

Because sub_offs and sub_len are 16bits, the pointer math will not
overflow here with the new greater-than.

Publication Date April 25, 2026, 12:16 a.m.
Registration Date April 25, 2026, 4:07 a.m.
Last Update April 29, 2026, 12:13 a.m.
Affected software configurations
Configuration1 or higher or less more than less than
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.1 6.18.24
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 6.19 6.19.14
cpe:2.3:o:linux:linux_kernel:*:*:*:*:*:*:*:* 7.0 7.0.1
Related information, measures and tools
Common Vulnerabilities List