
CVE-2024-48990에 대한 개념 증명 익스플로잇으로, PYTHONPATH 조작을 통해 needrestart에서 로컬 권한 상승을 시연합니다. 테스트용 러너 스크립트와 페이로드 바이너리를 포함합니다.
Needrestart는 리눅스 시스템에서 널리 사용되는 유틸리티로(대부분의 Ubuntu 버전에서 기본 탑재), 소프트웨어 업데이트 후 서비스나 시스템 자체를 다시 시작해야 하는지 확인합니다. 실행 중인 프로세스를 분석하여 업데이트된 라이브러리를 사용하고 있는지, 또는 변경 사항을 적용하기 위해 재시작이 필요한지 판단합니다.
Needrestart가 Python 인터프리터를 실행하는 프로세스를 감지하면, /proc/[pid]/environ에서 해당 프로세스와 연결된 환경 변수 PYTHONPATH를 읽어온 후 분석을 위해 자체 Python 인터프리터를 실행하기 전에 해당 변수를 설정합니다.
원래 프로세스가 로컬 공격자에 속한 경우, 공격자는 PYTHONPATH를 조작하여 악성 라이브러리를 가리키도록 할 수 있습니다.
그 결과, needrestart가 루트 권한으로 Python 인터프리터를 실행할 때 조작된 PYTHONPATH가 적용되어 공격자의 코드가 실행되며, 이는 루트 권한 상승으로 이어집니다.
이 취약점은 needrestart 3.8 이전 버전에만 영향을 미칩니다. 3.8 이상 버전에서는 Python 인터프리터를 호출하기 전에 PYTHONPATH와 같은 환경 변수를 적절히 정화하는 수정 사항이 포함되어 있어, 악의적인 환경 변수 조작을 통한 권한 상승을 방지합니다.
리포지토리를 클론합니다.
runner.sh 파일에서 컴파일된 바이너리를 가져오기 위해 사용된 IP를 자신의 머신을 가리키도록 수정합니다.
공격자 머신에서 binary.sh에 실행 권한을 부여하고 실행합니다.
HTTP 서버를 설정합니다:
$ python3 -m http.server
