
sudo의 CVE-2021-3156 힙 기반 버퍼 오버플로우 악용 및 완화 분석
CVE-2021-3156은 Baron Samedit으로 알려진, sudo 프로그램의 힙 기반 버퍼 오버플로우 취약점입니다. 이 취약점을 통해 인증 없이 권한이 없는 로컬 사용자가 취약한 시스템에서 루트 권한을 획득할 수 있습니다.
이 프로젝트는 룩셈부르크 대학교(University of Luxembourg) 의 소프트웨어 취약점: 익스플로잇 및 완화 과정의 일환으로 해당 취약점의 전체 익스플로잇 및 완화 과정을 문서화합니다.
OS: Ubuntu 20.04.1
sudo version: 1.8.31-1ubuntu1 (취약)
libc version: 2.31
User: 루트가 아닌 계정
취약 상태를 재현하려면:
sudo apt install sudo=1.8.31-1ubuntu1
이 취약점은 sudo가 sudoedit 모드로 실행될 때, 정교하게 조작된 명령줄 인자가 내부 힙 버퍼를 오버플로우하여 발생합니다.
익스플로잇은 메모리 분석을 통해 미세 조정된 네 가지 주요 파라미터를 사용합니다:
exploit_launcher.c — 메인 익스플로잇다음 5단계로 취약점을 트리거합니다:
LC_ALL을 조작하여 힙 메모리 레이아웃을 제어sudoedit 호출exploit_payload.c — 악성 페이로드익스플로잇 성공 시 _init 함수를 통해 자동 실행:
0(root)으로 설정$ make
$ ./exploit_it
[!] CVE-2021-3156 Exploit
[+] Target: Ubuntu 20.04.1 (sudo 1.8.31, libc-2.31)
[+] Parameters: A=56, B=54, Nulls=63, LC_ALL=212
[+] Launching exploit...
[+] Exploit successful. Root privileges obtained.
# whoami
root
✅ 권한 없는 사용자에서 루트로의 권한 상승 성공.
sudo를 패치된 버전으로 업그레이드:
sudo apt install sudo=1.8.31-1ubuntu1.5
업그레이드 후 동일한 익스플로잇은 실행 실패하였으며 루트 권한이 부여되지 않았습니다. 이로써 패치가 효과적임을 확인할 수 있습니다.
핵심 요점:
sudo와 같은 시스템 유틸리티를 최신 상태로 유지하는 것은 권한 상승 공격을 방지하는 데 중요합니다.
├── exploit_launcher.c # 메인 익스플로잇 (힙 오버플로우 트리거)
├── exploit_payload.c # 악성 페이로드 (루트 셸 실행)
├── libnss_X/ # 익스플로잇 중 로드되는 악성 라이브러리
└── Makefile # 빌드 구성
# 빌드
make
# 익스플로잇 실행
./exploit_it
| 속성 | 상세 |
|---|
| CVE ID | CVE-2021-3156 |
| 별칭 | Baron Samedit |
| 유형 | 힙 기반 버퍼 오버플로우 |
| 구성 요소 | sudo (sudoedit 모드) |
| 영향 | 로컬 권한 상승 (루트) |
| 영향 받는 버전 | sudo ≤ 1.8.31 (Ubuntu), ≤ 1.9.5p1 (기타) |
| 패치된 버전 | sudo 1.8.31-1ubuntu1.5 |
| CVSS 점수 | 7.8 (높음) |
| 파라미터 | 크기 | 목적 |
|---|
A | 56 바이트 | 초기 버퍼 오버플로우 |
B | 54 바이트 | 두 번째 힙 청크 오버플로우 |
Nulls | 63 바이트 | 메모리 정렬 구조화 |
LC_ALL | 212 바이트 | 환경 변수를 통한 힙 레이아웃 제어 |