🇰🇷 한글 설명
Frappe Builder 1.36.1 이전 버전의 builder/api.py에는 서버 측 요청 위조(SSRF) 취약점이 있습니다. assert_not_private_url() 검증이 초기 호스트명만 확인하고 리다이렉트 대상은 검증하지 않아, 인증된 공격자가 convert_to_webp 엔드포인트를 통해 내부 주소나 클라우드 메타데이터 서비스로 요청을 보낼 수 있습니다. 또한 타임아웃이 없어 요청 지연에 따른 서비스 거부도 발생할 수 있습니다.
💡 쉬운 설명
공격자가 외부 주소처럼 보이는 링크를 보내 서버가 내부 시스템에 접근하도록 속일 수 있습니다. 이를 통해 내부 정보가 노출되거나 서버가 응답 지연 상태에 빠질 수 있습니다.
🇺🇸 원문 (English)
Frappe Builder before 1.36.1 contains a server-side request forgery vulnerability in builder/api.py where the assert_not_private_url() guard validates only the initial hostname before callers invoke requests.get(url) with default redirect-following and no IP pinning, allowing an attacker-supplied public URL to HTTP-redirect to internal or link-local addresses the guard never validated. An authenticated attacker can call the convert_to_webp endpoint, which lacks a permission decorator, with a URL that redirects to internal targets such as cloud metadata services to perform SSRF, internal port scanning, or trigger a request-hang denial of service due to the missing timeout.
📍 영향받는 시스템
Frappe Builder 1.36.1 미만 버전
⚔️ 공격 벡터
인증된 사용자가 convert_to_webp API에 리다이렉트를 이용하는 공개 URL을 전달해 내부망이나 클라우드 메타데이터 주소에 접근
🛡️ 대응 방법
Frappe Builder를 1.36.1 이상으로 업데이트하고, 리다이렉트 대상 IP까지 검증하며 요청 타임아웃을 설정
🔧 검증 코드
출력된 버전이 1.36.1 미만이면 취약하고, 1.36.1 이상이면 패치된 상태입니다.
pip show frappe-builder 2>/dev/null | grep -i version