← Back to CVE Explorer

CVE-2026-54492

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 createPodcastChannel.view route accepts an authenticated user's private URL because app/Http/Requests/Subsonic/CreatePodcastChannelRequest.php does not apply the SafeUrl validation used by the regular podcast API. app/Http/Controllers/Subsonic/CreatePodcastChannelController.php passes the URL to app/Services/Podcast/PodcastService.php, where PodcastService::addPodcast() and createParser() invoke Poddle::fromUrl() during channel creation, causing immediate server-side requests to loopback, Docker bridge, or RFC1918 HTTP destinations. The confirmed impact is blind internal request execution because generic response-body exfiltration was not demonstrated through this route. This issue is fixed in version 9.7.0.

Severity
MEDIUM
CVSS score
4.3 (v3.1)
Vulnerability status
Deferred
Source identifier
Published
2026-08-19 21:16:57.600000
Last modified
2026-10-26 10:10:00.140000
View original CVE JSON
{
  "id": "CVE-2026-54492",
  "sourceIdentifier": "[email protected]",
  "published": "2026-08-19T21:16:57.600",
  "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 createPodcastChannel.view route accepts an authenticated user's private URL because app/Http/Requests/Subsonic/CreatePodcastChannelRequest.php does not apply the SafeUrl validation used by the regular podcast API. app/Http/Controllers/Subsonic/CreatePodcastChannelController.php passes the URL to app/Services/Podcast/PodcastService.php, where PodcastService::addPodcast() and createParser() invoke Poddle::fromUrl() during channel creation, causing immediate server-side requests to loopback, Docker bridge, or RFC1918 HTTP destinations. The confirmed impact is blind internal request execution because generic response-body exfiltration was not demonstrated through this route. 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 9.7.0, la ruta createPodcastChannel.view compatible con Subsonic acepta una URL privada de un usuario autenticado porque app/Http/Requests/Subsonic/CreatePodcastChannelRequest.php no aplica la validación SafeUrl utilizada por la API de podcast regular. app/Http/Controllers/Subsonic/CreatePodcastChannelController.php pasa la URL a app/Services/Podcast/PodcastService.php, donde PodcastService::addPodcast() y createParser() invocan Poddle::fromUrl() durante la creación del canal, causando solicitudes inmediatas del lado del servidor a destinos HTTP de loopback, puente Docker o RFC1918. El impacto confirmado es la ejecución ciega de solicitudes internas porque la exfiltración genérica del cuerpo de la respuesta no fue demostrada a través de esta ruta. 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:U/C:L/I:N/A:N",
          "baseScore": 4.3,
          "baseSeverity": "MEDIUM",
          "attackVector": "NETWORK",
          "attackComplexity": "LOW",
          "privilegesRequired": "LOW",
          "userInteraction": "NONE",
          "scope": "UNCHANGED",
          "confidentialityImpact": "LOW",
          "integrityImpact": "NONE",
          "availabilityImpact": "NONE"
        },
        "exploitabilityScore": 2.8,
        "impactScore": 1.4
      }
    ],
    "ssvcV203": [
      {
        "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0",
        "ssvcData": {
          "timestamp": "2026-08-20T13:41:13.920879Z",
          "id": "CVE-2026-54492",
          "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-w79m-f3jx-779v",
      "source": "[email protected]"
    },
    {
      "url": "https://github.com/koel/koel/security/advisories/GHSA-w79m-f3jx-779v",
      "source": "134c704f-9b21-4f2e-91b3-4a467353bcc0"
    }
  ]
}