CVE-2026-54493
WysokieCVSS 7.7Streszczenie
W Koel przed wersją 9.7.0 trasy Subsonic-compatible createInternetRadioStation.view i updateInternetRadioStation.view akceptują streamUrl od uwierzytelnionego użytkownika bez sprawdzeń SafeUrl i HasAudioContentType. Przechowywany URL jest przekazywany do RadioStreamProxy::openStream(), który wywołuje fopen($url, 'r', false, $context). Pozwala to na dostęp do wewnętrznych usług HTTP, takich jak loopback, RFC1918, Docker bridge czy metadata.
Ocena ryzyka
Ryzyko polega na możliwości wykorzystania serwera Koel do skanowania wewnętrznej sieci i dostępu do wrażliwych usług, w tym metadanych chmury, co może prowadzić do wycieku danych.
Rekomendacja
Zaleca się aktualizację Koel do wersji 9.7.0 lub nowszej. Należy również ograniczyć dostęp do API i stosować odpowiednie filtry walidacji URL.
Oryginalny opis (angielski, źródło NVD)
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'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, 'r', 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.

