
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를 일관되게 구분하지 못합니다.
취약한 로직은 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를 통해 루트 컨텍스트 실행 경로에서 파일시스템을 마운트할 수 있습니다.
파일시스템 및 마운트 플래그에 따라 영향은 다음과 같을 수 있습니다:
이는 로컬 취약점입니다.
관련 조건은 다음과 같습니다:
.
├── 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
[B] Fstab fallback
scan /etc/fstab for x-udisks-auth / user / users entries
→ mount as-user=root → find SUID binary on mounted fs
✓ works on SSH when environment is prepared
╔═════════════════════════════════════════════════════╗
║ CVE-2026-7867 — disk2root ║
║ udisks2 as-user polkit bypass → LPE root shell ║
╚═════════════════════════════════════════════════════════╝
[*] uid=1002 (testuser) — exploiting...
fstab: /dev/loop5 → /mnt/disk2root (x-udisks-auth)
mounted: /mnt/disk2root
nosuid: not set
suid: pwn (4755 root:root)
╔═════════════════════════════════════════════════════╗
║ dropping into root shell — type 'exit' to return ║
╚═════════════════════════════════════════════════════════╝
[+] root shell — uid=0 euid=0
root@target:/tmp#
poc/)연구 중 사용된 개별 검증 스크립트입니다. 이들은 disk2root.sh로 이어진 구성 요소입니다.
1. Run poc/setup_lpe_env.sh as root
2. su - testuser
3. Run poc/f2_mount_as_user_bypass.sh
4. Run poc/f2_final.sh for full validation
5. Run poc/cleanup_lpe_env.sh as root
또는 위의 모든 기능을 결합한 disk2root.sh를 사용하면 됩니다.
이 연구에서 입증된 프리미티브는 다음과 같습니다:
as-user option spoofing inside privileged mount orchestration
핵심 전환 과정은 다음과 같습니다:
unprivileged D-Bus caller
↓
spoofed/computed mount identity
↓
authorization path confusion
↓
root-context mount execution
이것이 이 문제가 로컬 권한 상승 취약점으로 분류되는 이유입니다.
udisks2는 일반적으로 권한 있는 스토리지 관리 데몬으로 신뢰됩니다.
이 계층의 버그는 다음 사이에 위치하기 때문에 영향력이 큽니다:
desktop/session users
D-Bus method calls
PolicyKit authorization
filesystem mount operations
root daemon privileges
여기서 ID 처리의 결함은 로컬 권한 경계에 직접적인 영향을 줄 수 있습니다.
방어자는 as-user와 관련된 의심스러운 udisks2 마운트 활동을 모니터링할 수 있습니다.
유용한 텔레메트리 소스:
udisksd logs
D-Bus method calls
PolicyKit logs
mount table changes
/proc/mounts
/etc/fstab
journalctl
유용한 명령:
findmnt
mount
cat /proc/mounts
journalctl -u udisks2
journalctl | grep -i udisks
journalctl | grep -i polkit
의심스러운 패턴:
non-root user triggering Filesystem.Mount
as-user=root usage
unexpected mount without PolicyKit prompt
mounts lacking nosuid/noexec/nodev
setuid execution from recently mounted filesystems
unexpected loop device mounts
udisks2 업데이트공급업체가 제공하는 수정 사항이 제공되면 적용하십시오.
예정된 수정 릴리스:
udisks 2.11.2
다음을 사용하는 항목을 감사하십시오:
x-udisks-auth
user
users
특히 실행 파일 또는 setuid 콘텐츠를 포함할 수 있는 파일시스템을 검토하십시오.
이는 로컬 취약점이므로 신뢰할 수 없는 로컬 접근을 줄이면 노출이 감소합니다.
다음을 통해 예기치 않은 마운트 작업을 모니터링하십시오:
udisksd
특히 비루트 사용자가 트리거할 때 더욱 주의하십시오.
해당되는 경우 다음을 사용하십시오:
nosuid
noexec
nodev
이러한 플래그는 마운트 후 영향을 줄일 수 있습니다.
udisks 마운트 작업과 관련된 PolicyKit 규칙을 검토하십시오.
권한 없는 사용자가 명시적 권한 부여 없이 민감한 마운트 경로를 트리거할 수 없도록 하십시오.
강력한 수정 사항은 다음을 보장해야 합니다:
as-user UID가 권한 부여 시 호출자 ID를 대체하지 않음mount_other_user가 항상 적절한 PolicyKit 검사를 트리거함x-udisks-auth가 인증을 일관되게 강제함엠바고 해제 후 이 저장소는 다음 구조의 공개 연구 저장소로 전환될 수 있습니다:
docs/
├── technical-analysis.md
├── root-cause.md
├── lab-setup.md
├── exploit-flow.md
├── detection.md
└── mitigation.md
권장 공개 추가 항목:
이 저장소는 승인된 보안 연구, 공급업체 조정 및 방어적 검증 전용입니다.
PoC 스크립트는 격리된 테스트 환경을 대상으로 합니다.
소유하지 않았거나 테스트에 대한 명시적 허가가 없는 시스템에서 이러한 스크립트를 실행하지 마십시오.
저자는 이 연구의 오용에 대해 책임을 지지 않습니다.
CVE-2026-7867
udisks2 로컬 권한 상승 연구
| 필드 | 값 |
|---|
| CVE | CVE-2026-7867 |
| 제품 | udisks2 |
| 구성 요소 | Filesystem.Mount |
| 공격 유형 | 로컬 권한 상승 |
| 프리미티브 | as-user 스푸핑 |
| 보안 경계 | D-Bus 호출자 ID → 권한 있는 마운트 실행 |
| 권한 부여 계층 | PolicyKit / fstab 마운트 권한 부여 |
| 공급업체 | Red Hat / udisks 업스트림 |
| 상태 | 패치 진행 중 / 조율된 공개 |
| 예정된 수정 릴리스 | udisks 2.11.2 |
| 조건 | 필요 여부 |
|---|
| 로컬 사용자 접근 | 예 |
취약한 udisks2 버전 | 예 |
as-user 기능 존재 | 예 |
| 적합한 fstab 관리 마운트 대상 | 예 |
| 취약한 권한 부여 경로 | 예 |
| 원격 접근 | 아니요 |
| 도구 | 용도 | 필수 |
|---|
busctl | D-Bus 마운트 호출 | 예 |
gcc | SUID 페이로드 컴파일 | 예 (bash 복사로 대체 가능) |
mke2fs | ext4 이미지 생성 | 예 (자체 포함 모드) |
debugfs | uid=0 바이너리 주입 | 예 (자체 포함 모드) |
python3-gi | fd 전달을 통한 D-Bus LoopSetup | 선택 (데스크톱 모드) |
udisksctl | 루프 장치 설정 | 선택 (데스크톱 모드) |
| 스크립트 | 용도 |
|---|
setup_lpe_env.sh | 실험실 환경 준비 (루프 장치, fstab, 테스트 사용자) |
f2_mount_as_user_bypass.sh | as-user=root를 사용한 Filesystem.Mount 우회 검증 |
f2_check_nosuid.sh | 우회 마운트에서 nosuid/noexec/nodev 플래그 확인 |
f2_suid_test.sh | 마운트된 파일시스템에서 SUID 바이너리 실행 테스트 |
f2_final.sh | 종단 간 PoC: 설정 → 우회 → euid=0 확인 |
cleanup_lpe_env.sh | 테스트 환경 복원 |
| 날짜 | 이벤트 |
|---|
2026-04-21 | Red Hat 제품 보안에 보고서 제출 |
2026-04-21 | Red Hat이 접수 확인 |
2026-04-28 | 공급업체가 결함 로직 확인 |
2026-04-28 | 공급업체가 PoC 스크립트 요청 |
2026-04-30 | 공급업체가 CVE 할당 요청 |
2026-04-30 | PoC 스크립트를 공급업체에 전송 |
2026-05-03 | 초기 공급업체 패치 공유 |
2026-05-05 | 업데이트된 공급업체 패치 공유 |
2026-05-05 | CVE-2026-7867 예약됨 |
2026-05-05 | 티켓이 해결됨으로 표시 |
2026-05-07 | 공급업체가 udisks 2.11.2 수정 예정임을 표시 |
| 연구자 | GitHub | 역할 |
|---|---|---|
| Azizcan Daştan | azqzazq1 | 발견, 분석, PoC 개발, 공급업체 조정 |
| Özlem Ozan | oz7oz7 | 연구 협업 및 공개 크레딧 |