← 목록으로

CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득

[CVE] CVE 분석 · 작성: 2026-07-20 03:10:34 · 수정: 2026-07-20 03:11:15 · 조회 5

sudo의 명령줄 파싱 코드에 있던 힙 버퍼 오버플로우 취약점으로, sudo를 실행할 수 있는(즉 거의 모든) 로컬 사용자가 별도의 sudoers 권한 없이도 root 권한을 얻을 수 있었다. 2021년 공개 당시 거의 모든 주요 리눅스 배포판에 영향을 줬다.

취약한 지점: 이스케이프 처리의 길이 계산 실수

sudo는 sudoedit(또는 -s, -i 옵션) 실행 시 명령줄 인자에 포함된 백슬래시를 이스케이프 처리하는 로직이 있다. 이때 인자의 길이를 계산하는 함수가 인자가 백슬래시로 끝나는 경우를 제대로 처리하지 못해서, 실제보다 작은 버퍼를 할당한 뒤 그보다 큰 데이터를 복사하는 힙 오버플로우가 발생했다.

트리거 조건

sudoedit -s 뒤에 백슬래시 하나로 끝나는 인자를 조합하면, 커맨드라인 인자를 다시 조립하는 과정에서 힙 메모리에 인접한 데이터를 덮어쓸 수 있는 상태가 만들어진다. 여기에 환경 변수(argv[0]을 포함한 인자 구성)를 정교하게 조작해서 힙 레이아웃을 원하는 대로 배치하면, 결국 임의 코드 실행까지 이어진다.

왜 파급력이 컸는가

패치와 확인

sudo 1.9.5p2에서 패치됐다. 영향 여부는 버전 확인으로 간단히 체크할 수 있다.

sudo -V | head -n1

이 사건은 몇 줄 안 되는 길이 계산 실수가 어떻게 로컬 사용자 전체를 root로 만들 수 있는지 보여주는 대표 사례로, 코드 리뷰에서 문자열 길이·버퍼 크기 계산 로직을 특히 꼼꼼히 봐야 하는 이유를 잘 설명해준다.

CVE 분석 카테고리의 글 (7/8)

  1. CVE-2024-3400: Palo Alto PAN-OS GlobalProtect 원격 코드 실행
  2. CVE-2021-44228 (Log4Shell): 로그 한 줄로 서버를 장악당한 사건
  3. CVE-2014-0160 (Heartbleed): OpenSSL 하트비트가 새어나간 메모리
  4. CVE-2017-0144 (EternalBlue): WannaCry를 전 세계로 퍼뜨린 SMB 취약점
  5. CVE-2021-34527 (PrintNightmare): 프린터 드라이버 관리 기능이 만든 권한 상승
  6. CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점
  7. CVE-2021-3156 (Sudo Baron Samedit): 힙 오버플로우로 root 획득
  8. CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE
← CVE-2022-0847 (Dirty Pipe): 파이프로 읽기전용 파일을 덮어쓴 취약점 CVE-2022-22965 (Spring4Shell): 클래스 로더 조작으로 이어지는 RCE →