
# Analyseur de sécurité des fichiers Wheel Python — analyse les fichiers .whl pour détecter les problèmes de sécurité avant l'installation. Détecte le traversement de chemin (CVE-2026-24049), la falsification de RECORD, l'ombrage de commandes, les secrets, les bombes zip. Zéro dépendance.
Scanner de sécurité pour fichiers Python Wheel — analysez les fichiers .whl pour détecter des problèmes de sécurité avant l'installation.
Motivé par des CVE récentes dans la gestion des wheels Python :
Zéro dépendance. Fichier unique. Python 3.9+.
pip-audit vérifie si vos paquets ont des CVE connues. wheelaudit vérifie si un fichier wheel est lui-même structurellement malveillant — traversée de chemin, hachages RECORD falsifiés, secrets intégrés, masquage de commandes, bombes zip, et plus encore. C'est la différence entre « ce paquet est-il connu comme dangereux ? » et « ce paquet a-t-il l'air dangereux ? »
Exécutez-le avant pip install. Exécutez-le en CI. Exécutez-le sur des wheels téléchargées auxquelles vous ne faites pas confiance.
# Copiez simplement le fichier
curl -O https://raw.githubusercontent.com/kriskimmerle/wheelaudit/main/wheelaudit.py
chmod +x wheelaudit.py
# Ou clonez le dépôt
git clone https://github.com/kriskimmerle/wheelaudit.git
cd wheelaudit
# Analyser un fichier wheel
python3 wheelaudit.py package-1.0.0-py3-none-any.whl
# Analyser plusieurs wheels
python3 wheelaudit.py *.whl
# Analyser un répertoire de wheels
python3 wheelaudit.py ./wheels/
# Mode CI : sortie 1 si le score est inférieur au seuil
python3 wheelaudit.py package.whl --check --min-score 80
# Sortie JSON pour l'intégration d'outils
python3 wheelaudit.py package.whl --json
# Mode verbeux avec détails
python3 wheelaudit.py package.whl -v
# Filtrer par sévérité
python3 wheelaudit.py package.whl --severity high
# Ignorer des règles spécifiques
python3 wheelaudit.py package.whl --ignore WH11
# Lire depuis stdin
cat package.whl | python3 wheelaudit.py --stdin
| Règle | Sévérité | Description |
|---|---|---|
| WH01 | CRITIQUE | Traversée de chemin dans les noms de fichiers (../, chemins absolus, octets nuls) |
| WH02 | CRITIQUE-ÉLEVÉE | Intégrité du fichier RECORD (manquant, hachages falsifiés, fichiers non répertoriés) |
| WH03 | ÉLEVÉE-FAIBLE | Types de fichiers suspects (exécutables, pickle, archives, fichiers cachés) |
| WH04 | CRITIQUE | Masquage de commandes de point d'entrée (pip, python, sudo, etc.) |
| WH05 | CRITIQUE | Secrets intégrés (clés API, jetons, clés privées) |
| WH06 | CRITIQUE-FAIBLE | Problèmes de permissions de fichiers (SUID/SGID, écriture mondiale, données exécutables) |
| WH07 | ÉLEVÉE-MOYENNE | Cohérence des métadonnées (METADATA/WHEEL manquants, problèmes structurels) |
| WH08 | ÉLEVÉE | Détection de bombes zip (taux de compression extrêmes, archives surdimensionnées) |
| WH09 | ÉLEVÉE-MOYENNE | Conformité PEP 427 (format du nom de fichier, incohérence nom/version) |
| WH10 | CRITIQUE | Collision d'espace de noms (masquage de modules stdlib) |
| WH11 | ÉLEVÉE-MOYENNE | Modèles de code malveillants (eval, exec, os.system, accès aux identifiants) |
| WH12 | MOYENNE-FAIBLE | Problèmes de fichiers de données (scripts dans .data/, fichiers surdimensionnés) |
| WH13 | ÉLEVÉE | Manipulation CRC32 (modèle de contournement CVE-2025-1889) |
| WH14 | ÉLEVÉE | Incohérence d'extension (binaire ELF/PE déguisé en .py/.txt) |
| WH15 | ÉLEVÉE-MOYENNE | Liens symboliques et noms de fichiers en double |
CRITIQUE (20 points) : Traversée de chemin, bits SUID, secrets intégrés, masquage de commandes, masquage stdlib, falsification de hachages RECORD
ÉLEVÉE (12 points) : RECORD manquant, exécutables suspects, bombes zip, manipulation CRC, incohérence d'extension, liens symboliques, modèles de collecte d'identifiants
MOYENNE (6 points) : Chemins avec barres obliques inversées, métadonnées manquantes, problèmes PEP 427, modèles subprocess/réseau
FAIBLE (2 points) : Fichiers cachés, fichiers de données exécutables, fichiers volumineux
INFO (0 points) : Extensions natives légitimes, accès aux variables d'environnement
============================================================
requests 2.32.5 — B (88/100)
============================================================
[ÉLEVÉE]
WH11 Modèle suspect : __import__() — import dynamique (requests/packages.py)
Résumé : 1 élevée
============================================================
evil-pip 99.0.0 — F (0/100)
============================================================
[CRITIQUE]
WH01 Traversée de chemin dans l'archive wheel (../../../etc/crontab)
WH04 Le point d'entrée masque une commande système : 'pip'
WH04 Le point d'entrée masque une commande système : 'python'
WH05 Secret intégré : jeton d'accès personnel GitHub (pip/__init__.py)
[ÉLEVÉE]
WH02 Fichier non répertorié dans RECORD (../../../etc/crontab)
WH03 Type de fichier suspect : .exe (pip/payload.exe)
WH11 Modèle suspect : os.system() — exécution de commande shell
WH11 Modèle suspect : appel eval() — exécution de code dynamique
WH11 Référence au répertoire SSH
Résumé : 4 critiques, 5 élevées, 2 moyennes, 2 faibles
{
"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 traite chaque fichier .whl comme une archive zip non fiable. Il :
Aucun fichier n'est extrait sur le disque. Toute l'analyse se fait en mémoire.
| Fonctionnalité | wheelaudit | pip-audit | safety | GuardDog |
|---|---|---|---|---|
| Zéro dépendance | ✅ | ❌ | ❌ | ❌ |
| Analyse le contenu des wheels | ✅ | ❌ | ❌ | ✅ |
| Détection de traversée de chemin | ✅ | ❌ | ❌ | ❌ |
| Intégrité du RECORD | ✅ | ❌ | ❌ | ❌ |
| Base de données CVE | ❌ | ✅ | ✅ | ❌ |
| Fonctionnement hors ligne | ✅ | ❌ | ❌ | ❌ |
| Python 3.9+ | ✅ | ✅ | ✅ | ✅ |
wheelaudit complète pip-audit/safety — ils vérifient les vulnérabilités connues, wheelaudit vérifie la wheel elle-même.
MIT