
# पायथन व्हील फ़ाइल सुरक्षा स्कैनर — इंस्टॉलेशन से पहले .whl फ़ाइलों में सुरक्षा समस्याओं की जाँच करें। पाथ ट्रैवर्सल (CVE-2026-24049), RECORD छेड़छाड़, कमांड शैडोइंग, सीक्रेट्स, ज़िप बम का पता लगाता है। शून्य निर्भरताएँ।
Python व्हील फ़ाइल सुरक्षा स्कैनर — इंस्टॉल करने से पहले .whl फ़ाइलों में सुरक्षा समस्याओं की जाँच करें।
Python व्हील हैंडलिंग में हाल के CVEs से प्रेरित:
शून्य निर्भरताएँ। एकल फ़ाइल। Python 3.9+।
pip-audit जाँचता है कि आपके पैकेजों में ज्ञात CVEs हैं या नहीं। wheelaudit जाँचता है कि व्हील फ़ाइल स्वयं संरचनात्मक रूप से दुर्भावनापूर्ण है या नहीं — पाथ ट्रैवर्सल, छेड़छाड़ किए गए RECORD हैश, एम्बेडेड रहस्य, कमांड शैडोइंग, ज़िप बम, और बहुत कुछ। यह "क्या यह पैकेज ज्ञात-खराब है?" और "क्या यह पैकेज खराब दिखता है?" के बीच का अंतर है।
इसे pip install से पहले चलाएँ। इसे CI में चलाएँ। इसे डाउनलोड किए गए व्हील्स पर चलाएँ जिन पर आप भरोसा नहीं करते।
# बस फ़ाइल कॉपी करें
curl -O https://raw.githubusercontent.com/kriskimmerle/wheelaudit/main/wheelaudit.py
chmod +x wheelaudit.py
# या रिपो क्लोन करें
git clone https://github.com/kriskimmerle/wheelaudit.git
cd wheelaudit
# व्हील फ़ाइल स्कैन करें
python3 wheelaudit.py package-1.0.0-py3-none-any.whl
# कई व्हील्स स्कैन करें
python3 wheelaudit.py *.whl
# व्हील्स की निर्देशिका स्कैन करें
python3 wheelaudit.py ./wheels/
# CI मोड: स्कोर थ्रेशोल्ड से नीचे होने पर exit 1
python3 wheelaudit.py package.whl --check --min-score 80
# टूलिंग एकीकरण के लिए JSON आउटपुट
python3 wheelaudit.py package.whl --json
# विवरण के साथ वर्बोज़ मोड
python3 wheelaudit.py package.whl -v
# गंभीरता से फ़िल्टर करें
python3 wheelaudit.py package.whl --severity high
# विशिष्ट नियमों को अनदेखा करें
python3 wheelaudit.py package.whl --ignore WH11
# stdin से पढ़ें
cat package.whl | python3 wheelaudit.py --stdin
| Rule | Severity | Description |
|---|---|---|
| WH01 | CRITICAL | फ़ाइलनामों में पाथ ट्रैवर्सल (../, निरपेक्ष पथ, null बाइट्स) |
| WH02 | CRITICAL-HIGH | RECORD फ़ाइल अखंडता (गायब, छेड़छाड़ किए गए हैश, अनसूचीबद्ध फ़ाइलें) |
| WH03 | HIGH-LOW | संदिग्ध फ़ाइल प्रकार (एक्ज़ीक्यूटेबल, pickle, आर्काइव, छिपी फ़ाइलें) |
| WH04 | CRITICAL | एंट्री पॉइंट कमांड शैडोइंग (pip, python, sudo, आदि) |
| WH05 | CRITICAL | एम्बेडेड रहस्य (API कुंजियाँ, टोकन, निजी कुंजियाँ) |
| WH06 | CRITICAL-LOW | फ़ाइल अनुमति समस्याएँ (SUID/SGID, विश्व-लेखन योग्य, एक्ज़ीक्यूटेबल डेटा) |
| WH07 | HIGH-MEDIUM | मेटाडेटा स्थिरता (गायब METADATA/WHEEL, संरचनात्मक समस्याएँ) |
| WH08 | HIGH | ज़िप बम पहचान (अत्यधिक संपीड़न अनुपात, अत्यधिक बड़े आर्काइव) |
| WH09 | HIGH-MEDIUM | PEP 427 अनुपालन (फ़ाइलनाम प्रारूप, नाम/संस्करण बेमेल) |
| WH10 | CRITICAL | नेमस्पेस टकराव (stdlib मॉड्यूल शैडोइंग) |
| WH11 | HIGH-MEDIUM | दुर्भावनापूर्ण कोड पैटर्न (eval, exec, os.system, क्रेडेंशियल एक्सेस) |
| WH12 | MEDIUM-LOW | डेटा फ़ाइल समस्याएँ (.data/ में स्क्रिप्ट, अत्यधिक बड़ी फ़ाइलें) |
| WH13 | HIGH | CRC32 हेरफेर (CVE-2025-1889 बायपास पैटर्न) |
| WH14 | HIGH | एक्सटेंशन बेमेल (ELF/PE बाइनरी .py/.txt के रूप में छिपी) |
| WH15 | HIGH-MEDIUM | सिमलिंक और डुप्लिकेट फ़ाइलनाम |
CRITICAL (20 अंक): पाथ ट्रैवर्सल, SUID बिट्स, एम्बेडेड रहस्य, कमांड शैडोइंग, stdlib शैडोइंग, RECORD हैश छेड़छाड़
HIGH (12 अंक): गायब RECORD, संदिग्ध एक्ज़ीक्यूटेबल, ज़िप बम, CRC हेरफेर, एक्सटेंशन बेमेल, सिमलिंक, क्रेडेंशियल हार्वेस्टिंग पैटर्न
MEDIUM (6 अंक): बैकस्लैश पथ, गायब मेटाडेटा, PEP 427 समस्याएँ, subprocess/नेटवर्क पैटर्न
LOW (2 अंक): छिपी फ़ाइलें, एक्ज़ीक्यूटेबल डेटा फ़ाइलें, बड़ी फ़ाइलें
INFO (0 अंक): वैध नेटिव एक्सटेंशन, पर्यावरण चर एक्सेस
============================================================
requests 2.32.5 — B (88/100)
============================================================
[HIGH]
WH11 संदिग्ध पैटर्न: __import__() — डायनामिक इम्पोर्ट (requests/packages.py)
सारांश: 1 high
============================================================
evil-pip 99.0.0 — F (0/100)
============================================================
[CRITICAL]
WH01 व्हील आर्काइव में पाथ ट्रैवर्सल (../../../etc/crontab)
WH04 एंट्री पॉइंट सिस्टम कमांड को शैडो करता है: 'pip'
WH04 एंट्री पॉइंट सिस्टम कमांड को शैडो करता है: 'python'
WH05 एम्बेडेड रहस्य: GitHub पर्सनल एक्सेस टोकन (pip/__init__.py)
[HIGH]
WH02 फ़ाइल RECORD में सूचीबद्ध नहीं है (../../../etc/crontab)
WH03 संदिग्ध फ़ाइल प्रकार: .exe (pip/payload.exe)
WH11 संदिग्ध पैटर्न: os.system() — शेल कमांड निष्पादन
WH11 संदिग्ध पैटर्न: eval() कॉल — डायनामिक कोड निष्पादन
WH11 संदिग्ध पैटर्न: SSH निर्देशिका संदर्भ
सारांश: 4 critical, 5 high, 2 medium, 2 low
{
"version": "0.1.0",
"results": [
{
"path": "package-1.0.0-py3-none-any.whl",
"score": 88,
"grade": "B",
"metadata": {
"name": "package",
"version": "1.0.0",
"file_count": 15,
"total_uncompressed_bytes": 45000
},
"findings": [
{
"rule": "WH11",
"severity": "high",
"message": "Suspicious pattern: __import__() — dynamic import",
"file": "package/compat.py"
}
],
"summary": {
"high": 1
}
}
]
}
- name: Audit wheel
run: |
python3 wheelaudit.py dist/*.whl --check --min-score 80
pip download some-package --no-deps -d /tmp/wheels
python3 wheelaudit.py /tmp/wheels/*.whl --check
pip install /tmp/wheels/*.whl
wheelaudit हर .whl फ़ाइल को एक अविश्वसनीय ज़िप आर्काइव के रूप में मानता है। यह:
कोई फ़ाइल डिस्क पर नहीं निकाली जाती। सभी विश्लेषण मेमोरी में होता है।
| Feature | wheelaudit | pip-audit | safety | GuardDog |
|---|---|---|---|---|
| Zero deps | ✅ | ❌ | ❌ | ❌ |
| Scans wheel contents | ✅ | ❌ | ❌ | ✅ |
| Path traversal detection | ✅ | ❌ | ❌ | ❌ |
| RECORD integrity | ✅ | ❌ | ❌ | ❌ |
| CVE database | ❌ | ✅ | ✅ | ❌ |
| Offline operation | ✅ | ❌ | ❌ | ❌ |
| Python 3.9+ | ✅ | ✅ | ✅ | ✅ |
wheelaudit pip-audit/safety का पूरक है — वे ज्ञात भेद्यताओं की जाँच करते हैं, wheelaudit व्हील की स्वयं जाँच करता है।
MIT