🇰🇷 한글 설명
Koel 오픈소스 음악 스트리밍 솔루션의 Subsonic 호환 라디오 기능에서 인증된 사용자가 검증되지 않은 streamUrl을 입력할 수 있는 취약점이 발견되었습니다. 공격자는 이를 통해 Koel 서버 내부 네트워크의 루프백, RFC1918 주소, Docker 브리지 또는 기타 내부 HTTP 서비스에 접근할 수 있습니다. 이 문제는 버전 9.7.0에서 수정되었습니다.
💡 쉬운 설명
음악 스트리밍 서비스의 설정 오류를 이용해 공격자가 서버 내부의 비밀스러운 네트워크 정보에 접근할 수 있는 보안 구멍이 발견되었습니다. 이를 통해 외부에서는 볼 수 없는 서버 내부의 다른 시스템들이 위험에 노출될 수 있습니다.
🇺🇸 원문 (English)
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.
📍 영향받는 시스템
Koel version < 9.7.0
⚔️ 공격 벡터
인증된 사용자가 조작된 streamUrl을 라디오 스테이션 생성/수정 요청에 포함하여 내부 네트워크 서비스로 SSRF 공격 수행
🛡️ 대응 방법
Koel을 최신 버전인 9.7.0 이상으로 업데이트하십시오.
🔧 검증 코드
명령어 결과에 9.7.0 이상의 버전 번호가 출력되면 취약점이 해결된 상태입니다.
curl -s http://<koel-server-address>/version | grep -E '9\.[7-9]\.'