← Back to CVE Explorer

CVE-2026-54491

Full vulnerability record from the local CVENow database.

Description

Koel is a free, open-source music streaming solution. Prior to 9.7.1, outbound podcast and radio fetch paths perform a point-in-time App\Helpers\Network::isPublicHost() or isSafeUrl() check without pinning the validated address, and most paths lack redirect-hop validation and do not revalidate every redirect target. PhanAn\Poddle\Poddle::fromUrl(), PodcastService::getStreamableUrl(), PodcastService::isPodcastObsolete(), App\Rules\HasAudioContentType, and App\Rules\SafeUrl can therefore follow an attacker-controlled redirect to an internal address or connect after DNS rebinding changes a public resolution to a private one. These paths are reachable through podcast and radio APIs, including createPodcastChannel, createInternetRadioStation, refreshPodcasts, apiResource podcasts, and radio/stations, allowing an authenticated user to request internal services or cloud metadata and potentially receive parsed or streamed response content. This issue is fixed in version 9.7.1.

Severity
HIGH
CVSS score
7.1 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-08-19 21:16:57.453000
Last modified
2026-10-26 10:10:00.140000
View original CVE JSON
{
  "id": "CVE-2026-54491",
  "sourceIdentifier": "[email protected]",
  "published": "2026-08-19T21:16:57.453",
  "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.1, outbound podcast and radio fetch paths perform a point-in-time App\\Helpers\\Network::isPublicHost() or isSafeUrl() check without pinning the validated address, and most paths lack redirect-hop validation and do not revalidate every redirect target. PhanAn\\Poddle\\Poddle::fromUrl(), PodcastService::getStreamableUrl(), PodcastService::isPodcastObsolete(), App\\Rules\\HasAudioContentType, and App\\Rules\\SafeUrl can therefore follow an attacker-controlled redirect to an internal address or connect after DNS rebinding changes a public resolution to a private one. These paths are reachable through podcast and radio APIs, including createPodcastChannel, createInternetRadioStation, refreshPodcasts, apiResource podcasts, and radio/stations, allowing an authenticated user to request internal services or cloud metadata and potentially receive parsed or streamed response content. This issue is fixed in version 9.7.1."
    },
    {
      "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.1, las rutas de recuperación de podcasts y radio salientes realizan una verificación puntual de App\\Helpers\\Network::isPublicHost() o isSafeUrl() sin fijar la dirección validada, y la mayoría de las rutas carecen de validación de salto de redirección y no revalidan cada objetivo de redirección. PhanAn\\Poddle\\Poddle::fromUrl(), PodcastService::getStreamableUrl(), PodcastService::isPodcastObsolete(), App\\Rules\\HasAudioContentType y App\\Rules\\SafeUrl pueden, por lo tanto, seguir una redirección controlada por el atacante a una dirección interna o conectarse después de que el DNS rebinding cambie una resolución pública a una privada. Estas rutas son accesibles a través de las API de podcasts y radio, incluyendo createPodcastChannel, createInternetRadioStation, refreshPodcasts, apiResource podcasts y radio/stations, lo que permite a un usuario autenticado solicitar servicios internos o metadatos de la nube y potencialmente recibir contenido de respuesta analizado o transmitido. Este problema se ha solucionado en la versión 9.7.1."
    }
  ],
  "affected": [
    {
      "source": "[email protected]",
      "affectedData": [
        {
          "vendor": "koel",
          "product": "koel",
          "versions": [
            {
              "version": "< 9.7.1",
              "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:H/I:L/A:N",
          "baseScore": 7.1,
          "baseSeverity": "HIGH",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "LOW",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "HIGH",
          "integrityImpact": "LOW",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 4.2
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-20T19:47:20.594827Z",
          "id": "CVE-2026-54491",
          "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/5f6ce2cefd08f437a269236b677ad971517ccbb6",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/commit/c264a3d52513a83b21e1cc3a20e895caea97fc4a",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/pull/2546",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/pull/2549",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/releases/tag/v9.7.1",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/security/advisories/GHSA-6qvr-wjmv-v8mm",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/security/advisories/GHSA-6qvr-wjmv-v8mm",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}