Description
In the Linux kernel, the following vulnerability has been resolved: ksmbd: prevent path traversal bypass by restricting caseless retry ksmbd_vfs_path_lookup() enforces LOOKUP_BENEATH to restrict path resolution within the share root. When a crafted path attempts to escape the share boundary using parent-directory components ('..'), vfs_path_parent_lookup() detects this and immediately fails, returning -EXDEV. However, a bug exists in __ksmbd_vfs_kern_path() under caseless mode. The function fails to intercept the -EXDEV error and erroneously falls through to the caseless retry logic, which is intended only for genuinely missing files. During this retry process, the path is reconstructed, leading to an unintended LOOKUP_BENEATH bypass that allows write-capable users to create zero-length files or directories outside the exported share. Fix this by ensuring that the execution only proceeds to the caseless lookup retry when the error is specifically -ENOENT. Any other errors, such as -EXDEV from a path traversal attempt, must be returned immediately.
Affected products
Version statuses are supplied by the assigning organization. Consult the original record for detailed ranges and platform conditions.
Linux Linux
Default version status: unaffected
6927ffe7479c72e7ebf885507227266a75f7c97d to < 21f050439db157f2afcc19885dec14549ca6ffc0affected74d7970febf7e9005375aeda0df821d2edffc9f7 to < eec1dd2586c4016b7555a5d047db2b3756459fb2affected74d7970febf7e9005375aeda0df821d2edffc9f7 to < a1c331d98313380c38f616c8b28b890ec8ef9c28affected74d7970febf7e9005375aeda0df821d2edffc9f7 to < cfb5a56c218888f9d74165dff0c282cd0be97983affected74d7970febf7e9005375aeda0df821d2edffc9f7 to < 8c9a4f1327eb71efbf14842e7b8a6d965077eb67affected74d7970febf7e9005375aeda0df821d2edffc9f7 to < 54bab9ba5a9f156ffa9324fcbe5a356fd0242f95affected019aae488dbc67c97a33db03652e20e2c9e3afa7affectedef6cc1c465786b3e4e735d1ab8b616b3e94402dfaffected6.1.71 to < 6.1.191affected5.15.145 to < 5.16affected6.3.10 to < 6.4affected
Linux Linux
Default version status: affected
6.4affected0 to < 6.4unaffected6.1.191 to ≤ 6.1.*unaffected6.6.160 to ≤ 6.6.*unaffected6.12.114 to ≤ 6.12.*unaffected6.18.57 to ≤ 6.18.*unaffected7.1.4 to ≤ 7.1.*unaffected7.2 to ≤ *unaffected
References
- https://git.kernel.org/stable/c/21f050439db157f2afcc19885dec14549ca6ffc0 ↗
- https://git.kernel.org/stable/c/eec1dd2586c4016b7555a5d047db2b3756459fb2 ↗
- https://git.kernel.org/stable/c/a1c331d98313380c38f616c8b28b890ec8ef9c28 ↗
- https://git.kernel.org/stable/c/cfb5a56c218888f9d74165dff0c282cd0be97983 ↗
- https://git.kernel.org/stable/c/8c9a4f1327eb71efbf14842e7b8a6d965077eb67 ↗
- https://git.kernel.org/stable/c/54bab9ba5a9f156ffa9324fcbe5a356fd0242f95 ↗