🇰🇷 한글 설명
오픈 소스 음악 스트리밍 솔루션인 Koel의 9.7.0 미만 버전에서 Subsonic 호환 createPodcastChannel.view 경로를 통해 서버 측 요청 위조(SSRF)가 발생할 수 있습니다. 인증된 사용자가 유효성 검사가 누락된 URL을 입력하면 서버가 내부 네트워크나 루프백 주소로 직접 요청을 보내게 됩니다. 이로 인해 내부 시스템에 대한 블라인드 요청 실행이 가능해집니다.
💡 쉬운 설명
해커가 Koel 서비스에 가짜 주소를 입력하면, 서버가 공격자를 대신해 내부 네트워크에 있는 다른 컴퓨터에 몰래 접속을 시도할 수 있는 보안 약점입니다. 이를 통해 외부에서 접근할 수 없는 내부 정보나 시스템에 접근할 위험이 있습니다.
🇺🇸 원문 (English)
Koel is a free, open-source music streaming solution. Prior to 9.7.0, the Subsonic-compatible createPodcastChannel.view route accepts an authenticated user's private URL because app/Http/Requests/Subsonic/CreatePodcastChannelRequest.php does not apply the SafeUrl validation used by the regular podcast API. app/Http/Controllers/Subsonic/CreatePodcastChannelController.php passes the URL to app/Services/Podcast/PodcastService.php, where PodcastService::addPodcast() and createParser() invoke Poddle::fromUrl() during channel creation, causing immediate server-side requests to loopback, Docker bridge, or RFC1918 HTTP destinations. The confirmed impact is blind internal request execution because generic response-body exfiltration was not demonstrated through this route. This issue is fixed in version 9.7.0.
📍 영향받는 시스템
Koel version < 9.7.0
⚔️ 공격 벡터
인증된 사용자가 검증되지 않은 URL을 Podcast 채널 생성 요청에 포함시켜 서버 내부로 요청을 유도하는 방식 (SSRF)
🛡️ 대응 방법
Koel을 최신 보안 패치가 적용된 버전인 9.7.0 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 버전 정보가 9.7.0 미만이면 취약한 상태이며, 9.7.0 이상이면 안전합니다.
curl -s http://<koel-host>/version | grep -E '9\.[7-9]\.' || echo 'Vulnerable or Unknown'