🇰🇷 한글 설명
pyLoad 0.5.0b3.dev101 미만 버전에서 특정 경로를 통해 인증 없이 Jinja2 템플릿에 접근할 수 있는 취약점이 존재합니다. 또한 코드 내 오타로 인해 HTTP 500 오류 발생 시 내부 변수명이 유출되며, 응답 차이를 이용해 유효한 템플릿 이름을 열거할 수 있습니다.
💡 쉬운 설명
로그인 없이도 프로그램의 내부 설계도가 담긴 페이지를 몰래 훔쳐볼 수 있는 보안 구멍이 발견되었습니다. 공격자는 이를 통해 시스템의 민감한 정보를 알아내거나 구조를 파악할 수 있습니다.
🇺🇸 원문 (English)
pyLoad is a free and open-source download manager written in Python. Prior to 0.5.0b3.dev101, the `/web/<path:filename>` route in `src/pyload/webui/app/blueprints/app_blueprint.py` renders Jinja2 templates without any authentication requirement. Every equivalent direct route (`/logs`, `/settings`, `/queue`, `/dashboard`, etc.) is protected by `@login_required`, but the underlying templates for all of these pages are accessible unauthenticated via this endpoint. Combined with an exception attribute typo in `src/pyload/webui/app/handlers.py` (`exc.desc` instead of `exc.description`), internal Jinja2 variable names are leaked in HTTP 500 response bodies to unauthenticated callers. An attacker can also enumerate all valid template names by observing 200 vs 500 response differentiation. Version 0.5.0b3.dev101 contains a patch.
📍 영향받는 시스템
pyLoad 버전 0.5.0b3.dev101 미만
⚔️ 공격 벡터
인증되지 않은 사용자가 특정 URL 경로를 통해 템플릿에 접근하고 오류 응답을 유도하여 정보를 탈취함
🛡️ 대응 방법
pyLoad를 최신 패치가 적용된 버전인 0.5.0b3.dev101 이상으로 업데이트하십시오.
🔧 검증 코드
출력된 버전 번호가 0.5.0b3.dev101보다 낮으면 취약한 상태입니다.
python3 -c 'import pkg_resources; print(pkg_resources.get_distribution("pyload").version)' 2>/dev/null || echo 'not installed'