CVE-2024-6345 분석
Python Setuptools 취약점(CVE-2024-6345) 영향도 분석
🎯 대상
- Setuptools 69.1.1 버전 이하
🤔 setuptools 란?
- Python에서 프로젝트 배포 전 패키지화 진행을 도와주는 오픈 소스
- 이를 통해 외부 경로에 있는 패키지화된 프로젝트를 Import 할 수 있음
💀 CVE-2024-6345
1. 취약점 및 Command Injection 동작 원리
해당 취약점은 setuptools에서 의존성을 위해 추가적인 패키지(git 스키마가 포함된 URL)를 다운로드하는 과정에서
os.system("git clone --quiet %s %s" % (url, filename))
코드를 실행하여 url과 세미콜론을 이용하여 command injection을 시도하는 것으로 보임의존성 패키지의 Git URL을 호출하는 과정에서 아래 그림과 같이 최종적으로 임의의 명령어가 실행됨
2. Exploit / 취약점 악용
- 취약점을 악용하기위해서는 명령어가 포함됨 git url로 패키지를 설치하도록 아래와 같은 Payload 실행 유도
- Command :
; echo 'hello' > good
- Payload:
python setup.py easy_install "git://example.net/package-a.git; echo 'hello' > good@main#egg=Package-A"
- Command :
- 두번째 시나리오는 Python 패키지를 직접 빌드해서 쓰도록 유도
- 사용자는 패키지는 다운로드 후 python setup.py install 로 패키지를 빌드
- 패키지를 빌드하는 과정에서 의존성 패키지(Package-A)를 설치 시도, 명령어가 삽입되어있는 Git URL을 이용해 git clone 실행 중 Command Injection이 발생하여 임의의 명령어가 실행됨
- 세번째 시나리오, 내부망에서 사용하는 내부 패키지 및 라이브러리 저장소를 해커가 조작이 가능하다는 전제하에 아래 그림처럼 공격이 가능, 의존성 패키지의 이름으로 저장소에 검색하여 해당하는 URL을 조회하여 설치 시도
🤜 대응 방안
- 취약 대상 패키지
- Setuptools Package Version 70.0 이상으로 Update
- python -m pip install –upgrade setuptools
- 외부로부터 전달받은 빌드되지 않은 python 패키지를 직접 빌드하여 사용하는 것을 지양
👀 영향도
- 해당 취약점은 사용자가 직접 setuptools를 이용하여 패키지를 빌드해야하는 과정이 필요하여, 외부에서 직접적으로 RCE 공격이 어려울 것으로 보임
- 원격으로 RCE(Remote Commnad Execute)를 하기위해서는 많은 제약 사항이 많아, 영향도가 낮은것으로 판단
- 다만, 두번째, 세번째 시나리오처럼 사회공학기법이나 내부저장소 장악이라는 선행조건이 성공할 경우, 취약할 수 있음.
- 현재 사내 패키지/라이브러리 내부 저장소 사용 여부 확인 필요
- 특정 외부 패키지를 직접 빌드하여 사용하는 것을 지양하거나 사용 시 주의사항에 대한 안내가 필요할 것으로 보임
- 패키지 버전만 해결되면 되는 부분이라 전수 조사까지는 이루어지지 않아도 될 것으로 보이며, 관련 버전 업데이트 공지가 필요해 보임
참고
https://huntr.com/bounties/d6362117-ad57-4e83-951f-b8141c6e7ca5
This post is licensed under CC BY 4.0 by the author.