🇰🇷 한글 설명
Nezha Monitoring 2.0.13 이전 버전의 대시보드 NoRoute 핸들러에서, /dashboard로 시작하는 URL을 관리자 프론트엔드 자산 요청으로 처리하는 로직이 strings.HasPrefix로 검사되어 /dashboard../ 같은 입력으로 경로 순회가 가능합니다. 이를 통해 인증 없이 서버의 임의 파일(예: data/config.yaml)을 읽을 수 있습니다. 해당 문제는 2.0.13 버전에서 패치되었습니다.
💡 쉬운 설명
누구나 특수하게 조작된 웹 주소를 입력하면 서버 안의 설정 파일 같은 중요한 파일을 열어볼 수 있는 취약점입니다. 로그인 없이도 공격이 가능해 매우 위험합니다.
🇺🇸 원문 (English)
Nezha Monitoring is a self-hostable, lightweight, servers and websites monitoring and O&M tool. Prior to version 2.0.13, fallbackToFrontend in the dashboard's NoRoute handler treats any URL whose raw string starts with /dashboard as an admin-frontend asset request. The check uses strings.HasPrefix, not a path-segment match, so the input /dashboard../data/config.yaml is accepted; strings.TrimPrefix leaves ../data/config.yaml; and path.Join("admin-dist", "../data/config.yaml") normalizes to data/config.yaml — which os.Stat finds and http.ServeFile returns. No authentication required. This issue has been patched in version 2.0.13.
📍 영향받는 시스템
Nezha Monitoring 2.0.13 미만 버전
⚔️ 공격 벡터
/dashboard../data/config.yaml 같이 경로 순회 문자열을 포함한 URL로 인증 없이 요청하여 서버 내 임의 파일을 조회
🛡️ 대응 방법
Nezha Monitoring을 2.0.13 이상으로 즉시 업그레이드하고, 설정 파일 등 민감 정보는 교체 및 점검
🔧 검증 코드
출력된 버전이 2.0.13 미만이면 취약하므로 업그레이드가 필요하고, 2.0.13 이상이면 패치가 적용된 상태입니다.
docker exec nezha-dashboard /dashboard/app -v 2>/dev/null || ./nezha-dashboard -v 2>/dev/null