CVE-2026-54491 json
Koel: Incomplete fix for CVE-2026-47260 — systemic SSRF in podcast & radio fetch paths
published 2026-07-15 3 mo ago modified 2026-10-26 14 d ago also EUVD-2026-63088 , GHSA-6qvr-wjmv-v8mm
- cvss
- 7.1
- version 3.1, CNA
- cisa kev
- Not listed
- not in CISA's catalog
- epss
- 0.4%
- EPSS 0.4% chance of exploitation in 30 days, percentile 32%
- public exploits
- 0
- none known
Summary
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.
Patch / fix
- packagist phanan/koel 9.7.1
- koel koel 9.7.1
- github.com/koel/koel@5f6ce2c commit
- github.com/koel/koel@c264a3d commit
- github.com/koel/koel#2546 pull request
- github.com/koel/koel#2549 pull request
- github.com/koel/koel/releases/tag/v9.7.1 release
CISA SSVC
- Exploitation
- Proof of concept is public
- Automatable
- no
- Technical impact
- partial
- Assessed
- 2 mo ago
Exploit prediction
0.38% chance of exploitation in the next 30 days, higher than 32% of all scored CVEs (FIRST EPSS, 2026-11-08).
Exploits and checks
- github.com https://github.com/koel/koel/security/advisories/GHSA-6qvr-wjmv-v8mm referenced PoC, tagged "exploit" by a source, unverified
CVSS scores
| assigned by | version | score | vector |
|---|---|---|---|
| CNA | 3.1 | 7.1 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N |
| GitHub | 3.1 | 7.1 | CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:L/A:N |
Affected packages
| ecosystem | package | affected | fixed in |
|---|---|---|---|
| packagist | phanan/koel | <9.7.1 |
9.7.1 |
Affected products
- koel koel
Classification
- Weakness
-
- CWE-918 Server-Side Request Forgery
References
-
github.com
/koel/koel/pull/2546
web
-
github.com
/koel/koel/pull/2549
web
-
github.com
/koel/koel/commit/5f6ce2cefd08f437a269236b677ad971517ccbb6
web
-
github.com
/koel/koel/commit/c264a3d52513a83b21e1cc3a20e895caea97fc4a
web
-
github.com
/koel/koel/security/advisories/GHSA-6qvr-wjmv-v8mm
exploit, web
-
github.com
/koel/koel/releases/tag/v9.7.1
web
-
github.com
/koel/koel
package
Sources
- CVE List CVE-2026-54491
- GitHub Advisory GHSA-6qvr-wjmv-v8mm
- NVD CVE-2026-54491
Fencer Vulns keeps one entry per vulnerability: the CVE id wins, then GHSA, and records that alias each other are merged, except that two CVEs always keep separate entries. The same data is available as JSON.
CPEs and fixed versions use Anchore's correction of NVD's data: Added CPE configurations because not yet analyzed by NVD.