CVE-2026-54491: Koel: Incomplete fix for CVE-2026-47260 — systemic SSRF in podcast & radio fetch paths
The fix for CVE-2026-47260 (v9.3.5) added an initial isSafeUrl() check to several fetchers (synchronizeEpisodes, getStreamableUrl, AddRadioStation, EpisodePlayable), but the redirect-target validation — the per-hop Guzzle on_redirect callback added in follow-up commit be1e867 — was applied to only one path, EpisodePlayable. Every other server-side fetcher therefore has only the initial check, which an HTTP 302 redirect to an internal address bypasses, or no check at all. DNS rebinding (validation and connection resolve DNS separately, with no IP pinning) bypasses the initial check on every path.
An authenticated, non-admin user can thus cause the Koel server to issue requests to arbitrary internal / cloud-metadata endpoints (SSRF) by supplying a URL on an attacker-controlled host that 302-redirects to an internal address.
Note: commit
be1e867shows the redirect-based SSRF vector was recognised, but the redirect defense was applied to a single call site rather than generalised — so the class survives in the sibling paths below.
References
- github.com/advisories/GHSA-6qvr-wjmv-v8mm
- github.com/koel/koel/commit/5f6ce2cefd08f437a269236b677ad971517ccbb6
- github.com/koel/koel/commit/c264a3d52513a83b21e1cc3a20e895caea97fc4a
- github.com/koel/koel/pull/2546
- github.com/koel/koel/pull/2549
- github.com/koel/koel/releases/tag/v9.7.1
- github.com/koel/koel/security/advisories/GHSA-6qvr-wjmv-v8mm
- nvd.nist.gov/vuln/detail/CVE-2026-54491
Code Behaviors & Features
Detect and mitigate CVE-2026-54491 with GitLab Dependency Scanning
Secure your software supply chain by verifying that all open source dependencies used in your projects contain no disclosed vulnerabilities. Learn more about Dependency Scanning →