🇰🇷 한글 설명
HostList.list() 메서드가 예외 발생 시 오류 메시지를 그대로 반환하는 취약점이 있습니다. 인증된 사용자가 host_filter를 통해 특정 쿼리를 실행하면 Django의 FieldError나 PostgreSQL의 DataError를 유발하여 내부 ORM 스키마 및 데이터베이스 오류 문자열을 유출할 수 있습니다.
💡 쉬운 설명
로그인한 사용자가 특수한 검색 조건을 입력하면 시스템 내부의 데이터베이스 구조나 설계 정보가 화면에 그대로 노출될 수 있는 보안 약점입니다. 이는 공격자가 시스템의 구조를 파악하여 더 큰 공격을 준비하는 데 악용될 수 있습니다.
🇺🇸 원문 (English)
HostList.list() catches bare Exception and returns str(e)
verbatim. Via host_filter, any authenticated user triggers
Django FieldError (leaking complete Host model relation
graph including internal reverse accessors) or PostgreSQL
DataError (leaking raw database error strings). Two
primitives: credential__search=x dumps ORM schema,
name__regex=[bad reflects PostgreSQL errors.
📍 영향받는 시스템
Django 프레임워크 및 PostgreSQL을 사용하는 특정 HostList 구현 시스템
⚔️ 공격 벡터
인증된 사용자가 host_filter 매개변수에 조작된 쿼리(credential__search 또는 name__regex)를 전달하여 오류 유도
🛡️ 대응 방법
예외 처리 시 상세 오류 메시지를 반환하지 않도록 수정하고, 사용자 입력값에 대한 검증을 강화해야 합니다.
🔧 검증 코드
명령어 실행 결과로 FieldError 또는 DataError와 같은 데이터베이스/ORM 관련 상세 메시지가 출력되면 취약한 상태입니다.
curl -s -X GET 'https://target-app.com/api/hosts?name__regex=[invalid_regex]' | grep -E 'FieldError|DataError'