
CVE-2024-1561 - Gradio 임의 파일 읽기
CVE-2024-1561은 4.13.0 이전 Gradio 버전에 영향을 주는 임의 파일 읽기 취약점입니다. Gradio는 머신러닝 모델과 AI 애플리케이션용 웹 인터페이스를 빠르게 구축하는 데 사용되는 널리 알려진 Python 프레임워크입니다.
이 취약점은 /component_server 엔드포인트가 내부 Component 클래스의 어떤 메서드를 호출할 수 있는지 제대로 제한하지 않기 때문에 발생합니다. 공격자는 이 동작을 악용하여 HTTP로 노출될 의도가 없는 메서드를 호출할 수 있습니다.
이러한 메서드 중 하나인 move_resource_to_block_cache는 로컬 파일시스템의 파일을 Gradio의 임시 캐시 디렉터리로 복사할 수 있게 합니다. 파일이 복사되면 /file 엔드포인트를 통해 접근할 수 있게 되어 공격자가 해당 내용을 가져올 수 있습니다.
이 취약점은 직접적인 원격 코드 실행을 제공하지는 않지만 서버의 민감한 파일을 노출할 수 있으며, 자격 증명, 구성 파일, API 키, 토큰 또는 추가 공격에 유용한 기타 정보를 수집하는 데 악용될 수 있습니다.
4.13.0 이상 버전에는 임의 메서드 호출을 방지하는 데 필요한 보안 검사가 포함되어 있습니다.
이 문제는 /component_server 엔드포인트 내부의 불충분한 검증에서 비롯됩니다.
요청을 호출 가능한 함수의 안전한 목록으로 제한하는 대신, Gradio는 공격자가 컴포넌트 인스턴스에 속한 임의의 메서드 이름을 지정할 수 있도록 허용했습니다.
내부 메서드가:
move_resource_to_block_cache()
파일시스템 경로를 입력으로 받기 때문에, 공격자는 애플리케이션에 지시하여 서버에서 읽을 수 있는 임의의 파일을 캐시할 수 있습니다.
일단 캐시되면 해당 파일은 Gradio의 일반적인 파일 제공 기능을 통해 노출됩니다.
성공적인 공격은 일반적으로 다음 단계를 따릅니다.
/config 엔드포인트를 쿼리합니다./component_server에 요청을 보냅니다.move_resource_to_block_cache 메서드를 호출합니다./etc/passwd)./file 엔드포인트를 통해 캐시된 파일을 다운로드합니다.이 절차를 통해 Gradio 프로세스가 읽을 수 있는 임의의 파일을 원격으로 검색할 수 있습니다.
POST /component_server HTTP/1.1
Host: target
Content-Type: application/json
{
"component_id": "3",
"data": "/etc/passwd",
"fn_name": "move_resource_to_block_cache",
"session_hash": "aaaaaaaaaaa"
}
성공하면 Gradio는 캐시된 파일의 위치를 반환합니다.
그런 다음 공격자는 다음을 요청할 수 있습니다:
GET /file=/tmp/gradio/<cached-file>/passwd HTTP/1.1
Host: target
를 통해 내용을 가져올 수 있습니다.
성공적인 악용 시 공격자는 다음을 포함한 민감한 파일을 읽을 수 있습니다:
/etc/passwd.env)영향 범위는 Gradio 애플리케이션의 권한에 따라 달라집니다.
이 취약점을 해결하려면:
이 저장소는 교육 목적, 보안 연구, 승인된 침투 테스트로만 제공됩니다. 소유하지 않았거나 평가 권한이 없는 시스템을 테스트하기 전에 항상 명시적인 허가를 받으세요.