10년 전에 도입된 버전 21.04부터 Ubuntu Linux에서 기본적으로 사용되는 needrestart 유틸리티에서 5개의 로컬 권한 에스컬레이션(LPE) 취약점이 발견되었습니다.
이 결함은 Qualys에 의해 발견되었으며 CVE-2024-48990, CVE-2024-48991, CVE-2024-48992, CVE-2024-10224 및 CVE-2024-11003으로 추적됩니다. 이 문제는 2014년 4월에 출시된 needrestart 버전 0.8에 도입되었으며 어제 버전 3.8에서 수정되었습니다.
Needrestart는 Ubuntu Server를 포함하여 Linux에서 일반적으로 사용되는 유틸리티로, 패키지 업데이트 후 다시 시작이 필요한 서비스를 식별하여 해당 서비스가 최신 버전의 공유 라이브러리를 실행하도록 보장합니다.
LPE 결함 요약
Qualys가 발견한 5가지 결함을 통해 취약한 Linux 시스템에 로컬로 액세스할 수 있는 공격자는 사용자 개입 없이 자신의 권한을 루트로 승격할 수 있습니다.
결함에 대한 전체 정보는 별도의 텍스트 파일로 제공되었지만 요약은 아래에서 확인할 수 있습니다.
- CVE-2024-48990: Needrestart는 실행 중인 프로세스에서 추출된 PYTHONPATH 환경 변수를 사용하여 Python 인터프리터를 실행합니다. 로컬 공격자가 이 변수를 제어하는 경우 악성 공유 라이브러리를 심어 Python 초기화 중에 루트로 임의 코드를 실행할 수 있습니다.
- CVE-2024-48992: needrestart가 사용하는 Ruby 인터프리터는 공격자가 제어하는 RUBYLIB 환경 변수를 처리할 때 취약합니다. 이를 통해 로컬 공격자는 악성 라이브러리를 프로세스에 삽입하여 임의의 Ruby 코드를 루트로 실행할 수 있습니다.
- CVE-2024-48991: needrestart의 경쟁 조건으로 인해 로컬 공격자가 검증 중인 Python 인터프리터 바이너리를 악성 실행 파일로 대체할 수 있습니다. 교체 시기를 신중하게 정함으로써 needrestart를 속여 코드를 루트로 실행하도록 할 수 있습니다.
- CVE-2024-10224: needrestart에서 사용하는 Perl의 ScanDeps 모듈은 공격자가 제공한 파일 이름을 부적절하게 처리합니다. 공격자는 파일이 열릴 때 루트로 임의의 명령을 실행하기 위해 셸 명령(예: command|)과 유사한 파일 이름을 만들 수 있습니다.
- CVE-2024-11003: Needrestart는 Perl의 ScanDeps 모듈에 의존하므로 ScanDeps 자체의 취약점에 노출됩니다. 여기서 eval() 함수를 안전하지 않게 사용하면 공격자가 제어하는 입력을 처리할 때 임의 코드가 실행될 수 있습니다.
이러한 결함을 악용하려면 공격자가 맬웨어나 손상된 계정을 통해 운영 체제에 로컬로 액세스해야 하므로 위험이 어느 정도 완화된다는 점에 유의하는 것이 중요합니다.
그러나 공격자는 루트를 확보하기 위해 과거에 Loony Tunables 및 nf_tables 버그를 악용하는 유사한 Linux 권한 상승 취약성을 악용했으므로 이 새로운 결함이 로컬 액세스가 필요하다는 이유만으로 무시해서는 안 됩니다.
needrestart가 광범위하게 사용되고 오랫동안 취약해졌기 때문에 위의 결함으로 인해 중요한 시스템에서 권한 상승 기회가 생길 수 있습니다.
식별된 모든 취약점에 대한 패치가 포함된 버전 3.8 이상으로 업그레이드하는 것과 별도로 needrestart.conf 파일을 수정하여 취약점 악용을 방지하는 인터프리터 검색 기능을 비활성화하는 것이 좋습니다.
# Disable interpreter scanners.
$nrconf{interpscan} = 0;
이렇게 하면 잠재적으로 공격자가 제어할 수 있는 환경 변수를 사용하여 인터프리터를 실행하는 것을 다시 시작할 필요가 없습니다.