Uno scanner completo di malware per estensioni del browser (.xpi) che controlla molti trucchi comuni dei malware come:, tattiche di offuscamento dei furti di credenziali, steganografia, payload in base64, trucchi zip, esecuzione remota di codice, trucchi poliglotti, trucchi dei metadati, nel tentativo di fornire all'analista informazioni su dove è necessaria un'analisi più approfondita.
Uno strumento da riga di comando che analizza i file di estensione di Firefox (.xpi) alla ricerca di segni di malware, offuscamento, payload nascosti, steganografia e altre tecniche utilizzate per introdurre codice malevolo oltre i team di revisione delle estensioni.
extension-scanner.py apre un'estensione di Firefox ed esegue una batteria di controlli di sicurezza su ogni file al suo interno. Quindi produce un report con codice colore con i risultati classificati per gravità.
| Categoria | Cosa Cerca |
|---|---|
| Permessi | Permessi pericolosi o eccessivamente ampi (nativeMessaging, <all_urls>, debugger, desktopCapture, ecc.) |
| Content Security Policy | unsafe-inline, unsafe-eval, sorgenti di script remoti nel CSP |
| Offuscamento JavaScript | eval(), atob(), abuso del costruttore Function(), sequenze di escape hex, riassemblaggio split/join/reverse, stringhe letterali codificate, setTimeout con argomenti stringa |
| URL Sospetti | Domini esterni hardcoded classificati come noti-cattivi (hit nella blocklist → ALTO), sconosciuti (non nella allowlist → MEDIO), o noti-buoni (in allowlist → soppressi). Esegui --update-blocklist per aggiornare la blocklist dei domini da URLhaus e dalla lista di Peter Lowe. |
| Credenziali e Segreti | Chiavi API hardcoded, token (AWS, GitHub, Slack, Google), password, chiavi private e indirizzi IP |
| Payload Base64 | Decodifica blob base64 incorporati e li scannerizza per eseguibili, script e codice di rete |
| Steganografia PNG | Rileva dati aggiunti dopo il marker PNG IEND e decodifica automaticamente il trailer (base64, zlib, gzip e combinazioni); i payload decodificati vengono scansionati ricorsivamente per offuscamento JS, credenziali e URL sospetti. Rileva anche tipi di chunk sconosciuti, anomalie nei canali LSB ed entropia dei pixel insolitamente alta |
| Metadati File | Rilevamento dei magic byte di eseguibili (.exe, .elf, .dylib), doppie estensioni (es. photo.png.js), nomi di file sospetti (keylog, miner, wallet) |
| File Poliglotti | File validi contemporaneamente in due formati (es. HTML + ZIP) |
| Trucchi ZIP | Voci con path traversal, byte nulli nei nomi file, voci duplicate che potrebbero ingannare i parser, commenti ZIP contenenti payload |
| Codice Remoto | Pagine di background o service worker caricati da URL remoti |
| Alta Entropia | File o stringhe letterali con entropia sospettosamente alta (payload probabilmente crittografati o compressi) |
| Abuso API | Chiamate API delle estensioni browser che indicano furto di dati o esfiltrazione: cookies.getAll({}), tabs.query({}), history.search, listener di tastiera, letture clipboard, scripting.executeScript con funzione dinamica. Viene elevato a CRITICO quando una chiamata di raccolta dati è abbinata a un invio di rete in uscita nello stesso file. |
| Elementi Nascosti | Iframe invisibili creati dinamicamente (display:none, dimensioni zero) iniettati nel DOM — ping silenziosi di affiliazione o canali C2. Pixel di tracciamento tramite new Image().src che puntano a URL esterni. |
| Bomba a Tempo | setTimeout/setInterval con ritardi ≥ 5 minuti; gate aritmetici Date.now(); controlli di data di installazione in localStorage che attivano comportamenti giorni dopo la prima esecuzione; gate di soglia Math.random() che si attivano solo su una frazione dei caricamenti pagina. |
| Anti-Analisi | Controlli navigator.webdriver; confronti di finestre con larghezza/altezza zero; dichiarazioni debugger nude; aritmetica performance.now() utilizzata per rilevamento sandbox basato su temporizzazione. |
CRITICO — Quasi certamente malevolo; indagine immediata richiestaALTO — Fortemente sospetto; merita un'attenta revisioneMEDIO — Potenzialmente rischioso; rivedere nel contestoBASSO — Preoccupazione minore; informativoINFO — Metadati (hash, dimensione file, ecc.)python3.11, python3.12 o python3.13python3-venv - Richiesto se si utilizzano ambienti virtualiUtilizzo di ambienti virtuali:
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 - Raccomandato per la steganografia, installazione a livello di sistema (altrimenti pip install -r requirements.txt)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
# Richiesto per l'analisi della steganografia LSB (opzionale ma raccomandato)
pip install pillow numpy
# OPZIONE 1. Solo per l'utente corrente:
# Abilita i completamenti bash per un uso più semplice (TAB per completamento automatico dei comandi)
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
# OPZIONE 2. Abilita i completamenti globalmente per tutti gli utenti (dovrebbe essere auto-sourced dal tuo .bashrc)
cp extension-scanner-completions /usr/share/bash-completion/completions
Se Pillow/NumPy non sono installati, lo strumento funziona comunque: i controlli LSB e di entropia dei pixel vengono semplicemente saltati e viene stampato un avviso.
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