Проверка исключения аутентификации audiobookshelf (server/routers/Auth.js) сопоставляет маршруты GET, не прошедшие проверку подлинности, с req.path через регулярное выражение, требующее литеральной формы /items/:id/cover или /authors/:id/image, где req.path сохраняет последовательности %2F, закодированные в URL. Маршрутизатор Express декодирует параметр маршрута :id перед запуском кода обработчика, поэтому последовательность '../' в кодировке %2F в :id (например, ..%2f..%2f..%2ftmp%2fpwned) проходит проверку исключения из аутентификации буквального пути, при этом разрешаясь в реальную полезную нагрузку обхода пути после декодирования. Затем CacheManager.handleCoverCache объединяет это декодированное значение в путь к файлу кэша и передает результат перед любой проверкой владения на базе базы данных.
Это обходит исправление, примененное для CVE-2025-25205 (которое привязывало регулярное выражение исключения и переключало его на req.path) и приводило к неаутентифицированному произвольному чтению любого файла, соответствующего шаблону *_<width>[x<height>].<ext>, который может читать учетная запись службы.
Показать оригинальное описание (EN)
audiobookshelf's authentication-exemption check (server/routers/Auth.js) matches unauthenticated-allowed GET routes against req.path via a regex requiring a literal /items/:id/cover or /authors/:id/image shape, where req.path retains %2F sequences URL-encoded. CacheManager.handleCoverCache then joins this decoded value into a cache file path and streams the result before any database-backed ownership check.
Характеристики атаки
Последствия
Строка CVSS v3.1