<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Podcast — CraftedSignal Threat Feed</title><link>https://feed.craftedsignal.io/tags/podcast/</link><description>Trending threats, MITRE ATT&amp;CK coverage, and detection metadata. Fed continuously.</description><generator>Hugo</generator><language>en</language><managingEditor>hello@craftedsignal.io</managingEditor><webMaster>hello@craftedsignal.io</webMaster><lastBuildDate>Fri, 29 May 2026 19:56:42 +0000</lastBuildDate><atom:link href="https://feed.craftedsignal.io/tags/podcast/feed.xml" rel="self" type="application/rss+xml"/><item><title>Koel SSRF Vulnerability via Podcast Episode Enclosure URLs (CVE-2026-47260)</title><link>https://feed.craftedsignal.io/briefs/2026-05-koel-ssrf/</link><pubDate>Fri, 29 May 2026 19:56:42 +0000</pubDate><author>hello@craftedsignal.io</author><guid isPermaLink="true">https://feed.craftedsignal.io/briefs/2026-05-koel-ssrf/</guid><description>Koel is vulnerable to Server-Side Request Forgery (SSRF) due to insufficient validation of podcast episode enclosure URLs, allowing a remote attacker to inject a malicious URL into the enclosure field of a podcast RSS feed, leading to internal network reconnaissance and potential credential theft; this issue is tracked as CVE-2026-47260.</description><content:encoded><![CDATA[<p>Koel, a personal music streaming server, is vulnerable to Server-Side Request Forgery (SSRF) due to a flaw in how podcast episode enclosure URLs are handled. Specifically, while the podcast feed URL itself is validated, the individual episode enclosure URLs extracted from the RSS XML are stored and later used without proper validation. This allows an attacker to host a malicious RSS feed with enclosure URLs pointing to internal resources. When a user plays an episode from this feed, the Koel server attempts to download the full content from the attacker-specified URL, which can be an internal service. The server then streams the response back to the user, effectively granting the attacker full-read SSRF capabilities. This vulnerability affects Koel versions 9.3.4 and earlier. An additional SSRF bypass exists via the AI radio station tool, requiring a Plus license.</p>
<h2 id="attack-chain">Attack Chain</h2>
<ol>
<li>Attacker registers an account on the Koel server.</li>
<li>Attacker crafts a malicious RSS feed hosted on a public server, containing an episode with an enclosure URL pointing to an internal resource (e.g., AWS metadata endpoint at <code>http://169.254.169.254/latest/meta-data/iam/security-credentials/</code>).</li>
<li>Attacker subscribes to the malicious podcast feed by sending a <code>POST</code> request to <code>/api/podcasts</code> with the <code>url</code> parameter set to the malicious feed URL (e.g., <code>https://evil.com/feed.xml</code>). This step passes the <code>SafeUrl</code> validation, which only checks the feed URL itself.</li>
<li>Koel parses the malicious feed and stores the episode with the attacker-controlled <code>path</code>.</li>
<li>A user, or the attacker, attempts to play the episode by sending a <code>GET</code> request to <code>/play/{episode_id}</code>.</li>
<li>The server executes <code>Http::sink($file)-&gt;get(&quot;http://169.254.169.254/...&quot;)</code>, attempting to download the full content from the malicious enclosure URL.</li>
<li>The response from the internal resource (e.g., AWS metadata) is downloaded to a temporary file.</li>
<li>The contents of the file are streamed back to the user, enabling the attacker to access sensitive information.</li>
</ol>
<h2 id="impact">Impact</h2>
<p>Successful exploitation of this SSRF vulnerability can lead to:</p>
<ul>
<li>Theft of cloud credentials by reading AWS/GCP/Azure metadata endpoints.</li>
<li>Internal network reconnaissance by scanning ports and enumerating internal HTTP services.</li>
<li>Data exfiltration by reading responses from internal APIs, admin panels, and databases with HTTP interfaces.</li>
<li>The entire response body from the internal service is returned to the attacker, providing more comprehensive access compared to blind SSRF.</li>
</ul>
<h2 id="recommendation">Recommendation</h2>
<ul>
<li>Deploy the Sigma rule <code>Detect Koel SSRF via AWS Metadata Endpoint</code> to identify attempts to access the AWS metadata endpoint via the podcast enclosure URL.</li>
<li>Block the malicious RSS feed URLs observed in the <code>iocs</code> section at the network perimeter.</li>
<li>Apply the remediation steps outlined in the source to validate episode enclosure URLs in <code>synchronizeEpisodes()</code> and add defense-in-depth validation at playback time in <code>EpisodePlayable::createForEpisode()</code>.</li>
<li>Apply <code>SafeUrl</code> validation in <code>AddRadioStation</code> AI tool to prevent SSRF via the AI assistant.</li>
</ul>
]]></content:encoded><category domain="severity">high</category><category domain="type">advisory</category><category>ssrf</category><category>koel</category><category>podcast</category><category>cloud</category></item></channel></rss>