CVE-2026-54493
Full vulnerability record from the local CVENow database.
Description
Koel is a free, open-source music streaming solution. Prior to 9.7.0, the Subsonic-compatible createInternetRadioStation.view and updateInternetRadioStation.view routes accept an authenticated user's streamUrl without the SafeUrl and HasAudioContentType checks used by the regular radio API. app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php and app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php pass the stored URL through app/Services/RadioService.php to app/Services/Radio/RadioStreamProxy.php, where RadioStreamProxy::openStream() calls fopen($url, 'r', false, $context). Streaming /radio/stream/{id} returns the upstream response body, allowing access to loopback, RFC1918, Docker bridge, metadata, or other internal HTTP services reachable from the Koel server. This issue is fixed in version 9.7.0.
View original CVE JSON
{
"id": "CVE-2026-54493",
"sourceIdentifier": "[email protected]",
"published": "2026-08-19T21:16:57.743",
"lastModified": "2026-10-26T10:10:00.140",
"vulnStatus": "Deferred",
"cveTags": [],
"descriptions": [
{
"lang": "en",
"value": "Koel is a free, open-source music streaming solution. Prior to 9.7.0, the Subsonic-compatible createInternetRadioStation.view and updateInternetRadioStation.view routes accept an authenticated user's streamUrl without the SafeUrl and HasAudioContentType checks used by the regular radio API. app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php and app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php pass the stored URL through app/Services/RadioService.php to app/Services/Radio/RadioStreamProxy.php, where RadioStreamProxy::openStream() calls fopen($url, 'r', false, $context). Streaming /radio/stream/{id} returns the upstream response body, allowing access to loopback, RFC1918, Docker bridge, metadata, or other internal HTTP services reachable from the Koel server. This issue is fixed in version 9.7.0."
},
{
"lang": "es",
"value": "Koel es una solución de transmisión de música gratuita y de código abierto. Antes de la versión 9.7.0, las rutas compatibles con Subsonic createInternetRadioStation.view y updateInternetRadioStation.view aceptan la streamUrl de un usuario autenticado sin las comprobaciones de SafeUrl y HasAudioContentType utilizadas por la API de radio regular. app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php y app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php pasan la URL almacenada a través de app/Services/RadioService.php a app/Services/Radio/RadioStreamProxy.php, donde RadioStreamProxy::openStream() llama a fopen($url, ’r’, false, $context). La transmisión de /radio/stream/{id} devuelve el cuerpo de la respuesta ascendente, permitiendo el acceso a loopback, RFC1918, puente Docker, metadatos u otros servicios HTTP internos accesibles desde el servidor Koel. Este problema está solucionado en la versión 9.7.0."
}
],
"affected": [
{
"source": "[email protected]",
"affectedData": [
{
"vendor": "koel",
"product": "koel",
"versions": [
{
"version": "< 9.7.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:C/C:H/I:N/A:N",
"baseScore": 7.7,
"baseSeverity": "HIGH",
"attackVector": "NETWORK",
"attackComplexity": "LOW",
"privilegesRequired": "LOW",
"userInteraction": "NONE",
"scope": "CHANGED",
"confidentialityImpact": "HIGH",
"integrityImpact": "NONE",
"availabilityImpact": "NONE"
},
"exploitabilityScore": 3.1,
"impactScore": 4.0
}
],
"ssvcV203": [
{
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
"ssvcData": {
"timestamp": "2026-08-21T18:12:37.527734Z",
"id": "CVE-2026-54493",
"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-918"
}
]
}
],
"references": [
{
"url": "https://github.com/koel/koel/commit/1331f335342b405e60ffabdd60f1f398508f996f",
"source": "[email protected]"
},
{
"url": "https://github.com/koel/koel/pull/2545",
"source": "[email protected]"
},
{
"url": "https://github.com/koel/koel/releases/tag/v9.7.0",
"source": "[email protected]"
},
{
"url": "https://github.com/koel/koel/security/advisories/GHSA-6p96-cfg5-4vhp",
"source": "[email protected]"
},
{
"url": "https://github.com/koel/koel/security/advisories/GHSA-6p96-cfg5-4vhp",
"source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
}
]
}