
PackageKit의 TOCTOU 레이스 컨디션(CVE-2026-41651)을 대상으로 하는 로컬 권한 상승 익스플로잇입니다. polkit 우회 및 상태 조작을 통해 Linux 시스템에서 비특권 사용자에서 root로 권한을 상승시킵니다.
PackageKit 데몬을 대상으로 하는 로컬 권한 상승 익스플로잇입니다.
TOCTOU 레이스 컨디션 취약점을 통해 권한이 없는 로컬 사용자에서root로 권한을 상승시킵니다.
CVE-2026-41651(Pack2TheRoot라고도 알려짐)은 많은 Linux 배포판에서 패키지 관리 추상화를 위해 사용되는 시스템 서비스인 PackageKit의 심각한 TOCTOU (Time-Of-Check to Time-Of-Use) 레이스 컨디션 취약점입니다.
이 취약점으로 인해 권한이 없는 로컬 사용자가 특정 조건에서 PackageKit 트랜잭션 상태를 조작하고 권한 부여 검사를 우회할 수 있습니다.
로컬 접근 권한을 가진 공격자는 다음을 수행할 수 있습니다:
root로 실행polkit 권한 부여 동작 우회| 구성 요소 | 취약한 버전 | 수정된 버전 |
|---|---|---|
| PackageKit | 1.0.2 – 1.3.4 | 1.3.5 |
문제는 src/pk-transaction.c 내부의 여러 로직 결함에서 비롯됩니다.
Attacker (unprivileged) packagekitd (root)
│ │
├── 1. InstallFiles(SIMULATE) ───────► │ polkit bypassed → state = READY
│ │ queued async dispatch
│
├── 2. InstallFiles(payload) ─────────► │ cached flags overwritten
│ │ invalid state transition ignored
│
│ [dispatch occurs] │
│ │ payload processed as root
│ │ maintainer scripts executed
│
└────────────────────────────────────► │ privilege escalation achieved
필요한 개발 라이브러리를 설치합니다:
sudo apt update
sudo apt install libglib2.0-dev
git clone https://github.com/Lutfifakee-Project/CVE-2026-41651.git
cd CVE-2026-41651
gcc -o exploit CVE-2026-41651.c \
`pkg-config --cflags --libs glib-2.0 gio-2.0` \
-Wall
권한이 없는 사용자로 실행합니다.
./exploit
______ ______ ___ ___ ___ ____ ___________ _______
/ ___/ | / / __/___|_ |/ _ \|_ |/ __/____/ / < / __// __< /
/ /__ | |/ / _//___/ __// // / __// _ \/___/_ _/ / _ \/__ \/ /
\___/ |___/___/ /____/\___/____/\___/ /_//_/\___/____/_/
CVE-2026-41651 - PackageKit TOCTOU Local Privilege Escalation
═══════════════════════════════════════════════════════════════════
[*] Building packages...
[*] Starting race condition...
[*] Waiting for dispatch...
[*] Polling for payload...
[+] SUCCESS — privilege escalation completed
pkcon --version
또는:
dpkg -l | grep packagekit
1.0.2 – 1.3.41.3.5 이상sudo apt update
sudo apt upgrade packagekit
공식 릴리스:
이 저장소는 다음 용도로만 제공됩니다:
저자는 이 프로젝트로 인한 오용, 불법 활동 또는 손상에 대해 책임을 지지 않습니다.
소유하지 않았거나 테스트에 대한 명시적 허가를 받지 않은 시스템에 이 소프트웨어를 사용하지 마십시오.
| 버그 | 위치 | 설명 |
|---|
| BUG 1 | Line 4036 | InstallFiles()가 적절한 상태 검증 없이 캐시된 트랜잭션 플래그와 경로를 덮어씀 |
| BUG 2 | Lines 876–881 | pk_transaction_set_state()가 이전 상태로의 전환을 자동으로 거부함 |
| BUG 3 | Lines 2273–2277 | pk_transaction_run()이 권한 부여가 아닌 디스패치 시점에 캐시된 플래그를 읽음 |
| BYPASS | Lines 2893–2900 | SIMULATE 플래그(0x4)가 polkit 권한 부여 검사를 건너뜀 |