CVE-2026-42885Audiobookshelf 是一个自托管的有声书和播客服务器。在版本 2.32.2 之前,其 POST /api/filesystem/pathexists 接口存在安全漏洞。该接口使用 String.startsWith() 方法来验证解析后的文件路径是否位于库文件夹内。然而,这种验证机制存在缺陷,对于共享相同前缀的兄弟目录(例如 /audiobooks 和 /audiobooks-private)无法正确区分。这导致拥有上传权限的经过身份验证的用户能够探测其授权库文件夹边界之外的文件是否存在。该漏洞已在版本 2.32.2 中修复。
该漏洞的核心在于文件路径验证逻辑的不严谨。Audiobookshelf 在处理 /api/filesystem/pathexists 请求时,旨在防止目录遍历攻击,确保请求的路径位于特定的库目录下。开发人员采用了 String.startsWith() 函数进行检查,例如判断路径是否以 /audiobooks 开头。这种检查方式存在逻辑漏洞。如果服务器上有两个目录,一个是合法的 /audiobooks,另一个是受限的 /audiobooks-private,由于 /audiobooks-private 同样以 /audiobooks 开头,验证函数会错误地认为该路径是合法的。攻击者利用这一点,通过构造特定的路径请求,可以绕过边界检查。由于需要认证且有上传权限,攻击者可以发送 POST 请求探测受限目录下的文件是否存在。虽然这不能直接读取文件内容,但可以泄露敏感文件的存在性,为进一步的攻击提供情报。