Una extensión integral de navegador (.xpi) para escanear malware que detecta muchas tácticas comunes de malware, como: robadores de credenciales, tácticas de ofuscación, esteganografía, payloads base64, trucos con zip, ejecución remota de código, trucos poliglotas y trucos de metadatos, con el objetivo de brindar al analista información sobre dónde se necesita un análisis más profundo.
Una herramienta de línea de comandos que analiza archivos de extensión de Firefox (.xpi) en busca de signos de malware, ofuscación, cargas ocultas, esteganografía y otras técnicas utilizadas para colar código malicioso más allá de los equipos de revisión de extensiones.
extension-scanner.py abre una extensión de Firefox y realiza una batería de comprobaciones de seguridad en cada archivo que contiene. Luego produce un informe codificado por colores con los hallazgos clasificados por gravedad.
| Categoría | Qué Busca |
|---|---|
| Permisos | Permisos peligrosos o excesivamente amplios (nativeMessaging, <all_urls>, debugger, desktopCapture, etc.) |
| Política de Seguridad de Contenido | unsafe-inline, unsafe-eval, fuentes de scripts remotos en CSP |
| Ofuscación de JavaScript | eval(), atob(), abuso del constructor Function(), secuencias de escape hexadecimal, reensamblaje split/join/reverse, literales de cadena codificados, setTimeout con argumentos de cadena |
| URLs sospechosas | Dominios externos codificados clasificados como conocidos-malos (coincidencia en lista de bloqueo → ALTO), desconocidos (no en lista blanca → MEDIO), o conocidos-buenos (en lista blanca → suprimido). Ejecute --update-blocklist para actualizar la lista de bloqueo de dominios desde URLhaus y la lista de Peter Lowe. |
| Credenciales y Secretos | Claves API, tokens (AWS, GitHub, Slack, Google), contraseñas, claves privadas y direcciones IP codificados |
| Cargas Base64 | Decodifica blobs base64 incrustados y los escanea en busca de ejecutables, scripts y código de red |
| Esteganografía PNG | Detecta datos adjuntos después de IEND de PNG y decodifica automáticamente el remolque (base64, zlib, gzip y combinaciones); las cargas decodificadas se escanean recursivamente en busca de ofuscación JS, credenciales y URL sospechosas. También detecta tipos de fragmentos desconocidos, anomalías en el canal LSB y entropía de píxeles inusualmente alta |
| Metadatos de Archivo | Detección de bytes mágicos de ejecutables (.exe, .elf, .dylib), extensiones dobles (ej. photo.png.js), nombres de archivo sospechosos (keylog, miner, wallet) |
| Archivos Políglotas | Archivos que son válidos simultáneamente en dos formatos (ej. HTML + ZIP) |
| Trucos ZIP | Entradas de path traversal, bytes nulos en nombres de archivo, entradas duplicadas que podrían engañar a los analizadores, comentarios ZIP con cargas |
| Código Remoto | Páginas en segundo plano o service workers cargados desde URL remotas |
| Alta Entropía | Archivos o literales de cadena con entropía sospechosamente alta (probables cargas cifradas o comprimidas) |
| Abuso de API | Llamadas a la API de extensiones del navegador que indican robo o exfiltración de datos: cookies.getAll({}), tabs.query({}), history.search, listeners de teclado, lecturas de portapapeles, scripting.executeScript con una función dinámica. Se eleva a CRÍTICO cuando una llamada de recolección de datos se combina con un envío de red saliente en el mismo archivo. |
| Elementos Ocultos | Iframes invisibles creados dinámicamente (display:none, dimensiones cero) inyectados en el DOM — pings de afiliados silenciosos o canales C2. Píxeles de seguimiento mediante new Image().src apuntando a URL externas. |
| Bomba de Tiempo | setTimeout/setInterval con retrasos ≥ 5 minutos; compuertas aritméticas Date.now(); comprobaciones de fecha de instalación en localStorage que activan comportamiento días después de la primera ejecución; compuertas de umbral Math.random() que se activan solo en una fracción de las cargas de página. |
| Anti-Análisis | Comprobaciones de navigator.webdriver; comparaciones de ventanas de ancho/alto cero; sentencias debugger simples; aritmética de performance.now() utilizada para detección de sandbox basada en tiempos. |
CRITICAL — Casi con certeza malicioso; se requiere investigación inmediataHIGH — Fuertemente sospechoso; merece una revisión cuidadosaMEDIUM — Potencialmente riesgoso; revisar en contextoLOW — Preocupación menor; informativoINFO — Metadatos (hash, tamaño de archivo, etc.)python3.11, python3.12 o python3.13**python3-venv** - Requerido si usas entornos virtualesUsando entornos virtuales:
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** - Recomendado para esteganografía, instalación a nivel de sistema (de lo contrario 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
# Requerido para análisis de esteganografía LSB (opcional pero recomendado)
pip install pillow numpy
# OPCIÓN 1. Solo para el usuario actual:
# Habilita autocompletado de bash para un uso más sencillo (TAB para autocompletar comandos)
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
# OPCIÓN 2. Habilita autocompletado globalmente para todos los usuarios (Debería cargarse automáticamente desde tu .bashrc)
cp extension-scanner-completions /usr/share/bash-completion/completions
Si Pillow/NumPy no están instalados, la herramienta aún se ejecuta: las comprobaciones de LSB y entropía de píxeles simplemente se omiten y se imprime una advertencia.
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