
# ماسح أمان ملفات Python Wheel — افحص ملفات .whl بحثًا عن مشكلات أمنية قبل التثبيت. يكتشف اجتياز المسار (CVE-2026-24049)، العبث بسجل RECORD، تظليل الأوامر، الأسرار، القنابل المضغوطة. بدون أي تبعيات.
ماسح أمان ملفات Python Wheel — افحص ملفات .whl بحثًا عن مشكلات أمنية قبل التثبيت.
مدفوع بثغرات CVE حديثة في معالجة حزم Python:
بدون أي تبعيات. ملف واحد. Python 3.9+.
pip-audit يتحقق مما إذا كانت حزمك تحتوي على CVEs معروفة. wheelaudit يتحقق مما إذا كان ملف wheel نفسه خبيثًا بنيويًا — اجتياز المسار، تجزئات RECORD معدلة، أسرار مدمجة، تظليل الأوامر، قنابل zip، والمزيد. إنه الفرق بين "هل هذه الحزمة معروفة بأنها سيئة؟" و"هل تبدو هذه الحزمة سيئة؟"
شغّله قبل pip install. شغّله في CI. شغّله على حزم wheel التي نزّلتها ولا تثق بها.
# فقط انسخ الملف
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
# افحص ملف wheel
python3 wheelaudit.py package-1.0.0-py3-none-any.whl
# افحص عدة ملفات wheel
python3 wheelaudit.py *.whl
# افحص مجلدًا يحتوي على ملفات wheel
python3 wheelaudit.py ./wheels/
# وضع CI: الخروج برمز 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
| القاعدة | الخطورة | الوصف |
|---|---|---|
| WH01 | حرجة | اجتياز المسار في أسماء الملفات (../، مسارات مطلقة، بايتات فارغة) |
| WH02 | حرجة-عالية | سلامة ملف RECORD (مفقود، تجزئات معدلة، ملفات غير مدرجة) |
| WH03 | عالية-منخفضة | أنواع ملفات مشبوهة (ملفات تنفيذية، pickle، أرشيفات، ملفات مخفية) |
| WH04 | حرجة | تظليل أوامر نقطة الدخول (pip، python، sudo، إلخ.) |
| WH05 | حرجة | أسرار مدمجة (مفاتيح API، رموز، مفاتيح خاصة) |
| WH06 | حرجة-منخفضة | مشكلات صلاحيات الملفات (SUID/SGID، قابلة للكتابة عالميًا، بيانات تنفيذية) |
| WH07 | عالية-متوسطة | اتساق البيانات الوصفية (METADATA/WHEEL مفقود، مشكلات بنيوية) |
| WH08 | عالية | كشف قنبلة zip (نسب ضغط متطرفة، أرشيفات ضخمة الحجم) |
| WH09 | عالية-متوسطة | الامتثال لـ PEP 427 (تنسيق اسم الملف، عدم تطابق الاسم/الإصدار) |
| WH10 | حرجة | تضارب مساحات الأسماء (تظليل وحدات stdlib) |
| WH11 | عالية-متوسطة | أنماط كود خبيثة (eval، exec، os.system، الوصول إلى بيانات الاعتماد) |
| WH12 | متوسطة-منخفضة | مشكلات ملفات البيانات (سكربتات في .data/، ملفات ضخمة الحجم) |
| WH13 | عالية | التلاعب بـ CRC32 (نمط تجاوز CVE-2025-1889) |
| WH14 | عالية | عدم تطابق الامتداد (ثنائي ELF/PE متنكر كـ .py/.txt) |
| WH15 | عالية-متوسطة | روابط رمزية وأسماء ملفات مكررة |
حرجة (20 نقطة): اجتياز المسار، بتات SUID، أسرار مدمجة، تظليل الأوامر، تظليل stdlib، التلاعب بتجزئات RECORD
عالية (12 نقطة): RECORD مفقود، ملفات تنفيذية مشبوهة، قنابل zip، التلاعب بـ CRC، عدم تطابق الامتداد، روابط رمزية، أنماط جمع بيانات الاعتماد
متوسطة (6 نقاط): مسارات بشرطة مائلة عكسية، بيانات وصفية مفقودة، مشكلات PEP 427، أنماط subprocess/الشبكة
منخفضة (نقطتان): ملفات مخفية، ملفات بيانات تنفيذية، ملفات كبيرة
معلوماتية (0 نقاط): امتدادات أصلية مشروعة، الوصول إلى متغيرات البيئة
============================================================
requests 2.32.5 — B (88/100)
============================================================
[عالية]
WH11 نمط مشبوه: __import__() — استيراد ديناميكي (requests/packages.py)
الملخص: 1 عالية
============================================================
evil-pip 99.0.0 — F (0/100)
============================================================
[حرجة]
WH01 اجتياز المسار في أرشيف wheel (../../../etc/crontab)
WH04 نقطة الدخول تظلل أمر النظام: 'pip'
WH04 نقطة الدخول تظلل أمر النظام: 'python'
WH05 سر مدمج: رمز وصول شخصي لـ GitHub (pip/__init__.py)
[عالية]
WH02 ملف غير مدرج في RECORD (../../../etc/crontab)
WH03 نوع ملف مشبوه: .exe (pip/payload.exe)
WH11 نمط مشبوه: os.system() — تنفيذ أوامر shell
WH11 نمط مشبوه: استدعاء eval() — تنفيذ كود ديناميكي
WH11 نمط مشبوه: مرجع إلى دليل SSH
الملخص: 4 حرجة، 5 عالية، 2 متوسطة، 2 منخفضة
{
"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 كأرشيف zip غير موثوق. يقوم بـ:
لا يتم استخراج أي ملفات إلى القرص. كل التحليل يتم في الذاكرة.
| الميزة | wheelaudit | pip-audit | safety | GuardDog |
|---|---|---|---|---|
| بدون تبعيات | ✅ | ❌ | ❌ | ❌ |
| يفحص محتويات wheel | ✅ | ❌ | ❌ | ✅ |
| كشف اجتياز المسار | ✅ | ❌ | ❌ | ❌ |
| سلامة RECORD | ✅ | ❌ | ❌ | ❌ |
| قاعدة بيانات CVE | ❌ | ✅ | ✅ | ❌ |
| العمل دون اتصال | ✅ | ❌ | ❌ | ❌ |
| Python 3.9+ | ✅ | ✅ | ✅ | ✅ |
يكمل wheelaudit أداة pip-audit/safety — فهي تتحقق من الثغرات المعروفة، بينما يتحقق wheelaudit من ملف wheel نفسه.
MIT