🇰🇷 한글 설명
Nezha Monitoring 0.20.0부터 2.0.10 이전 버전에서, 인증된 대시보드 사용자가 DDNS 프로필의 webhook_url, HTTP 메서드, 요청 본문, 헤더를 임의로 설정할 수 있습니다. DDNS 실행 시 SSRF 방어 없이 요청이 전송되어 대시보드 호스트가 내부 네트워크 서비스에 요청을 보낼 수 있습니다. 응답은 공격자에게 반환되지 않는 Blind SSRF입니다. 2.0.10에서 패치되었습니다.
💡 쉬운 설명
로그인한 일반 사용자가 모니터링 서버를 이용해 내부 네트워크의 다른 서비스에 임의의 요청을 보낼 수 있는 취약점입니다. 공격자가 응답을 직접 확인하지는 못하지만 내부 시스템의 상태를 변경할 수 있습니다.
🇺🇸 원문 (English)
Nezha Monitoring is a self-hostable, lightweight, servers and websites monitoring and O&M tool. From version 0.20.0 to before version 2.0.10, an authenticated Nezha dashboard user can create or update a DDNS profile with provider webhook and configure an arbitrary webhook_url, HTTP method, request body, and headers. When DDNS is triggered for a server that uses that profile, the dashboard process sends the configured request with utils.HttpClient without the SSRF protections used by notification webhooks. This allows a low-privileged authenticated user who controls an owned server/DDNS profile to make the dashboard host issue HTTP requests to loopback or internal network services. The response body is not returned to the attacker in the confirmed path, so this is a blind SSRF / internal state-changing request primitive. This issue has been patched in version 2.0.10.
📍 영향받는 시스템
Nezha Monitoring 0.20.0 이상 2.0.10 미만 버전
⚔️ 공격 벡터
인증된 사용자가 DDNS 프로필의 webhook_url을 내부 주소(예: 127.0.0.1, 사설 IP)로 설정한 뒤 DDNS를 트리거하여 대시보드 호스트가 내부 서비스에 요청을 보내도록 함
🛡️ 대응 방법
Nezha Monitoring을 2.0.10 이상으로 업그레이드하고, 신뢰할 수 없는 사용자의 계정 권한을 제한하며, 대시보드의 내부 네트워크 접근을 방화벽으로 차단
🔧 검증 코드
출력된 버전이 2.0.10 미만(0.20.0~2.0.9)이면 취약하며, 2.0.10 이상이면 패치된 것입니다. 아무 결과도 없으면 Nezha가 설치되어 있지 않거나 버전 확인 경로가 다른 것입니다.
docker images --format '{{.Repository}}:{{.Tag}}' 2>/dev/null | grep -i nezha; ./nezha-dashboard -v 2>/dev/null || cat /opt/nezha/dashboard/VERSION 2>/dev/null