The core of the vulnerability is a Server-Side Request Forgery (SSRF) caused by insufficient validation of URLs sourced from external input. The primary attack vector involves the podcast functionality. The application correctly validates the main podcast feed URL upon subscription. However, it fails to validate the individual episode URLs (enclosure URLs) contained within the feed's XML data.
The App\Services\Podcast\PodcastService::synchronizeEpisodes function would parse the RSS feed and store these unvalidated enclosure URLs directly into the database. When a user attempts to play an episode, the App\Values\Podcast\EpisodePlayable::createForEpisode function is triggered. This function retrieves the stored URL from the database and executes an HTTP request to it, resulting in a full-read SSRF. An attacker can host a malicious RSS feed containing URLs pointing to internal services (e.g., cloud metadata endpoints like 169.254.169.254) to exfiltrate sensitive data.
A secondary, similar SSRF vulnerability was found in the App\Ai\Tools\AddRadioStation::handle function, which is part of a premium feature. This tool accepted a URL to add a radio station but failed to apply any safety checks, again allowing an attacker to specify an internal URL and trigger an SSRF. The patches remediate these issues by consistently applying a SafeUrl validation rule at every point where an external URL is processed: during podcast synchronization, just before episode playback, and within the AI radio station tool.