Skip to content
KitploitKITPLOIT
उपकरणएक्सप्लॉइटब्लॉग
Log in
जमा करें
उपकरणएक्सप्लॉइटब्लॉग
जमा करें

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
cve-2026-43687 — macOS NFS क्लाइंट access-cache रेस (CVE-2026-43687) के लिए रिवर्स इंजीनियरिंग नोट्स और एक स्व-निहित PoC, जिसमें kext disassembly diff और dtrace रेस कैप्चर शामिल है। | Kitploit
उपकरण/GitHubGitHub/jvidhan/cve-2026-43687
मेमोरी फोरेंसिकभेद्यता विश्लेषणशोषणरिवर्स इंजीनियरिंगबाइनरी विश्लेषणपेपर और शोधलर्निंग और शिक्षा
GitHubjvidhan/cve-2026-43687

cve-2026-43687

macOS NFS क्लाइंट access-cache रेस (CVE-2026-43687) के लिए रिवर्स इंजीनियरिंग नोट्स और एक स्व-निहित PoC, जिसमें kext disassembly diff और dtrace रेस कैप्चर शामिल है।

रिपॉजिटरी देखें
2823 दिन पहलेअभी तक समीक्षित नहीं

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

सभी देखें →

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

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

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

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

CVE-2026-43687 — रिवर्स इंजीनियरिंग नोट्स और पुनरुत्पादन

macOS NFS क्लाइंट एक्सेस-कैश रेस (CVE-2026-43687) की स्वतंत्र रिवर्स इंजीनियरिंग, साथ ही एक कार्यशील PoC जो रेस को ट्रिगर करता है और dtrace के साथ इसे लाइव कैप्चर करता है।

यह बग _nfs_vnop_access में nfsnode एक्सेस-कैश पॉइंटर का एक अनसिंक्रोनाइज़्ड रीड है। एक दुर्भावनापूर्ण NFSv3 सर्वर एक्सेस कैश को पुनः आवंटित करने के लिए प्रेरित कर सकता है, जबकि एक अन्य थ्रेड इसे पढ़ रहा हो, जिससे एक कर्नेल मेमोरी डिस्क्लोज़र उत्पन्न होता है जिसे एक शत्रुतापूर्ण सर्वर प्रभावित कर सकता है। macOS 26.7 इसे nfsnode+0x158 पर एक lck_rw_t डालकर और कैश रीड के आसपास इसे शेयर्ड लेकर ठीक करता है।


एक नज़र में CVE

FieldValue
CVECVE-2026-43687
Componentcom.apple.filesystems.nfs (_nfs_vnop_access)
AffectedmacOS Tahoe 26.6 और पहले, iOS 26.x और पहले
Patched inmacOS Tahoe 26.7, macOS Golden Gate 27, iOS 26.7, iOS 27
Advisory impact"Connecting to a malicious NFS server may disclose kernel memory."
CVSS v3.16.5 (Medium) — AV:N/AC:L/PR:N/UI:R/S:U/C:H/I:N/A:N
Reported byR4mbb of KRsecurity और Peter Malone (Apple की एडवाइज़री के अनुसार)

यह राइटअप क्यों मौजूद है

CVE-2026-43687 के लिए Apple की एडवाइज़री प्रभाव और पैच संस्करण का दस्तावेज़ीकरण करती है। यह तकनीकी तंत्र का दस्तावेज़ीकरण नहीं करती:

  • nfsnode में कौन सा फ़ील्ड रेस होता है
  • दूसरा रीड कहाँ होता है
  • फिक्स उस विशिष्ट ऑफ़सेट पर लॉक क्यों डालता है
  • PoC को stat(2) के बजाय access(2) का उपयोग क्यों करना चाहिए
  • कुछ NFSv3 रिप्लाई शेप माउंट को चुपचाप क्यों तोड़ देते हैं, भले ही वायर फ़ॉर्मेट लगभग सही हो

लेखन के समय कोई सार्वजनिक तकनीकी राइटअप नहीं मिला। यह रिपॉज़िटरी 26.6 और 26.7 के बीच NFS kext के स्वतंत्र रिवर्स इंजीनियरिंग विश्लेषण और एक कार्यशील PoC के साथ उस अंतराल को भरती है जो लाइव टारगेट पर रेस को पुनरुत्पादित करता है।

यह एक खोज का दावा नहीं है। CVE की रिपोर्ट R4mbb और Peter Malone ने की और Apple ने इसे पैच किया। यहाँ योगदान तकनीकी विश्लेषण और पुनरुत्पादन है।


भेद्यता का सारांश

NFS क्लाइंट में _nfs_vnop_access nfsnode+0x158 पढ़ता है — प्रति-UID एक्सेस-कैश एरे का पॉइंटर — एक ही कॉल के भीतर दो बार, बिना कोई लॉक रखे:

; macOS 26.6, com.apple.filesystems.nfs
fffffe000b52def4   ldr  w8,  [x20, #0x160]     ; count
fffffe000b52def8   cmp  w23, w8
fffffe000b52defc   b.ge ...
fffffe000b52df00   ldr  x8,  [x20, #0x158]     ; cache ptr (read #1)
...
fffffe000b52df98   ldr  x8,  [x20, #0x158]     ; cache ptr (read #2)
fffffe000b52dfb0   ldr  w21, [x9]              ; dereference

राइटर, _nfs_nget, जब भी क्लाइंट सर्वर से एक नया UID देखता है, kalloc_data के साथ एरे को पुनः आवंटित करता है और परिणाम को +0x158 पर संग्रहीत करता है:

fffffe000b52100c   bl   0xfffffe000b6a1dd8    ; kalloc
fffffe000b521010   str  x0,  [x22, #0x158]    ; cache ptr
fffffe000b521018   str  w20, [x22, #0x160]    ; cache count

यदि कोई अन्य थ्रेड रीडर के दो लोड के बीच उसी nfsnode पर _nfs_nget तक पहुँचता है, तो दूसरा लोड नया पॉइंटर लौटाता है जबकि पहला रीड — जो पहले से ही एक ऑफ़सेट की गणना के लिए उपयोग किया गया था — पुराने पर आधारित था। इसके बाद का डीरेफ़रेंस मुक्त कर्नेल हीप से पढ़ता है।

26.7 फिक्स:

fffffe000b9e3064   str  x0,  [x22, #0x168]    ; cache ptr moved
fffffe000b9e306c   str  w28, [x22, #0x170]    ; cache count moved
fffffe000b9e307c   add  x0,  x22, #0x158      ; lock slot
fffffe000b9e3084   bl   _lck_rw_init          ; init RW lock

और _nfs_vnop_access में:

fffffe000b9f0200   add  x0,  x20, #0x158
fffffe000b9f0204   bl   _lck_rw_lock_shared    ; take the lock
fffffe000b9f0208   ldr  x9,  [x20, #0x168]    ; cache pointer
...
fffffe000b9f0230   bl   _lck_rw_unlock_shared  ; release the lock

स्ट्रक्चर लेआउट परिवर्तन:

OffsetmacOS 26.6macOS 26.7
+0x158cache array pointerlck_rw_t
+0x160cache count(part of lock)
+0x168(other)cache array pointer
+0x170(other)cache count

इस रिपॉज़िटरी में क्या है

रिवर्स इंजीनियरिंग

  • 26.6 और 26.7 NFS kexts के बीच _nfs_nget और _nfs_vnop_access का डिसअसेम्बली डिफ — देखें docs/PATCH_DIFF.md
  • रेस किए गए फ़ील्ड की पहचान: 26.6 में nfsnode+0x158
  • फिक्स की पहचान: +0x158 पर lck_rw_t डाला गया, कैश पॉइंटर +0x168 पर स्थानांतरित, रीड के आसपास lck_rw_lock_shared लिया गया
  • सिसकॉल विश्लेषण: access(2) _nfs_vnop_access में प्रवेश करता है; stat(2) _nfs_getattr से होकर जाता है और भेद्य फ़ंक्शन तक कभी नहीं पहुँचता
  • dtrace के साथ रेस की रनटाइम पुष्टि, कॉल के बीच में बदलते कैश पॉइंटर को कैप्चर करना

पूर्ण राइटअप के लिए docs/ANALYSIS.md और एड्रेस तथा लॉग नमूनों के लिए docs/ARTIFACTS.md देखें।

पुनरुत्पादन

  • poc.sh — एक सिंगल-फ़ाइल, स्व-निहित PoC:
    1. पोर्ट 2049 खाली करने के लिए Apple के nfsd को रोकता है
    2. 127.0.0.1 पर एक दुर्भावनापूर्ण NFSv3 सर्वर शुरू करता है जो प्रत्येक रिप्लाई में रिपोर्ट किए गए UID को बदलता है
    3. noac के साथ एक नए माउंटपॉइंट पर एक्सपोर्ट को माउंट करता है
    4. test -r / test -w के माध्यम से access(2) जारी करने वाला प्रति-उपयोगकर्ता हैमर स्पॉन करता है
    5. nfs_vnop_access पर एक dtrace प्रोब अटैच करता है, किसी भी कॉल को रिकॉर्ड करता है जहाँ nfsnode+0x158 कॉल के बीच में बदलता है
    6. रेस काउंट के साथ एक सारांश प्रिंट करता है

यह PoC क्या प्रदर्शित करता है

  • एक दुर्भावनापूर्ण NFSv3 सर्वर प्रत्येक रिप्लाई पर रिपोर्ट किए गए UID को बदलता है
  • पीड़ित का कर्नेल जवाब में एक्सेस-कैश एरे को पुनः आवंटित करता है
  • _nfs_vnop_access में अनसिंक्रोनाइज़्ड रीड एक ही कॉल के दौरान एरे को बदलते हुए देखता है
  • dtrace के माध्यम से उस इंटरलीविंग का लाइव कैप्चर

यह PoC क्या प्रदर्शित नहीं करता

  • हमलावर को दिखाई देने वाला बाइट-स्तरीय कर्नेल मेमोरी लीक
  • कोड एक्ज़ीक्यूशन, प्रिविलेज एस्केलेशन, या पीड़ित पर एक शेल

रेस डिस्क्लोज़र के लिए पूर्व शर्त है। रेस को वास्तविक लीक में बदलने के लिए, एक हमलावर को स्टेल पॉइंटर का उपयोग करते हुए रीडर को देखना होगा और उन बाइट्स को कहीं ऐसी जगह प्रसारित करना होगा जहाँ वे पढ़ सकें। arm64e पर, nfsnode+0x158 पर मान PAC-साइन्ड है और प्रति-बूट कुंजी यूज़रलैंड से उपलब्ध नहीं है, इसलिए अकेले dtrace रेस को देख सकता है लेकिन पॉइंटर को डिकोड नहीं कर सकता। docs/ANALYSIS.md में "Paths tested and ruled out" अनुभाग देखें।

प्रदर्शित प्रभाव रेस ही है — वह सटीक विंडो जिसे 26.7 RW-लॉक फिक्स बंद करता है।


आवश्यकताएँ

टारगेट (पीड़ित) होस्ट

  • macOS 26.6 या पहले (भेद्य कर्नेल)
  • dtrace उपलब्ध (कुछ इंस्टॉल पर SIP समायोजन की आवश्यकता हो सकती है)
  • python3, dscl, mount
  • रूट

अलग हमलावर होस्ट की आवश्यकता नहीं

PoC पूरी तरह से टारगेट पर चलता है। दुर्भावनापूर्ण NFS सर्वर 127.0.0.1 पर बाइंड करता है और माउंट लूपबैक पर होता है। यह PoC को नेटवर्क कॉन्फ़िगरेशन के बिना स्व-निहित और पुनरुत्पादनीय रखता है।


उपयोग

chmod +x poc.sh
sudo ./poc.sh

पर्यावरण चर के माध्यम से वैकल्पिक ट्यूनिंग:

sudo HAMMER_COUNT=30 RUN_SECONDS=600 ./poc.sh

HAMMER_COUNT प्रति-उपयोगकर्ता हैमर थ्रेड्स की संख्या निर्धारित करता है (जो भी nfsuserNNN खाते मौजूद हैं उनका उपयोग करता है, आवश्यकतानुसार उन्हें बनाता है)। RUN_SECONDS dtrace विंडो निर्धारित करता है।

अपेक्षित आउटपुट

[*] ensuring nfsuser accounts exist (UID 201..240)
    nfsuser accounts available: 12
[*] starting evil NFS server on 127.0.0.1:2049
[*] mounting /Users/Shared/nfs_test (with noac)
    mount check: hello.txt statable
[*] spawning up to 12 per-user threads + 1 root loop
    started 12 user threads + 1 root loop
[*] running dtrace for 180s — looking for RACE lines
[*] stopping dtrace
[*] cleaning up

=================== SUMMARY ===================
RACE events caught: 16
टूल डाउनलोड करें