← Back to CVE Explorer

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.

Severity
HIGH
CVSS score
7.7 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-08-19 21:16:57.743000
Last modified
2026-10-26 10:10:00.140000
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"
    }
  ]
}