🇰🇷 한글 설명
Weblate 5.17.1 이전 버전에서 project.add 권한을 가진 인증 사용자가 공격자 조작 ZIP을 프로젝트 백업으로 가져올 때, 검증 우회로 인해 비정상 repo URL(127.0.0.1, file://, git:// 등)을 설정할 수 있습니다. 이 URL이 .git/config에 그대로 저장되어 내부 네트워크 접근이 가능해집니다.
💡 쉬운 설명
Weblate 복원 기능이 파일 검증을 제대로 하지 않아서, 해커가 내부 서버 주소를 몰래 저장할 수 있습니다. 이를 통해 본래 접근할 수 없는 내부 네트워크에 연결 시도가 가능해집니다.
🇺🇸 원문 (English)
Weblate is a web based localization tool. Prior to version 5.17.1, an authenticated user with project.add permission (default on hosted Weblate SaaS and for any user holding an active billing/trial plan) can import a crafted project backup ZIP whose components/<name>.json contains an attacker-chosen repo URL pointing at a private address (e.g. http://127.0.0.1:9999/) or using a non-allow-listed scheme (e.g. file://, git://). Weblate persists the component via Component.objects.bulk_create([component])[0], which bypasses Django's full_clean() and therefore never runs the validate_repo_url validator. The URL is subsequently written verbatim into .git/config by configure_repo(pull=False). This issue has been patched in version 5.17.1.
📍 영향받는 시스템
Weblate < 5.17.1 (project.add 권한 보유 사용자)
⚔️ 공격 벡터
인증된 사용자가 components/<name>.json에 비정상 URL(file://, git://, 127.0.0.1 등)을 포함한 프로젝트 백업 ZIP 가져오기
🛡️ 대응 방법
Weblate를 5.17.1 이상으로 즉시 업그레이드
🔧 검증 코드
Version: 5.17.1 이상이면 안전, 그 이하면 즉시 패치 필요
pip show weblate 2>/dev/null | grep Version