Post

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을 호출하는 과정에서 아래 그림과 같이 최종적으로 임의의 명령어가 실행됨

1.jpg

2. Exploit / 취약점 악용

  1. 취약점을 악용하기위해서는 명령어가 포함됨 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"
  2. 두번째 시나리오는 Python 패키지를 직접 빌드해서 쓰도록 유도

2.png

  • 사용자는 패키지는 다운로드 후 python setup.py install 로 패키지를 빌드

3.jpg

  • 패키지를 빌드하는 과정에서 의존성 패키지(Package-A)를 설치 시도, 명령어가 삽입되어있는 Git URL을 이용해 git clone 실행 중 Command Injection이 발생하여 임의의 명령어가 실행됨

4.jpg

  1. 세번째 시나리오, 내부망에서 사용하는 내부 패키지 및 라이브러리 저장소를 해커가 조작이 가능하다는 전제하에 아래 그림처럼 공격이 가능, 의존성 패키지의 이름으로 저장소에 검색하여 해당하는 URL을 조회하여 설치 시도

5.jpg

🤜 대응 방안

  • 취약 대상 패키지
    • 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.