
glibc의 ld.so 동적 로더에서 발생하는 취약점인 CVE-2023-4911의 영향을 입증하며 Looney Tunables와 관련된 위험을 노출하는 개념 증명(PoC)을 포함하는 저장소입니다.
GNU C 라이브러리(glibc)는 GNU 시스템의 C 라이브러리로, 리눅스 기반 시스템의 핵심 구성 요소입니다. glibc는 프로그램에 필수적인 기능(시스템 호출, open, malloc, printf, exit 등 일반 함수)을 정의합니다. 동적 로더는 glibc의 중요한 구성 요소로서, 공유 라이브러리를 관리하고 런타임에 연결하여 프로그램을 준비하고 실행하는 핵심 역할을 합니다.
GLIBC_TUNABLES 환경 변수는 재컴파일 없이 사용자가 glibc의 동작을 런타임에 수정할 수 있도록 도입되었습니다. 이는 성능 및 동작 매개변수를 조정하여 애플리케이션 시작에 영향을 미치는 수단을 제공합니다.
동적 로더의 GLIBC_TUNABLES 처리 과정에서 발생하는 버퍼 오버플로 취약점은 심각한 보안 위험을 초래합니다. 이를 악용하면 로컬 공격자에게 권한 상승이 가능해져 잠재적으로 완전한 루트 액세스 권한을 얻을 수 있습니다. Fedora, Ubuntu, Debian 등 주요 배포판에서 성공적인 악용 사례가 보고되어 심각성과 광범위한 영향을 강조합니다.
이 취약점의 오용 또는 악용은 시스템 성능, 안정성 및 보안에 영향을 미칠 수 있습니다. 악용 세부 사항은 공개되지 않았지만 버퍼 오버플로는 빠르게 데이터 전용 공격으로 전환될 수 있으므로 위험은 임박했습니다. glibc를 사용하는 인기 있는 리눅스 배포판이 영향을 받을 수 있으므로 신속한 인식과 완화 조치가 필요합니다.
할당일: 2023년 10월 3일
유형: 로컬 권한 상승
영향 받는 버전: glibc 2.34 이상
배포판: RHEL, Ubuntu, Fedora, Debian, Amazon Linux, Gentoo 등 glibc를 사용하는 배포판 완화 조치
업그레이드: glibc 업데이트를 신속히 적용하세요.
모니터링: 보안 권고 사항을 지속적으로 확인하세요.
검토: 애플리케이션에서 GLIBC_TUNABLES 사용을 평가하세요.
감사: 시스템 로그에서 의심스러운 활동을 검사하세요.
Ubuntu 22.04 Ubuntu GLIBC 2.35-0ubuntu3.1 util-linux 2.37.2의 su ASLR 켜짐
가상 머신 생성을 위해 Ubuntu (버전 22.04.1) ISO를 사용했습니다.
설치가 완료된 후에는 아무 것도 업데이트할 필요가 없지만, git과 GNU Binutils 패키지를 설치해야 합니다. 이 패키지들은 시스템에 없으며, 익스플로잇 파이썬 스크립트를 컴파일할 때 오류가 발생하기 때문입니다.
다음 명령어를 사용하세요:
$ sudo apt install git
$ sudo apt install binutils
취약한지 확인하려면
$ env -i "GLIBC_TUNABLES=glibc.malloc.mxfast=glibc.malloc.mxfast=A" "Z=`printf '%08192x' 1`" /usr/bin/su --help
만약
Segmentation fault (core dumped)가 출력된다면 취약한 것입니다.
동적 링커/로더(일반적으로 GNU C 라이브러리(glibc)와 연관됨)의 버전을 확인합니다.
$ ldd --version
출력에서 GLIBC 버전을 알 수 있습니다.
ldd (Ubuntu GLIBC 2.35-0ubuntu3.6) 2.35
Copyright (C) 2022 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
이제 우리 머신이 취약하며 루트 권한 상승을 할 준비가 되었습니다.
참고: 머신에 gcc를 설치하지 마십시오. 설치하면 취약성이 사라져 스크립트가 작동하지 않습니다.
gcc가 설치되어 있지 않으므로 호스트 머신에서 C 프로그램을 컴파일한 후 게스트 머신으로 가져와야 합니다.
C 프로그램을 다음 명령어로 컴파일할 수 있습니다:
$ gcc exploit.c -o (출력이름)
C 프로그램의 출력 파일을 가져온 후 파이썬(genlib.py) 스크립트도 가져옵니다.
이제 파이썬 스크립트를 컴파일합니다:
$ python3 genlib.py
컴파일 후 '"' 폴더가 생성됩니다.
/tmp 폴더에서 작업하여 사용자가 스크립트와 프로그램을 실행할 수 있도록 합니다.
마지막으로 프로그램을 실행하여 루트 권한을 상승시킵니다.
$ ./(프로그램이름)
시간이 다소 걸리며 루트 셸을 획득할 수 있습니다.
악용이 아닌 보안 강화를 위해!
참고 자료: