Un scanner complet de malware pour extensions de navigateur (.xpi) qui vérifie de nombreuses astuces de malware courantes telles que : les tactiques d'obfuscation des voleurs d'identifiants, la stéganographie, les payloads base64, les astuces zip, l'exécution de code à distance, les astuces polyglottes et les astuces de métadonnées, dans le but de fournir à l'analyste des informations sur les zones où une analyse plus approfondie est nécessaire.
Un outil en ligne de commande qui analyse les fichiers d'extension Firefox (.xpi) à la recherche de signes de malware, d'obfuscation, de charges utiles cachées, de stéganographie et d'autres techniques utilisées pour faire passer du code malveillant devant les équipes de révision des extensions.
extension-scanner.py ouvre une extension Firefox et effectue une batterie de vérifications de sécurité sur chaque fichier qu'elle contient. Il produit ensuite un rapport coloré avec des résultats classés par sévérité.
| Catégorie | Ce qu'il recherche |
|---|---|
| Permissions | Permissions dangereuses ou trop larges (nativeMessaging, <all_urls>, debugger, desktopCapture, etc.) |
| Politique de sécurité du contenu | unsafe-inline, unsafe-eval, sources de scripts distantes dans la CSP |
| Obfuscation JavaScript | eval(), atob(), abus du constructeur Function(), séquences d'échappement hexadécimales, réassemblage par split/join/reverse, littéraux de chaînes encodés, setTimeout avec des arguments chaîne |
| URL suspectes | Domaines externes codés en dur classés comme connus-mauvais (liste noire → ÉLEVÉ), inconnus (pas sur la liste blanche → MOYEN), ou connus-bons (liste blanche → supprimé). Exécutez --update-blocklist pour actualiser la liste noire des domaines à partir de URLhaus et de la liste de Peter Lowe. |
| Identifiants et secrets | Clés API, jetons (AWS, GitHub, Slack, Google), mots de passe, clés privées et adresses IP codés en dur |
| Charges utiles Base64 | Décode les blocs base64 intégrés et les scanne à la recherche d'exécutables, de scripts et de code réseau |
| Stéganographie PNG | Détecte les données ajoutées après PNG IEND et décode automatiquement le trailer (base64, zlib, gzip et combinaisons) ; les charges utiles décodées sont scannées récursivement pour l'obfuscation JS, les identifiants et les URLs suspectes. Détecte également les types de chunks inconnus, les anomalies de canal LSB et une entropie de pixel inhabituellement élevée |
| Métadonnées de fichier | Détection par octet magique des exécutables (.exe, .elf, .dylib), extensions doubles (ex. photo.png.js), noms de fichiers suspects (keylog, miner, wallet) |
| Fichiers polyglottes | Fichiers valides simultanément dans deux formats (ex. HTML + ZIP) |
| Astuces ZIP | Entrées de traversée de chemin, octets nuls dans les noms de fichiers, entrées en double pouvant tromper les analyseurs, commentaires ZIP porteurs de charge utile |
| Code distant | Pages d'arrière-plan ou service workers chargés depuis des URLs distantes |
| Haute entropie | Fichiers ou littéraux de chaînes avec une entropie suspecte (probablement des charges utiles cryptées ou compressées) |
| Abus d'API | Appels d'API d'extension de navigateur indiquant un vol ou une exfiltration de données : cookies.getAll({}), tabs.query({}), history.search, écouteurs de clavier, lectures de presse-papiers, scripting.executeScript avec une fonction dynamique. Passe à CRITIQUE lorsqu'un appel de collecte de données est associé à un envoi réseau sortant dans le même fichier. |
| Éléments cachés | Iframes invisibles créées dynamiquement (display:none, dimensions nulles) injectées dans le DOM — pings d'affiliation silencieux ou canaux C2. Pixels de suivi via new Image().src pointant vers des URLs externes. |
| Bombe à retardement | setTimeout/setInterval avec des délais ≥ 5 minutes ; portes arithmétiques Date.now() ; vérifications de la date d'installation dans localStorage qui activent un comportement des jours après la première exécution ; portes de seuil Math.random() qui ne se déclenchent que sur une fraction des chargements de page. |
| Anti-analyse | Vérifications navigator.webdriver ; comparaisons de fenêtres de largeur/hauteur nulle ; instructions debugger nues ; arithmétique performance.now() utilisée pour la détection de sandbox basée sur le timing. |
CRITICAL — Presque certainement malveillant ; enquête immédiate requiseHIGH — Fortement suspect ; justifie un examen attentifMEDIUM — Potentiellement risqué ; à examiner dans son contexteLOW — Préoccupation mineure ; informatifINFO — Métadonnées (hash, taille du fichier, etc.)python3.11, python3.12 ou python3.13**python3-venv** - Requis si vous utilisez des environnements virtuelsUtilisation d'environnements virtuels :
sudo apt install python3 python3-venv
git clone https://github.com/ernos/extension-scanner.git
cd extension-scanner
python3 -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt
**python3-numpy** - Recommandé pour la stéganographie, installation système (sinon pip install -r requirements.txt)pip install pillow numpy
#System-wide install on ubuntu:
sudo apt install python3-pillow python3-numpy
git clone https://github.com/ernos/extension-scanner.git
cd extension-scanner
chmod +x extension-scanner.py
mkdir -p ~/.local/share/bin
ln -s $PWD/extension-scanner.py ~/.local/share/bin/extension-scanner
# Required for LSB steganography analysis (optional but recommended)
pip install pillow numpy
# OPTION 1. Only for current user:
# Enable bash completions for simpler use (TAB for autocompleting commands)
mkdir -p ~/.local/share/bash-completion/completions
cp extension-scanner-completions ~/.local/share/bash-completion/completions
echo "source ~/.local/share/bash-completion/completions/extension-scanner-completions" >> ~/.bashrc
# OPTION 2. Enable completions globally for all users (Should be auto-sourced from your .bashrc)
cp extension-scanner-completions /usr/share/bash-completion/completions
Si Pillow/NumPy ne sont pas installés, l'outil fonctionne quand même — les vérifications LSB et d'entropie des pixels sont simplement ignorées, et un avertissement est affiché.
usage: xpiscanner [-h] [--update-blocklist] [--min-severity {CRITICAL,HIGH,MEDIUM,LOW,INFO}] [--json] [--compact] [-v] [-m] [--scans CHECK [CHECK ...]]
[targets ...]
Firefox Extension Scanner - Scans XPI files for security risks and malware indicators
positional arguments:
targets One or more XPI files or directories containing XPIs to analyze