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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2026-65320-fastcore — CVE-2026-65320 का दस्तावेज़ीकरण करता है, जो fastcore के untar_dir() में एक tar-slip पथ ट्रैवर्सल है, जिसमें मनमानी फ़ाइल लेखन और कोड निष्पादन को प्रदर्शित करने वाला एक हानिरहित proof-of-concept शामिल है। | Kitploit
उपकरण/GitHubGitHub/rahulreddykarne/cve-2026-65320-fastcore
भेद्यता विश्लेषणकोड विश्लेषणशोषणवेब एप्लिकेशन शोषणपेपर और शोधलर्निंग और शिक्षा
GitHubrahulreddykarne/cve-2026-65320-fastcore

CVE-2026-65320-fastcore

CVE-2026-65320 का दस्तावेज़ीकरण करता है, जो fastcore के untar_dir() में एक tar-slip पथ ट्रैवर्सल है, जिसमें मनमानी फ़ाइल लेखन और कोड निष्पादन को प्रदर्शित करने वाला एक हानिरहित proof-of-concept शामिल है।

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

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

सभी देखें →

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

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

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

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

CVE-2026-65320: untar_dir() के माध्यम से fastcore में पाथ ट्रैवर्सल (Tar Slip)

गंभीरता: क्रिटिकल, CVSS 3.1 9.8

वेक्टर (v3.1): CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

प्रभावित: fastcore <= 2.2.30

ठीक किया गया: लेखन के समय तक ठीक नहीं किया गया

CWE: CWE-22 (किसी पथनाम का प्रतिबंधित निर्देशिका तक अनुचित सीमितीकरण, 'पाथ ट्रैवर्सल')

घटक: fastcore.xtras.untar_dir() → fastcore.xtras._unpack() → shutil.unpack_archive()

उच्च-जोखिम रनटाइम: Python < 3.14 (Python 3.14 सुरक्षित data tar फ़िल्टर को डिफ़ॉल्ट बनाता है)

रिपोर्ट किया गया: Rahul Karne द्वारा

CNA: VulnCheck


सारांश

fastcore.xtras.untar_dir(fname, dest) एक प्रलेखित हेल्पर है जो किसी आर्काइव को "dest में" अनटार करता है।

आंतरिक रूप से, यह आर्काइव को मानक लाइब्रेरी के shutil.unpack_archive() को बिना किसी एक्सट्रैक्शन फ़िल्टर के, आर्काइव सदस्य पथों को सत्यापित किए बिना, और बिना किसी एक्सट्रैक्शन-पश्चात कंटेनमेंट जाँच के सौंप देता है।

परिणामस्वरूप, एक TAR आर्काइव जिसके सदस्यों में ../ ट्रैवर्सल अनुक्रम या निरपेक्ष पथ होते हैं, उस निर्देशिका के बाहर फ़ाइलें लिख सकता है जिसमें कॉलर ने fastcore से एक्सट्रैक्ट करने के लिए कहा था।

एक कॉलर जो उचित रूप से अपेक्षा करता है कि untar_dir(fname, dest) सब कुछ dest तक सीमित रखेगा, उसे इसके बजाय प्रक्रिया जहाँ भी लिख सकती है वहाँ मनमाना फ़ाइल लेखन मिलता है।


प्रभाव

untar_dir() को कॉल करने वाली प्रक्रिया के अधिकार के अंतर्गत मनमाना फ़ाइल लेखन।

इस पर निर्भर करते हुए कि क्या अधिलेखित किया जाता है, इसके परिणामस्वरूप हो सकता है:

  • कोड निष्पादन — किसी Python फ़ाइल को अधिलेखित करना जिसे एप्लिकेशन बाद में आयात करता है, जैसे कि प्लगइन, स्टार्टअप हुक, या आयात-योग्य मॉड्यूल, या किसी फ़ाइल को ऑटो-लोडेड स्थान में डालना।
  • डेटा / कॉन्फ़िगरेशन छेड़छाड़ — कॉन्फ़िगरेशन फ़ाइलों, क्रेडेंशियल्स, या एप्लिकेशन डेटा को अधिलेखित करना।
  • सेवा-अस्वीकृति — उन फ़ाइलों को भ्रष्ट करना जिन पर सेवा निर्भर करती है।

प्रूफ़ ऑफ़ कॉन्सेप्ट पूरी write → import → code-execution श्रृंखला को शुरू से अंत तक प्रदर्शित करता है, पूरी तरह से एक हानिरहित डेमो निर्देशिका के अंदर।


पहुँच

fastcore पूरे fast.ai पारिस्थितिकी तंत्र में एक मूलभूत निर्भरता है, जिसमें शामिल हैं:

  • fastai
  • nbdev
  • ghapi
  • अन्य संबंधित पैकेज

इसे प्रति माह करोड़ों डाउनलोड मिलते हैं।

untar_dir() सामान्य "एक आर्काइव डाउनलोड करें, फिर उसे अनपैक करें" वर्कफ़्लो के पीछे का एक्सट्रैक्शन प्रिमिटिव है, जो fastai के untar_data के समान सामान्य पैटर्न का अनुसरण करता है।

कोई भी कोड पथ जो untar_dir() को ऐसा आर्काइव देता है जिसकी सामग्री पूरी तरह से विश्वसनीय नहीं है, उजागर है।


तकनीकी विवरण

कमज़ोर कोड fastcore/xtras.py में मौजूद है:

def _unpack(fname, out):
    import shutil
    shutil.unpack_archive(str(fname), str(out))   # <-- no filter, no validation
    ls = out.ls()
    return ls[0] if len(ls) == 1 else out


def untar_dir(fname, dest, rename=False, overwrite=False, uid=-1, gid=-1):
    "untar `file` into `dest` ..."
    import tempfile, shutil
    dest = Path(dest)

    with tempfile.TemporaryDirectory() as d:
        out = Path(d) / remove_suffix(Path(fname).stem, '.tar')
        out.mkdir()

        ...

        src = _unpack(fname, out)      # extraction escapes `out` here

        ...

        shutil.move(str(src), dest)

        ...

        return dest

untar_dir() एक आंतरिक अस्थायी एक्सट्रैक्शन निर्देशिका बनाता है:

<tempdir>/<random>/<archive-stem>/

फिर यह _unpack() को कॉल करता है, जो आर्काइव को सीधे आगे भेजता है:

shutil.unpack_archive()

TAR आर्काइव के लिए, यह अंततः tarfile.extractall() को कॉल करता है।

Python < 3.14 पर, डिफ़ॉल्ट एक्सट्रैक्शन व्यवहार fully_trusted है, जिसका अर्थ है कि ट्रैवर्सल सदस्यों को मान्य किया जा सकता है।

उदाहरण के लिए, ऐसा आर्काइव सदस्य:

../../../some/other/dir/file

एक्सट्रैक्शन निर्देशिका के सापेक्ष लिखा जाता है और इसलिए उससे बाहर निकल सकता है।

fastcore में कुछ भी नहीं है जो:

  • जहाँ समर्थित हो वहाँ filter="data" पास करता हो।
  • निरपेक्ष पथों को अस्वीकार करता हो।
  • ड्राइव-लेटर पथों को अस्वीकार करता हो।
  • UNC पथों को अस्वीकार करता हो।
  • .. पथ घटकों को अस्वीकार करता हो।
  • सिमलिंक या हार्डलिंक सदस्यों को अस्वीकार करता हो।
  • सफलता लौटाने से पहले सत्यापित करता हो कि प्रत्येक एक्सट्रैक्ट किया गया पथ इच्छित एक्सट्रैक्शन रूट के अंतर्गत ही रहा।

मूल कारण

untar_dir() shutil.unpack_archive() को ऐसे मानता है जैसे वह एक सुरक्षित, सैंडबॉक्स्ड आर्काइव एक्सट्रैक्टर हो।

यह नहीं है।

Python की मानक लाइब्रेरी प्रलेखन चेतावनी देता है कि अविश्वसनीय आर्काइव को एक्सट्रैक्ट करने से अनुरोधित गंतव्य के बाहर फ़ाइलें बन सकती हैं और TAR आर्काइव के लिए सुरक्षित एक्सट्रैक्शन फ़िल्टरिंग की सिफ़ारिश करता है।

fastcore न तो उपयुक्त एक्सट्रैक्शन फ़िल्टर पास करता है और न ही उन Python संस्करणों के लिए समकक्ष कंटेनमेंट गार्ड लागू करता है जिनका यह समर्थन करता है।

यह untar_dir() के कॉलरों को इस सुरक्षा-संवेदनशील व्यवहार के बारे में चेतावनी भी नहीं देता है।


विशेष रूप से TAR पथ क्यों

TAR सदस्यों में मनमाना पथ स्ट्रिंग्स हो सकते हैं।

प्रभावित Python संस्करणों पर, tarfile.extractall() डिफ़ॉल्ट रूप से .. ट्रैवर्सल अनुक्रमों को स्वचालित रूप से निष्प्रभावी नहीं करता है।

इसलिए fastcore की अस्थायी एक्सट्रैक्शन निर्देशिका के सापेक्ष एक ट्रैवर्सल सदस्य लिखना उस निर्देशिका से बाहर निकलने और जहाँ भी प्रक्रिया को लिखने की अनुमति है वहाँ लिखने के लिए पर्याप्त है।

एक विश्वसनीय प्रिमिटिव सापेक्ष ट्रैवर्सल है जैसे:

../../../target/file

यह वह तकनीक है जिसका उपयोग प्रूफ़ ऑफ़ कॉन्सेप्ट में किया गया है।


नेटवर्क पर डिलीवरी

खतरनाक इनपुट आर्काइव सामग्री है, न कि डेवलपर द्वारा चुना गया गंतव्य पथ।

आर्काइव अक्सर बाहरी या अर्ध-विश्वसनीय स्थानों से प्राप्त किए जाते हैं, जिनमें शामिल हैं:

  • मॉडल बंडल
  • डेटासेट आर्काइव
  • प्लगइन बंडल
  • CI/CD आर्टिफ़ैक्ट
  • उपयोगकर्ता अपलोड
  • पार्टनर अपलोड
  • रिमोट HTTP डाउनलोड

इसलिए कोई भी सेवा या टूल जो किसी अविश्वसनीय या अर्ध-विश्वसनीय स्रोत से आर्काइव डाउनलोड करता है और बाद में untar_dir() का उपयोग करके उसे संसाधित करता है, पहुँच योग्य हो सकता है।

PoC में एक वेरिएंट भी शामिल है जो इस डिलीवरी पथ को प्रदर्शित करने के लिए हमलावर-नियंत्रित HTTP एंडपॉइंट से तैयार किए गए आर्काइव को सर्व करता है।


शोषण की पूर्व-शर्तें

सफल शोषण के लिए आवश्यक है:

  1. एप्लिकेशन ऐसे आर्काइव पर fastcore.xtras.untar_dir() को कॉल करता है जिसकी सामग्री हमलावर-प्रभावित है, जैसे कि अपलोड किया गया, डाउनलोड किया गया, या अन्यथा अविश्वसनीय आर्काइव।

  2. रनटाइम Python < 3.14 का उपयोग करता है, या कोई अन्य कॉन्फ़िगरेशन जहाँ सुरक्षित TAR एक्सट्रैक्शन फ़िल्टर लागू नहीं किया जाता है।

  3. मनमाना फ़ाइल लेखन से कोड निष्पादन तक बढ़ाने के लिए, प्रक्रिया बाद में ट्रैवर्सल द्वारा पहुँच योग्य स्थान से कोई फ़ाइल आयात या लोड करती है, जैसे:

    • एक प्लगइन निर्देशिका
    • एक आयात-योग्य Python मॉड्यूल
    • एक स्टार्टअप हुक
    • कोई अन्य ऑटो-लोडेड फ़ाइल स्थान

मनमाना फ़ाइल लेखन और कॉन्फ़िगरेशन/डेटा संशोधन के लिए केवल शर्तें 1 और 2 आवश्यक हैं।


प्रूफ़ ऑफ़ कॉन्सेप्ट

poc_fastcore_cna_demo.py वास्तविक fastcore.xtras.untar_dir() API को आमंत्रित करता है।

प्रदर्शन जानबूझकर हानिरहित है।

PoC द्वारा बनाई गई प्रत्येक फ़ाइल एक ही डेमो निर्देशिका के अंदर रहती है जिसे निर्दिष्ट किया गया है:

--demo-root

PoC वास्तविक सिस्टम फ़ाइलों को संशोधित नहीं करता है और क्लाउड सेवाओं या क्रेडेंशियल्स तक पहुँच नहीं करता है।

PoC क्या करता है

  1. _unpack() और untar_dir() के लिए पर्यावरण विवरण और कमज़ोर स्रोत कोड प्रिंट करता है।

  2. एक प्रदर्शन लेआउट बनाता है जिसमें शामिल हैं:

    • एक इच्छित एक्सट्रैक्शन रूट
    • एक अलग एप्लिकेशन निर्देशिका:
      service_app/plugins/
      
  3. बनाता है:

attacker_supplied_upload.tar

जिसमें इच्छित एक्सट्रैक्शन रूट के बाहर इंगित करने के लिए डिज़ाइन किए गए आर्काइव सदस्य शामिल हैं, जिनमें ट्रैवर्सल सदस्य और शामिल हैं:

service_app/plugins/startup_hook.py
  1. एक सिम्युलेटेड अपलोड हैंडलर को कॉल करता है:
टूल डाउनलोड करें