
Detecta payloads de ataques a la cadena de suministro GlassWorm escaneando extensiones de VS Code, paquetes npm/PyPI y repositorios git en busca de payloads Unicode invisibles, patrones de decodificación, marcadores C2 e IOCs maliciosos conocidos.

Detecta cargas útiles de ataques a la cadena de suministro GlassWorm en tu máquina. Escanea extensiones de VS Code, paquetes npm, paquetes Python y repositorios git.
Este escáner detecta la técnica de ataque en sí misma: cargas útiles invisibles de selectores de variación Unicode, patrones de decodificación de GlassWorm, indicadores C2 y código de recolección de credenciales.
pip install glassworm-hunter
O con pipx:
pipx install glassworm-hunter
Escanea tu directorio actual sin escanear extensiones de VS Code/Cursor:
glassworm-hunter scan --no-extensions
Escanea un proyecto específico:
glassworm-hunter scan /ruta/al/proyecto
| Nivel | Significado |
|---|---|
| CRÍTICO | Carga útil activa de GlassWorm detectada (cluster Unicode invisible en código, patrón de decodificador) |
| ALTO | IoC malicioso conocido coincidente (IP C2, billetera, dependencia de extensión de malware conocido) |
| MEDIO | Patrón sospechoso que vale la pena revisar (eval + contenido dinámico, acceso a credenciales, Trojan Source) |
| BAJO | Informativo (densidad inusual de caracteres de ancho cero, scripts de instalación sospechosos) |
glassworm-hunter scan [OPCIONES] [RUTAS...]
| Opción | Por defecto | Descripción |
|---|---|---|
--extensions / --no-extensions | activado | Escanea extensiones de VS Code/Cursor/Codium |
--npm-scan / --no-npm-scan | activado | Escanea node_modules |
--pip-scan / --no-pip-scan | desactivado | Escanea site-packages de Python |
--git / --no-git | activado | Escanea repositorios git |
--format [console|json|sarif] | console | Formato de salida |
--output ARCHIVO | stdout | Escribe el informe en un archivo |
--severity [critical|high|medium|low] | low | Severidad mínima a reportar |
--max-file-size TAMAÑO | 10MB | Omite archivos más grandes que esto |
--include-hidden | desactivado | Escanea archivos/directorios ocultos |
--quiet | desactivado | Suprime la salida de progreso |
--verbose | desactivado | Muestra cada archivo que se está escaneando |
--exclude PATRÓN | — | Patrones glob para excluir (repetible) |
--disable-rule ID_REGL | — | Suprime reglas de detección específicas (repetible) |
--ioc-file ARCHIVO | — | Carga indicadores IoC adicionales desde un archivo JSON |
Se muestra una barra de progreso Rich en stderr durante el escaneo. Se suprime automáticamente con --quiet o --verbose. Siempre se imprime una línea de resumen (archivos escaneados, hallazgos, ruta de salida) en stderr después de que el escaneo finalice.
# Listar todos los IDs de reglas de detección (para usar con --disable-rule)
glassworm-hunter rules
# Actualizar la base de datos local de IoC desde GitHub (fuente por defecto:
# https://raw.githubusercontent.com/afine-com/glassworm-hunter/main/data/ioc.json)
glassworm-hunter update
# Actualizar desde una fuente personalizada (p. ej., servidor interno de inteligencia de amenazas)
glassworm-hunter update --source https://internal.corp/ioc.json
# Forzar sobrescritura de la base de datos local de IoC existente
glassworm-hunter update --force
# Imprimir versión
glassworm-hunter version
| Código | Significado |
|---|---|
| 0 | Sin hallazgos |
| 1 | Hallazgos detectados |
| 2 | Error del escáner |
Salida JSON para procesamiento automatizado:
glassworm-hunter scan . --format json --output report.json --no-extensions
SARIF para GitHub Code Scanning:
glassworm-hunter scan . --format sarif --output results.sarif --no-extensions
Subir SARIF a GitHub:
- uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
Usar códigos de salida en CI:
glassworm-hunter scan . --severity critical --no-extensions || exit 1
Excluir artefactos de compilación y código de proveedores:
glassworm-hunter scan . --exclude "dist/**" --exclude "*.min.js" --no-extensions
Este escáner está completamente fuera de línea por defecto. Solo lee archivos locales. Sin telemetría, sin llamadas a casa, sin comprobaciones de actualización automáticas. Las bases de datos de IoC están incluidas en el paquete.
El único comando que realiza una solicitud de red es glassworm-hunter update, que obtiene la última base de datos de IoC desde GitHub (o una URL --source personalizada). Nunca se llama automáticamente.
Coloca un .glassworm.yml en la raíz de tu proyecto para establecer valores por defecto:
exclude:
- "*.min.js"
- "vendor/**"
- "dist/**"
disable_rules:
- zero-width-chars
severity: medium
Los indicadores de CLI anulan los valores del archivo de configuración.
Usa --ioc-file para cargar indicadores adicionales desde un archivo JSON. Esto es útil para inteligencia de amenazas de equipo o interna:
glassworm-hunter scan /ruta --ioc-file /ruta/equipo_ioc.json
El archivo debe seguir el mismo esquema que data/ioc.json:
{
"schema_version": "1.0",
"extensions": [{"id": "publisher.name"}],
"npm_packages": [{"name": "pkg", "malicious_versions": "1.0.0"}],
"c2_ips": [{"ip": "1.2.3.4"}],
"c2_wallets": [{"address": "..."}],
"attacker_artifacts": [{"type": "email", "value": "[email protected]"}]
}
El archivo personalizado se fusiona sobre todas las demás capas de IoC (hardcoded → incluido → usuario ~/.glassworm/ioc.json → --ioc-file).