CVE-2026-47260: Koel Podcast SSRF Vulnerability – Unvalidated Enclosure URLs Enable Internal Data Access
Koel, a free open-source music streaming platform, contains a Server-Side Request Forgery (SSRF) vulnerability in its podcast feature. While the application correctly validates podcast feed URLs to prevent abuse, it fails to validate the individual audio file URLs embedded within those feeds. An authenticated attacker can craft a malicious podcast feed containing URLs pointing to internal services, and when users play episodes from that feed, the Koel server will fetch and stream the content from those internal URLs, effectively bypassing network segmentation. This allows an attacker to read sensitive data from services that should only be accessible internally.
Source data · NVD / CISA · public domain
- CVSS
- 3.1 · 7.7 HIGH · CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N
- Weaknesses (CWE)
- CWE-918
- Affected products
- 0 configuration(s)
- Published / Modified
- 2026-06-12 / 2026-06-17
NVD description (verbatim)
Koel is a free, open-source music streaming solution. Prior to version 9.3.5, Koel validates the podcast feed URL via the SafeUrl rule (DNS resolution + public IP check), but the individual episode <enclosure url="..."> values extracted from the RSS XML are stored directly into the database without any SSRF validation. When a user plays an episode, the server downloads the full HTTP response from the unvalidated enclosure URL via Http::sink()->get() and streams it back to the user, enabling full-read SSRF against internal services. This issue has been patched in version 9.3.5.
3 reference(s) · View on NVD →
SEC.co analysis · AI-assisted, reviewed against source
Technical summary
Koel versions prior to 9.3.5 implement SSRF protections at the podcast feed level using the SafeUrl validation rule, which performs DNS resolution and public IP verification. However, this validation is not applied to the <enclosure url=""> fields within the RSS/XML feed content. These enclosure URLs are extracted and stored directly in the database without sanitization. When a user initiates playback of a podcast episode, the Koel server retrieves the full HTTP response from the unvalidated enclosure URL using Http::sink()->get() and streams it to the client. An attacker with legitimate user access can exploit this by hosting a malicious podcast feed containing enclosure URLs targeting internal services (127.0.0.1, private subnets, internal hostnames), effectively turning the Koel server into a proxy for SSRF attacks against the internal network.
Business impact
This vulnerability enables authenticated users to exfiltrate sensitive data from internal services running on the same network as the Koel server, such as databases, configuration services, or internal APIs. In multi-tenant deployments or shared hosting environments, this could expose other customers' data. The attack requires user interaction (clicking play on a crafted episode), but the damage occurs server-side without user visibility. Organizations relying on Koel for music streaming in environments with sensitive internal services face confidentiality risks if internal services expose authentication tokens, configuration data, or other sensitive information via HTTP responses.
Affected systems
Koel versions before 9.3.5 are affected. The vulnerability requires an authenticated user account and the ability to add a podcast feed (or trick an existing user into subscribing to a malicious feed). Desktop installations, server deployments, and containerized instances are all potentially vulnerable if running an affected version. The OpenSSH, Apache, nginx, and other internal services commonly found in corporate networks are potential targets.
Exploitability
Exploitability is straightforward for authenticated attackers. No special privileges, complex exploitation techniques, or user-agent spoofing is required. The attacker simply creates a podcast feed with enclosure URLs pointing to internal services and ensures a user subscribes to it. When the episode is played, the SSRF payload executes automatically. The CVSS score of 7.7 (HIGH) reflects that authentication is required (PR:L), but the scope is changed (S:C), meaning the attacker can access resources beyond the intended scope of the vulnerable component, with high confidentiality impact (C:H). The attack surface expands significantly in environments where users can freely add podcast feeds or where feeds are shared across a community.
Remediation
Upgrade Koel to version 9.3.5 or later. The patch applies the same SafeUrl validation logic to enclosure URLs before storage, ensuring that only feeds containing URLs to public, non-internal IP addresses are accepted. Organizations unable to upgrade immediately should restrict podcast feed addition to trusted administrators only, disable the podcast feature entirely, or implement network-level controls to prevent internal HTTP traffic from Koel instances.
Patch guidance
Apply version 9.3.5 or later as released by the Koel project. Verify the upgrade in your deployment environment and confirm that podcast feeds with internal IP addresses are now rejected. If using containerized deployments, ensure the container image is rebuilt with the patched version. For self-hosted instances, follow the official Koel upgrade documentation for your deployment method (Docker, source installation, etc.). Test functionality with legitimate external podcast feeds post-upgrade to confirm normal operation.
Detection guidance
Monitor Koel server logs and network traffic for indicators of SSRF exploitation: (1) HTTP requests from the Koel process to private IP ranges (10.0.0.0/8, 172.16.0.0/12, 192.168.0.0/16, 127.0.0.1) or internal hostnames; (2) Podcast feeds added via the Koel API or UI containing enclosure URLs with internal IP addresses or reserved domain names; (3) Unusual or high-volume podcast feed subscriptions from a single user; (4) Database queries showing enclosure URLs pointing to internal services. Implement egress filtering to block outbound connections from Koel to private networks and monitor for policy violations. Check Koel's podcast feed database table for suspicious URL patterns.
Why prioritize this
This vulnerability merits prompt attention due to its HIGH CVSS score, the ease of exploitation by any authenticated user, and the potential for reading sensitive internal data. While the KEV catalog does not currently list this vulnerability, the combination of confidentiality impact, broad applicability across Koel installations, and low barrier to entry for attackers (only authentication required, no special privileges) makes it a meaningful risk. Organizations should prioritize patching production Koel instances, particularly those in network segments containing sensitive internal services or databases.
Risk score, explained
The CVSS 3.1 score of 7.7 (HIGH) reflects: Attack Vector = Network (the attacker exploits the vulnerability over the network), Attack Complexity = Low (straightforward podcast feed manipulation), Privileges Required = Low (authentication required but no elevated privileges), User Interaction = None (server-side SSRF occurs without user awareness), Scope = Changed (the attacker can access resources beyond the intended scope—internal services), Confidentiality = High (sensitive data from internal services can be read), Integrity = None (data is only read, not modified), Availability = None (no denial-of-service component). The scope-changed classification is particularly important: it elevates the severity because the attack crosses privilege boundaries.
Frequently asked questions
Can an unauthenticated attacker exploit this vulnerability?
No. The vulnerability requires an authenticated user account on the Koel instance. However, in open or public Koel deployments where registration is enabled, an attacker can trivially create an account and proceed with the exploit.
Does this vulnerability allow remote code execution?
No. This is a confidentiality-focused SSRF vulnerability that enables reading data from internal services. It does not provide code execution capabilities, though sensitive data disclosure (such as API keys or database credentials) could facilitate downstream attacks.
What internal services are at risk?
Any HTTP service running on the same network or localhost is at risk if it exposes sensitive data without additional authentication. Common targets include internal databases, configuration servers, cloud metadata endpoints, internal APIs, and admin panels. Services expecting only internal traffic are particularly vulnerable because they may not implement strong authentication.
If we disable podcast functionality, are we protected?
Yes. Disabling the podcast feature entirely eliminates the attack surface. However, this sacrifices the legitimate podcast streaming capability. Upgrading to version 9.3.5 is the preferred solution, as it fixes the vulnerability while preserving functionality.
This analysis is based on the official CVE-2026-47260 disclosure and Koel project advisories. Patch version numbers, affected version ranges, and remediation steps should be verified against the official Koel release notes and security advisories before deployment. This vulnerability requires authentication; however, the risk is contextual to your deployment model and network architecture. No liability is assumed for damages arising from the use or misuse of this information. Always conduct thorough testing in a non-production environment before applying patches to production systems. Source: NVD (public-domain), retrieved 2026-07-20. Analysis generated by SEC.co (claude-haiku-4-5).
Weaknesses (CWE)
Related vulnerabilities
- CVE-2026-10068HIGHSSRF in Shibby Tomato 1.28 miniupnpd (Unmaintained)
- CVE-2026-10107HIGHMoviePilot v2 SSRF in Image Proxy Allows Internal Network Access
- CVE-2026-10280HIGHServer-Side Request Forgery in Horizon921 mcpilot 0.1.0
- CVE-2026-10287HIGHSSRF in SourceCodester SEO Meta Tag Extractor 1.0
- CVE-2026-10586HIGHGutenberg Essential Blocks SSRF Vulnerability – High Risk Server-Side Request Forgery
- CVE-2026-10771HIGHCRMEB Java SSRF Vulnerability in QR Code Endpoint
- CVE-2026-11437HIGHServer-Side Request Forgery in go-fastdfs-web 1.3.7 and Earlier
- CVE-2026-20252HIGHSplunk SSRF in Dashboard Studio PDF Export – Full Analysis