
CVE-2026-7867(udisks2)에 대한 무기화된 로컬 권한 상승 익스플로잇으로, as-user 마운트 스푸핑을 사용하여 PolicyKit을 우회하고 루트 셸을 획득합니다.
as-user 스푸핑 → 권한 부여 우회 → 루트 컨텍스트 마운트 → LPECVE-2026-7867은 Filesystem.Mount D-Bus 메서드, as-user 옵션, fstab 관리 마운트 흐름 및 결함이 있는 권한 부여 처리와 관련된 udisks2의 로컬 권한 상승 취약점입니다.
이 비공개 저장소에는 통제된 실험실 환경에서 해당 문제를 검증하는 데 사용된 기술 연구 노트와 PoC 스크립트가 포함되어 있습니다.
이 취약점은 다음 연구자에 의해 발견 및 보고되었습니다:
| Azizcan Daştan | azqzazq1 |
| Özlem Ozan | oz7oz7 |
이 문제에는 다음 CVE ID가 할당되었습니다:
CVE-2026-7867
이 취약점은 실제 D-Bus 호출자 UID와 as-user 마운트 옵션으로 생성된 계산/유효 UID 사이의 잘못된 신뢰 관계로 인해 발생합니다.
취약한 흐름에서 권한이 없는 로컬 사용자는 마운트 실행 경로에 영향을 주어 예상된 PolicyKit 권한 부여 동작 없이 파일시스템 마운트가 권한 있는/루트 컨텍스트에서 수행되도록 할 수 있습니다.
핵심 버그는 단순히 "사용자가 제어하는 마운트 옵션"이 아닙니다.
실제 문제는 다음과 같습니다:
udisks2는 fstab 마운트 권한 부여 및 실행 중에 원래 호출자 ID와 계산된as-userID를 일관되게 구분하지 못합니다.
| 필드 | 값 |
|---|---|
| CVE | CVE-2026-7867 |
| 제품 | udisks2 |
| 구성 요소 | Filesystem.Mount |
| 공격 유형 | 로컬 권한 상승 |
| 프리미티브 | as-user 스푸핑 |
| 보안 경계 | D-Bus 호출자 ID → 권한 있는 마운트 실행 |
| 권한 부여 계층 | PolicyKit / fstab 마운트 권한 부여 |
| 공급업체 | Red Hat / udisks 업스트림 |
| 상태 | 패치 진행 중 / 조율된 공개 |
| 예정된 수정 릴리스 | udisks 2.11.2 |
취약한 로직은 udisks2 내부의 fstab 마운트 처리 경로와 관련이 있으며, 특히 마운트 요청에 다음이 포함될 때 발생합니다:
Filesystem.Mount
as-user
x-udisks-auth
user
users
관련 보안 민감 영역은 다음과 같습니다:
D-Bus caller identity
↓
as-user option handling
↓
fstab authorization logic
↓
PolicyKit decision flow
↓
root-context mount execution
┌─────────────────────────────┐
│ Unprivileged Local User │
└──────────────┬──────────────┘
│
│ Filesystem.Mount
│ with as-user influence
▼
┌─────────────────────────────┐
│ udisks2 / udisksd │
│ privileged system daemon │
└──────────────┬──────────────┘
│
│ fstab logic evaluates
│ user/auth options
▼
┌─────────────────────────────┐
│ Authorization Gap │
│ mount_other_user not │
│ enforced in skipped path │
└──────────────┬──────────────┘
│
│ root-context branch reached
▼
┌─────────────────────────────┐
│ Filesystem Mounted │
│ without expected auth flow │
└──────────────┬──────────────┘
│
│ impact depends on mount flags
▼
┌─────────────────────────────┐
│ Local Privilege Escalation │
│ controlled lab validation │
└─────────────────────────────┘
취약한 동작은 ID 혼동 버그에서 비롯됩니다.
시스템에는 여러 ID 개념이 있습니다:
real D-Bus caller UID
computed as-user UID
effective mount UID
udisksd daemon privilege context
취약한 흐름은 이러한 ID를 일관되게 강제하지 못합니다.
특히:
as-user가 사용되므로 mount_other_user가 true가 될 수 있음x-udisks-auth, user 또는 users와 같은 fstab 옵션이 권한 부여 경로에 영향을 줄 수 있음mount_other_user 검사가 해당 블록 외부에서는 안정적으로 강제되지 않음그 결과 로컬 권한 경계가 우회됩니다.
x-udisks-auth 문제x-udisks-auth 옵션은 관리형 PolicyKit 권한 부여 흐름을 강제하기 위한 것입니다.
예상 동작:
mount request
↓
attempt mount as caller
↓
permission/auth failure
↓
PolicyKit filesystem-fstab check
↓
admin approval
↓
mount as authorized privileged action
취약한 동작:
mount request with as-user influence
↓
computed identity affects execution
↓
mount succeeds too early
↓
PolicyKit auth path is not reached as expected
↓
privileged mount state is achieved
이로 인해 취약한 경로에서 x-udisks-auth 관련 보안 모델이 신뢰할 수 없게 됩니다.
예상 모델:
Unprivileged user
↓
D-Bus mount request
↓
PolicyKit / fstab authorization
↓
restricted mount behavior
깨진 모델:
Unprivileged user
↓
D-Bus mount request with as-user spoofing
↓
authorization logic mismatch
↓
root-context mount execution
이 버그는 영향을 받는 서비스가 상승된 권한으로 실행되기 때문에 특히 심각합니다.
성공적인 악용 시 로컬의 권한 없는 사용자가 예상된 권한 부여 프롬프트 없이 udisks2를 통해 루트 컨텍스트 실행 경로에서 파일시스템을 마운트할 수 있습니다.
파일시스템 및 마운트 플래그에 따라 영향은 다음과 같을 수 있습니다:
이는 로컬 취약점입니다.
관련 조건은 다음과 같습니다:
| 조건 | 필요 여부 |
|---|---|
| 로컬 사용자 접근 | 예 |
취약한 udisks2 버전 | 예 |
as-user 기능 존재 | 예 |
| 적합한 fstab 관리 마운트 대상 | 예 |
| 취약한 권한 부여 경로 | 예 |
| 원격 접근 | 아니요 |
.
├── README.md
├── disk2root.sh ← main exploit (self-contained LPE)
└── poc/
├── setup_lpe_env.sh ← lab environment setup
├── f2_mount_as_user_bypass.sh
├── f2_check_nosuid.sh
├── f2_suid_test.sh
├── f2_final.sh
└── cleanup_lpe_env.sh
disk2root.sh자체 포함된 무기화 익스플로잇입니다. 자체 SUID 루트 페이로드를 빌드하고, 준비된 디스크 이미지를 생성한 다음 as-user=root polkit 우회를 통해 마운트하고 루트 셸로 전환합니다.
옵션 1 — 루트로 실행 (SSH를 포함한 모든 환경에서 동작):
./disk2root.sh
스크립트는 자동으로 다음을 수행합니다:
debugfs를 통해 uid=0 mode=4755로 바이너리 주입x-udisks-auth가 포함된 fstab 항목 추가su를 통해 권한 없는 사용자로 전환as-user=root로 Filesystem.Mount 호출 (polkit 우회)권한 상승을 시작할 사용자를 지정하려면:
./disk2root.sh testuser
사용자를 지정하지 않으면 스크립트는 시스템의 첫 번째 일반 사용자를 선택하거나 임시 사용자를 생성합니다.
옵션 2 — 권한 없는 사용자로 실행 (데스크톱 / 활성 세션):
./disk2root.sh
활성 polkit 세션(데스크톱 로그인, GNOME/KDE)이 있는 시스템에서는 스크립트가 완전히 자체 포함되어 있습니다 — udisksctl 또는 D-Bus LoopSetup을 통해 자체 루프 장치를 생성하고 as-user=root로 마운트하여 사전 설정 없이 권한을 상승시킵니다.
옵션 3 — 권한 없는 사용자로 실행 (SSH, 설정 이후):
환경이 이미 준비된 경우(예: 루트로 poc/setup_lpe_env.sh를 실행했거나 이전에 루트로 ./disk2root.sh를 실행한 경우), 모든 권한 없는 사용자가 다시 악용할 수 있습니다:
./disk2root.sh
스크립트는 취약한 fstab 항목을 자동으로 감지하여 사용합니다.
./disk2root.sh --cleanup
모든 산출물을 제거합니다: fstab 항목, 루프 장치, 마운트 지점, 임시 사용자.
권한 없는 사용자로 실행되면 스크립트는 다음 여러 경로를 순서대로 시도합니다:
[A] Self-contained
build payload → create ext4 image → debugfs inject SUID binary
→ loop-setup (python3 GIO / udisksctl) → mount as-user=root
✓ works on desktop sessions