<?xml version='1.0' encoding='UTF-8'?>
<?xml-stylesheet href="/static/style.xsl" type="text/xsl"?>
<rss xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" version="2.0">
  <channel>
    <title>Most recent entries from all</title>
    <link>https://cve.radiocsirt.org</link>
    <description>Contains only the most 10 recent entries.</description>
    <docs>http://www.rssboard.org/rss-specification</docs>
    <generator>python-feedgen</generator>
    <language>en</language>
    <lastBuildDate>Thu, 15 Oct 2026 17:18:35 +0000</lastBuildDate>
    <item>
      <title>EUVD-2026-357449</title>
      <link>https://cve.radiocsirt.org/vuln/euvd-2026-357449</link>
      <description>EUVD-2026-357449</description>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/euvd-2026-357449</guid>
    </item>
    <item>
      <title>fkie_cve-2026-54493</title>
      <link>https://cve.radiocsirt.org/vuln/fkie_cve-2026-54493</link>
      <description>&lt;p&gt;Koel is a free, open-source music streaming solution. Prior to 9.7.0, the Subsonic-compatible createInternetRadioStation.view and updateInternetRadioStation.view routes accept an authenticated user&amp;#39;s streamUrl without the SafeUrl and HasAudioContentType checks used by the regular radio API. app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php and app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php pass the stored URL through app/Services/RadioService.php to app/Services/Radio/RadioStreamProxy.php, where RadioStreamProxy::openStream() calls fopen($url, &amp;#39;r&amp;#39;, false, $context). Streaming /radio/stream/{id} returns the upstream response body, allowing access to loopback, RFC1918, Docker bridge, metadata, or other internal HTTP services reachable from the Koel server. This issue is fixed in version 9.7.0.&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;Koel is a free, open-source music streaming solution. Prior to 9.7.0, the Subsonic-compatible createInternetRadioStation.view and updateInternetRadioStation.view routes accept an authenticated user&amp;#39;s streamUrl without the SafeUrl and HasAudioContentType checks used by the regular radio API. app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php and app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php pass the stored URL through app/Services/RadioService.php to app/Services/Radio/RadioStreamProxy.php, where RadioStreamProxy::openStream() calls fopen($url, &amp;#39;r&amp;#39;, false, $context). Streaming /radio/stream/{id} returns the upstream response body, allowing access to loopback, RFC1918, Docker bridge, metadata, or other internal HTTP services reachable from the Koel server. This issue is fixed in version 9.7.0.&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/fkie_cve-2026-54493</guid>
    </item>
    <item>
      <title>GHSA-6p96-cfg5-4vhp — Koel: Authenticated Full-Read SSRF via Subsonic Internet Radio Stations</title>
      <link>https://cve.radiocsirt.org/vuln/ghsa-6p96-cfg5-4vhp</link>
      <description>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: phanan/koel&lt;/p&gt;
&lt;p&gt;### Summary
Koel v9.6.0 validates radio station URLs on the regular web API, but the Subsonic-compatible radio endpoints do not apply the same SSRF protections. An authenticated user can create or update a radio station with a private URL and then use Koel&amp;#39;s radio streaming feature to make the server fetch that URL and return the upstream response body.&lt;/p&gt;
&lt;p&gt;This was validated against v9.6.0 (352ea5ec27fa22294da8fb6beacb3d5552f0d09c) using the official phanan/koel:9.6.0 image.&lt;/p&gt;
&lt;p&gt;### Details
#### SafeUrl is applied on the web API, but not on the Subsonic endpoints&lt;/p&gt;
&lt;p&gt;Koel&amp;#39;s regular radio API protects station URLs with `SafeUrl` and `HasAudioContentType`:&lt;/p&gt;
&lt;p&gt;- `app/Http/Requests/API/Radio/RadioStationStoreRequest.php`
- `app/Http/Requests/API/Radio/RadioStationUpdateRequest.php`&lt;/p&gt;
&lt;p&gt;```php
new SafeUrl(),
new HasAudioContentType(),
```&lt;/p&gt;
&lt;p&gt;The Subsonic-compatible routes do not reuse those checks:&lt;/p&gt;
&lt;p&gt;- `routes/subsonic.php`
  - `createInternetRadioStation.view`
  - `updateInternetRadioStation.view`
- `app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php`
- `app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php`&lt;/p&gt;
&lt;p&gt;```php
return [
    &amp;#39;streamUrl&amp;#39; =&amp;gt; [&amp;#39;required&amp;#39;, &amp;#39;string&amp;#39;],
    &amp;#39;name&amp;#39; =&amp;gt; [&amp;#39;required&amp;#39;, &amp;#39;string&amp;#39;],
    &amp;#39;homepageUrl&amp;#39; =&amp;gt; [&amp;#39;nullable&amp;#39;, &amp;#39;string&amp;#39;],
];
```&lt;/p&gt;
&lt;p&gt;The result is a validation gap between two routes that create the same type of object.&lt;/p&gt;
&lt;p&gt;#### The unvalidated URL is stored and later fetched server-side&lt;/p&gt;
&lt;p&gt;The Subsonic controllers hand the supplied URL to the regular r…&lt;/p&gt;</description>
      <content:encoded>&lt;p&gt;&lt;strong&gt;Affected:&lt;/strong&gt; Packagist: phanan/koel&lt;/p&gt;
&lt;p&gt;### Summary
Koel v9.6.0 validates radio station URLs on the regular web API, but the Subsonic-compatible radio endpoints do not apply the same SSRF protections. An authenticated user can create or update a radio station with a private URL and then use Koel&amp;#39;s radio streaming feature to make the server fetch that URL and return the upstream response body.&lt;/p&gt;
&lt;p&gt;This was validated against v9.6.0 (352ea5ec27fa22294da8fb6beacb3d5552f0d09c) using the official phanan/koel:9.6.0 image.&lt;/p&gt;
&lt;p&gt;### Details
#### SafeUrl is applied on the web API, but not on the Subsonic endpoints&lt;/p&gt;
&lt;p&gt;Koel&amp;#39;s regular radio API protects station URLs with `SafeUrl` and `HasAudioContentType`:&lt;/p&gt;
&lt;p&gt;- `app/Http/Requests/API/Radio/RadioStationStoreRequest.php`
- `app/Http/Requests/API/Radio/RadioStationUpdateRequest.php`&lt;/p&gt;
&lt;p&gt;```php
new SafeUrl(),
new HasAudioContentType(),
```&lt;/p&gt;
&lt;p&gt;The Subsonic-compatible routes do not reuse those checks:&lt;/p&gt;
&lt;p&gt;- `routes/subsonic.php`
  - `createInternetRadioStation.view`
  - `updateInternetRadioStation.view`
- `app/Http/Requests/Subsonic/CreateInternetRadioStationRequest.php`
- `app/Http/Requests/Subsonic/UpdateInternetRadioStationRequest.php`&lt;/p&gt;
&lt;p&gt;```php
return [
    &amp;#39;streamUrl&amp;#39; =&amp;gt; [&amp;#39;required&amp;#39;, &amp;#39;string&amp;#39;],
    &amp;#39;name&amp;#39; =&amp;gt; [&amp;#39;required&amp;#39;, &amp;#39;string&amp;#39;],
    &amp;#39;homepageUrl&amp;#39; =&amp;gt; [&amp;#39;nullable&amp;#39;, &amp;#39;string&amp;#39;],
];
```&lt;/p&gt;
&lt;p&gt;The result is a validation gap between two routes that create the same type of object.&lt;/p&gt;
&lt;p&gt;#### The unvalidated URL is stored and later fetched server-side&lt;/p&gt;
&lt;p&gt;The Subsonic controllers hand the supplied URL to the regular r…&lt;/p&gt;</content:encoded>
      <guid isPermaLink="false">https://cve.radiocsirt.org/vuln/ghsa-6p96-cfg5-4vhp</guid>
    </item>
  </channel>
</rss>
