CVE-2026-71209
Full vulnerability record from the local CVENow database.
Description
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.
Severity
HIGH
CVSS score
7.5
(v3.1)
Vulnerability status
Deferred
Source identifier
309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c
Published
2026-08-05 08:16:43.110000
Last modified
2026-10-24 15:10:00.190000
View original CVE JSON
{
"id": "CVE-2026-71209",
"sourceIdentifier": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
"published": "2026-08-05T08:16:43.110",
"lastModified": "2026-10-24T15:10:00.190",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "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."
},
{
"lang": "es",
"value": "La comprobación de exención de autenticación de audiobookshelf (servidor/routers/Auth.js) compara rutas GET permitidas sin autenticación con req.path mediante una expresión regular que requiere una forma literal de /items/:id/cover o /authors/:id/image, donde req.path retiene secuencias %2F codificadas en URL. El router de Express decodifica el parámetro de ruta :id antes de que se ejecute el código del gestor, por lo que una secuencia ’.. / ’ codificada en %2F en :id (p. ej., ..%2f..%2f..%2ftmp%2fpwned) pasa la comprobación de exención de autenticación de ruta literal mientras se resuelve en una carga útil de path traversal real una vez decodificada. CacheManager.handleCoverCache luego une este valor decodificado en una ruta de archivo de caché y transmite el resultado antes de cualquier comprobación de propiedad respaldada por la base de datos. Esto elude la corrección aplicada para CVE-2025-25205 (que ancló la expresión regular de exención y la cambió a req.path) y resulta en una lectura de archivo arbitraria no autenticada de cualquier archivo que coincida con el patrón *_[width][x[height]].[ext] que la cuenta de servicio pueda leer."
}
],
"affected": [
{
"source": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
"affectedData": [
{
"vendor": "advplyr",
"product": "audiobookshelf",
"defaultStatus": "unknown",
"programFiles": [
"server/routers/Auth.js",
"server/managers/CacheManager.js"
],
"versions": [
{
"version": "2.19.1",
"lessThanOrEqual": "2.35.1",
"versionType": "custom",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:N/A:N",
"baseScore": 7.5,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "NONE",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.9,
"impactScore": 3.6
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-05T13:21:06.583401Z",
"id": "CVE-2026-71209",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "yes"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-22"
}
]
}
],
"references": [
{
"url": "https://github.com/advplyr/audiobookshelf",
"source": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c"
},
{
"url": "https://github.com/advplyr/audiobookshelf/security/advisories/GHSA-pg8v-5jcv-wrvw",
"source": "309f9ea4-e3e9-4c6c-b79d-e8eb01244f2c"
},
{
"url": "https://github.com/advplyr/audiobookshelf/security/advisories/GHSA-pg8v-5jcv-wrvw",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
}
]
}