Executive brief
AzuraCast is a self-hosted radio streaming platform. The /play endpoint fails to check whether an authenticated user has permission to access a specific radio station, allowing any logged-in user to download all media files from stations they don't have access to. In multi-tenant deployments, attackers can exfiltrate complete music libraries from other tenants' stations using sequential file ID enumeration.
Technical details
The GET /api/station/{station_id}/file/{id}/play endpoint in AzuraCast backend/config/routes/api_station.php is missing the Middleware\Permissions check that protects adjacent endpoints in the same /file/{id} route group. While RequireLogin middleware verifies the user is authenticated, it does not validate station-level permissions; the controller's call to mediaRepo->requireForStation() only checks media-station association, not authorization. Media IDs are auto-increment integers, enabling trivial sequential enumeration of the entire media library.
Affected products
- AzuraCast AzuraCast before 0.23.6
Timeline
- 2026-04-23: disclosed
- 2026: patched: version 0.23.6