CVE-2026-49338
Full vulnerability record from the local CVENow database.
Description
gonic is a music streaming server / free-software subsonic server API implementation. Prior to version 0.21.0, the Subsonic API endpoints `/rest/deletePlaylist.view` and `/rest/getPlaylist.view` perform no per-resource authorization. Once authenticated as any user (admin or not), an attacker can delete any playlist owned by any other user (including admin) by passing its `id` and read the full contents (name, comment, song list) of any other user's **private** (non-public) playlist by passing its `id`. The Subsonic playlist `id` is `base64url("<userID>/<filename>.m3u")`. Because filenames are user-supplied or time-derived and the `userID` is a small integer, IDs are guessable and frequently exposed (e.g. a previously-public playlist that was later made private still has the same ID). This breaks the multi-user trust boundary of gonic: a low-privileged user can wipe an administrator's curated playlists, and a user can exfiltrate any private playlist they obtain an ID for. The issue was fixed in commit `6dd71e6a3c966867ef8c900d359a7df75789f410`, which is part of version 0.21.0.
View original CVE JSON
{
"id": "CVE-2026-49338",
"sourceIdentifier": "[email protected]",
"published": "2026-06-19T19:16:36.557",
"lastModified": "2026-10-25T23:10:00.167",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "gonic is a music streaming server / free-software subsonic server API implementation. Prior to version 0.21.0, the Subsonic API endpoints `/rest/deletePlaylist.view` and `/rest/getPlaylist.view` perform no per-resource authorization. Once authenticated as any user (admin or not), an attacker can delete any playlist owned by any other user (including admin) by passing its `id` and read the full contents (name, comment, song list) of any other user's **private** (non-public) playlist by passing its `id`. The Subsonic playlist `id` is `base64url(\"<userID>/<filename>.m3u\")`. Because filenames are user-supplied or time-derived and the `userID` is a small integer, IDs are guessable and frequently exposed (e.g. a previously-public playlist that was later made private still has the same ID). This breaks the multi-user trust boundary of gonic: a low-privileged user can wipe an administrator's curated playlists, and a user can exfiltrate any private playlist they obtain an ID for. The issue was fixed in commit `6dd71e6a3c966867ef8c900d359a7df75789f410`, which is part of version 0.21.0."
},
{
"lang": "es",
"value": "gonic es un servidor de transmisión de música / implementación de API de servidor subsonic de software libre. Antes de la versión 0.21.0, los endpoints de la API de Subsonic “/rest/deletePlaylist.view” y “/rest/getPlaylist.view” no realizan autorización por recurso. Una vez autenticado como cualquier usuario (administrador o no), un atacante puede eliminar cualquier lista de reproducción propiedad de cualquier otro usuario (incluido el administrador) pasando su ’id’ y leer el contenido completo (nombre, comentario, lista de canciones) de la lista de reproducción privada (no pública) de cualquier otro usuario pasando su ’id’. El ’id’ de la lista de reproducción de Subsonic es ’base64url(“[userID]/[filename].m3u”)’. Debido a que los nombres de archivo son proporcionados por el usuario o derivados del tiempo y el ’userID’ es un entero pequeño, los ’ID’ son adivinables y frecuentemente expuestos (por ejemplo, una lista de reproducción previamente pública que luego se hizo privada todavía tiene el mismo ’ID’). Esto rompe el límite de confianza multiusuario de gonic: un usuario con pocos privilegios puede borrar las listas de reproducción curadas de un administrador, y un usuario puede exfiltrar cualquier lista de reproducción privada para la que obtenga un ’ID’. El problema se solucionó en el commit ’6dd71e6a3c966867ef8c900d359a7df75789f410’, que forma parte de la versión 0.21.0."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "sentriz",
"product": "gonic",
"versions": [
{
"version": "< 0.21.0",
"status": "affected"
}
]
}
]
}
],
"metrics": {
"cvssMetricV31": [
{
"source": "[email protected]",
"type": "Secondary",
"cvssData": {
"version": "3.1",
"vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:L/I:H/A:N",
"baseScore": 7.1,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "UNCHANGED",
"confidentialityImpact": "LOW",
"integrityImpact": "HIGH",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 2.8,
"impactScore": 4.2
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-06-23T02:20:58.415088Z",
"id": "CVE-2026-49338",
"options": [
{
"exploitation": "poc"
},
{
"automatable": "no"
},
{
"technicalImpact": "partial"
}
],
"role": "CISA Coordinator",
"version": "2.0.3"
}
}
]
},
"weaknesses": [
{
"source": "[email protected]",
"type": "Secondary",
"description": [
{
"lang": "en",
"value": "CWE-285"
},
{
"lang": "en",
"value": "CWE-639"
}
]
}
],
"references": [
{
"url": "https://github.com/sentriz/gonic/commit/6dd71e6",
"source": "[email protected]"
},
{
"url": "https://github.com/sentriz/gonic/security/advisories/GHSA-hmgp-w9jm-vp95",
"source": "[email protected]"
}
]
}