{
    "dataType": "CVE_RECORD",
    "dataVersion": "5.2",
    "cveMetadata": {
        "cveId": "CVE-2026-54493",
        "assignerOrgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
        "state": "PUBLISHED",
        "assignerShortName": "GitHub_M",
        "dateReserved": "2026-06-15T18:01:15.510Z",
        "datePublished": "2026-08-19T20:46:50.890Z",
        "dateUpdated": "2026-08-19T20:46:50.890Z"
    },
    "containers": {
        "cna": {
            "title": "Koel: Authenticated Full-Read SSRF via Subsonic Internet Radio Stations",
            "problemTypes": [
                {
                    "descriptions": [
                        {
                            "cweId": "CWE-918",
                            "lang": "en",
                            "description": "CWE-918: Server-Side Request Forgery (SSRF)",
                            "type": "CWE"
                        }
                    ]
                }
            ],
            "metrics": [
                {
                    "cvssV3_1": {
                        "attackComplexity": "LOW",
                        "attackVector": "NETWORK",
                        "availabilityImpact": "NONE",
                        "baseScore": 7.7,
                        "baseSeverity": "HIGH",
                        "confidentialityImpact": "HIGH",
                        "integrityImpact": "NONE",
                        "privilegesRequired": "LOW",
                        "scope": "CHANGED",
                        "userInteraction": "NONE",
                        "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:C/C:H/I:N/A:N",
                        "version": "3.1"
                    }
                }
            ],
            "references": [
                {
                    "name": "https://github.com/koel/koel/security/advisories/GHSA-6p96-cfg5-4vhp",
                    "tags": [
                        "x_refsource_CONFIRM"
                    ],
                    "url": "https://github.com/koel/koel/security/advisories/GHSA-6p96-cfg5-4vhp"
                },
                {
                    "name": "https://github.com/koel/koel/pull/2545",
                    "tags": [
                        "x_refsource_MISC"
                    ],
                    "url": "https://github.com/koel/koel/pull/2545"
                },
                {
                    "name": "https://github.com/koel/koel/commit/1331f335342b405e60ffabdd60f1f398508f996f",
                    "tags": [
                        "x_refsource_MISC"
                    ],
                    "url": "https://github.com/koel/koel/commit/1331f335342b405e60ffabdd60f1f398508f996f"
                },
                {
                    "name": "https://github.com/koel/koel/releases/tag/v9.7.0",
                    "tags": [
                        "x_refsource_MISC"
                    ],
                    "url": "https://github.com/koel/koel/releases/tag/v9.7.0"
                }
            ],
            "affected": [
                {
                    "vendor": "koel",
                    "product": "koel",
                    "versions": [
                        {
                            "version": "< 9.7.0",
                            "status": "affected"
                        }
                    ]
                }
            ],
            "providerMetadata": {
                "orgId": "a0819718-46f1-4df5-94e2-005712e83aaa",
                "shortName": "GitHub_M",
                "dateUpdated": "2026-08-19T20:46:50.890Z"
            },
            "descriptions": [
                {
                    "lang": "en",
                    "value": "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."
                }
            ],
            "source": {
                "advisory": "GHSA-6p96-cfg5-4vhp",
                "discovery": "UNKNOWN"
            }
        }
    }
}