Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
nelson — Encontrar vulnerabilidades mediante fuerza bruta básica | Kitploit
Herramientas/GitHubGitHub/swelljoe/nelson
Análisis EstáticoAnálisis de VulnerabilidadesAnálisis de CódigoPruebas de PenetraciónAprendizaje y EducaciónSeguridad de IA
GitHubswelljoe/nelson

nelson

Encontrar vulnerabilidades mediante fuerza bruta básica

Ver Repositorio
5225hace 1 mesRevisado por Kitploit

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

Nelson

Nelson Muntz señalando y diciendo "¡Ja, ja!"

Encontrando vulnerabilidades mediante fuerza bruta tonta

Inspirado en una charla de Nicholas Carlini y el bucle Ralph, Nelson es una herramienta que recorre cada archivo de un proyecto, solicitando a un agente que busque vulnerabilidades. Tiene un modo de escaneo, similar al bucle bash de Carlini, donde le pide al modelo que encuentre cualquier vulnerabilidad en un archivo o directorio de archivos; un modo de revisión, donde un modelo (generalmente más inteligente) reexamina cada vulnerabilidad reportada y decide si vale la pena escalarla a un revisor humano; y un paso de desduplicación intermedio, para que el mismo error encontrado muchas veces solo se juzgue una vez.

La gran lección de las evaluaciones comparativas extensas es que la repetición es lo que saca a la luz los errores. Las versiones anteriores tenían un "modo enfocado" que le pedía al modelo que cazara una clase CWE específica a la vez, y parecía que ayudaba, pero era una ilusión: la expansión por CWE simplemente hacía que el modelo mirara cada archivo muchas veces, y era la repetición, no la orientación a CWE, la que hacía el trabajo. Nombrar la clase de error, las listas de verificación y otras modificaciones de indicaciones no dieron un aumento real en las pruebas A/B controladas. Así que el modo enfocado desapareció. En su lugar, --repeat N ejecuta toda la matriz archivo × modelo N veces (por defecto 3), lo cual es un uso mucho mejor de los mismos tokens. La detección es realmente inestable: un error detectable a menudo aparece solo en una de cada tres pasadas, por lo que repetir, incluso con el mismo modelo, ahora es una práctica estándar.

Más problemas reportados no es necesariamente algo bueno si hay más falsos positivos (y los hay, con modelos más pequeños). La repetición empeora esto por sí sola: el mismo error reaparece en cada pasada, por lo que Nelson desduplica los hallazgos en grupos (mismo archivo/CWE dentro de unas pocas líneas) de la revisión: cada error único se juzga una vez y el veredicto se aplica a cada copia. Eso evita que el modelo de revisión (a menudo caro) pague por reconfirmar el mismo hallazgo una y otra vez. Si es un error real una vez, es un error real la segunda vez. Usar un modelo más inteligente para revisar es una buena idea, pero incluso un modelo tonto puede detectar sus propios errores en la revisión.

Descargar herramienta
antes

Nelson funciona con una variedad de modelos a través de Claude Code, Gemini CLI y API compatibles con OpenAI. Dentro de un mismo modelo, los trabajos se ejecutan uno a la vez: los planes de suscripción tienen límites de tokens renovables y los modelos locales se ejecutan en hardware relativamente modesto, por lo que no hay ventaja en la concurrencia adicional en un solo proveedor. Sin embargo, entre diferentes modelos, los límites de velocidad son independientes, por lo que cuando pasas múltiples especificaciones -m, Nelson ejecuta un trabajador por modelo en paralelo por defecto (por ejemplo, Claude, Gemini y un Qwen local a través de LM Studio todos procesando la cola al mismo tiempo). Pasa --no-parallel para volver al modo un modelo a la vez.

A menos que tengas prisa por obtener los mejores resultados y tengas un presupuesto de tokens ilimitado, creo que un uso inteligente de tus tokens es ejecutar un informe con un modelo barato pero probadamente efectivo, como Gemma 4 31B o DeepSeek V4 Pro, repetido algunas veces, luego revisar el informe con un modelo más caro y finalmente tener una sesión interactiva más cuidadosa con tu modelo frontera favorito para corregir el problema o simplemente abrir tu editor y arreglar el error tú mismo. Cualquier cosa lo suficientemente simple como para ser corregida automáticamente por un modelo sin intervención adicional probablemente se puede descubrir mediante herramientas de análisis estático (por ejemplo, ruff para Python con las reglas S habilitadas o semgrep, etc.), y deberías ejecutar ese tipo de herramientas y corregir todos los problemas descubiertos antes de pasar el código a nelson.

Actualmente, Nelson no intenta corregir errores de seguridad. Es exclusivamente una herramienta de informes, aunque los modelos a menudo ofrecerán consejos sobre cómo solucionarlos sin que se les pida.

He realizado muchas pruebas y evaluaciones comparativas de varios modelos para determinar el uso más eficiente del tiempo y los tokens, ya que tengo cientos de miles de líneas de código para revisar en docenas de repositorios. Los hallazgos principales: la repetición supera a la modificación de indicaciones, los modelos baratos repetidos varias veces a menudo ofrecen la mejor relación calidad-precio, y un solo modelo fuerte utilizado como revisor vale más que trucos de escaneo sofisticados. Todavía puede resultar que, como con la codificación, sea mejor usar simplemente el modelo más inteligente al que tengas acceso, porque los modelos tontos desperdician mucho más tiempo humano del que ahorran en costo de uso, pero un modelo relativamente tonto, ejecutado unas cuantas veces y luego triado por un revisor inteligente, puede lograr una cantidad sorprendente.

Este proyecto puede estar sobrediseñado para tu caso de uso. Tal vez un script como el que mencionó Carlini sea adecuado para ti, algo como esto:

root@kitploit:~
find . -name '*.py' | while read f; do
  content=$(cat "$f")
  claude -p "Are there any security vulnerabilities in this file? $f"
done

Iterate over all files in the source tree.

find . -type f -name *.py -print0 | while IFS= read -r -d '' file; do

Tell Claude Code to look for vulnerabilities in each file.

claude
--verbose
--dangerously-skip-permissions
--print "You are playing in a CTF.
Find a vulnerability.
hint: look at $file
Write the most serious
one to /out/report.txt." done

root@kitploit:~
## Instalación

Requiere Python 3.12+.```bash
git clone https://github.com/swelljoe/nelson.git
cd nelson
python -m venv .venv
source .venv/bin/activate
pip install -e .

El entorno virtual mantiene las dependencias de Nelson aisladas de su Python del sistema. Necesitará activarlo (source .venv/bin/activate) cada vez que abra una nueva terminal, o simplemente ejecute Nelson directamente:```bash /path/to/nelson/.venv/bin/nelson --help

root@kitploit:~
O ejecutar sin instalar:```bash
python -m venv .venv
source .venv/bin/activate
pip install click httpx
python -m nelson --help

Quickstart

El flujo de trabajo típico es: escanear, revisar, informar.```bash

1. Scan a project, repeating the pass a few times (default --repeat 3)

nelson scan -m claude:haiku /path/to/project

2. Review findings with a smarter model (de-dupes first, then judges each

unique bug once) to filter false positives

nelson review -m claude:sonnet

3. View confirmed findings

nelson report --verdict confirmed

root@kitploit:~
O, ejecuta el pipeline completo en un solo comando:```bash
nelson haha --scan-model claude:haiku --scan-model claude:sonnet \
  --review-model claude:opus /path/to/project

haha lanza varios modelos de escaneo al código (cada uno repetido --repeat veces), desduplica y juzga cada hallazgo único con un modelo de revisión fuerte. Necesita al menos dos modelos de escaneo y un modelo de revisión; lo más fácil es ponerlos en un archivo de configuración para que solo tengas que escribir nelson haha /path/to/project. Consulta haha mode para más detalles.

Usage

Scanning

nelson scan envía cada archivo a cada modelo con un prompt amplio de "encuentra cualquier vulnerabilidad", similar al enfoque Carlini — un trabajo por (archivo, modelo). El parámetro clave es --repeat: ejecuta toda la matriz N veces (por defecto 3). La repetición, no la orientación por CWE, es lo que realmente saca a la luz los errores, y la detección es lo suficientemente inconsistente como para que un error real a menudo aparezca en solo una de tres pasadas, por lo que repetir vale la pena incluso con un solo modelo. Los hallazgos duplicados entre pasadas (y entre modelos) se fusionan en el momento de la revisión.```bash

Open scan with the default model (claude:haiku), repeated 3 times

nelson scan /path/to/project

A single pass, if you really want one

nelson scan --repeat 1 /path/to/project

A more capable model produces better results

nelson scan -m claude:sonnet /path/to/project

Several models at once (run in parallel, one worker each), repeated 5x

nelson scan -m claude:haiku -m "lmstudio:google/gemma-4-31b" --repeat 5 /path/to/project

root@kitploit:~
**Herramientas para modelos compatibles con OpenAI.** Claude Code y Gemini CLI ya son agentes: leen los archivos que necesitan por sí mismos. Un endpoint bare compatible con OpenAI (`openai:`, `lmstudio:`, `ollama:`) no lo es: por defecto solo ve el único archivo pegado en el prompt. Pasa `--tools` para dar a esos modelos un bucle de herramientas de solo lectura `read_file` / `grep` / `list_dir` con raíz en el árbol escaneado, para que puedan seguir importaciones, llamantes y ayudantes a otros archivos antes de decidir si una vulnerabilidad es real y alcanzable. (Instala [ripgrep](https://github.com/BurntSushi/ripgrep) para la herramienta `grep`). Esto usa más tokens por archivo. Es un no-op para las especificaciones `claude:` / `gemini:`.```bash
# Let a local Qwen poke around the project, not just the one file
nelson scan --tools -m "lmstudio:Qwen/Qwen3-27B" /path/to/project

También puedes indicar nelson scan a uno o varios archivos individuales en lugar de un directorio completo. Esto es útil para realizar una verificación puntual de un solo archivo, o para escanear cualquier expansión de comodín de shell. Cuando nombras archivos explícitamente, los filtros habituales basados en rutas (patrones de test/doc, detección de archivos generados) se omiten; Nelson confía en que sabes lo que quieres. Esto mismo aplica para nelson inventory y nelson haha.```bash

Scan a single file

nelson scan path/to/suspicious.py

Scan everything a glob expands to (shell does the expansion)

nelson scan src/api/*.py

Mix and match — multiple explicit files are fine

nelson scan src/auth.py src/db.py src/handlers/*.go

Same shape works for inventory and haha

nelson inventory src/api/*.py nelson haha src/auth.py src/db.py

root@kitploit:~
Los escaneos se pueden reanudar. Si se interrumpe, simplemente reanúdelo por ID de escaneo:```bash
nelson scan --resume 3

Revisión

El pase de revisión primero deduplica los hallazgos del escaneo en clústeres (mismo archivo y CWE, números de línea dentro de --line-tolerance, por defecto 2), luego envía un representante por clúster a un modelo (preferiblemente uno más inteligente) junto con el archivo fuente completo, pidiéndole que trace el flujo de ejecución y evalúe si la vulnerabilidad es alcanzable y realista. El veredicto resultante se aplica a cada hallazgo en el clúster, de modo que un error que --repeat y múltiples modelos hayan encontrado muchas veces se juzga una sola vez — el revisor no es pagado una y otra vez por el mismo hallazgo. Todas las filas duplicadas se mantienen (con qué modelo/pase las encontró) para que la vista de comparación siga funcionando.```bash

Review with Claude Sonnet (default)

nelson review

Review a specific scan

nelson review 3

Review with a different model

nelson review -m claude:opus

Widen/narrow how aggressively near-by findings are treated as one bug

nelson review --line-tolerance 5

Let an OpenAI-compatible reviewer read related files while tracing reachability

nelson review -m "lmstudio:Qwen/Qwen3-27B" --tools

root@kitploit:~
Cada hallazgo recibe un veredicto: `confirmed`, `false_positive`, `needs_review` o `resolved` (si el archivo ha sido eliminado desde el escaneo). El flag `--tools` funciona de la misma forma que en `nelson scan`: le proporciona a un modelo compatible con la API de OpenAI (`openai:`/`lmstudio:`/`ollama:`) un bucle de solo lectura `read_file`/`grep`/`list_dir` sobre el árbol escaneado, para que el modelo pueda seguir un hallazgo hasta los archivos que toca antes de decidir sobre su alcanzabilidad. En `claude:`/`gemini:` esto no tiene efecto, ya que ya leen archivos por sí mismos. La revisión es idempotente — ejecutarla de nuevo solo procesa hallazgos no revisados, de modo que puedes revisar con un modelo y luego ejecutar una segunda pasada con otro.```bash
# Show all findings from the latest scan
nelson report

# Show findings from a specific scan
nelson report 3

# Filter by review verdict
nelson report --verdict confirmed
nelson report --verdict false_positive
nelson report --verdict needs_review

# Filter by confidence or CWE
nelson report --confidence high
nelson report --cwe CWE-89

# JSON output for scripting
nelson report --json-output
nelson report --verdict confirmed --json-output

Comparando modelos

Cuando escaneas con múltiples modelos (en paralelo o de otra manera), nelson compare agrupa los hallazgos en grupos de "mismo problema" para que puedas ver dónde coincidieron los modelos:```bash

Compare models within a single multi-model scan (default: latest)

nelson compare nelson compare 5

Compare across separate scans on the same target/commit

nelson compare --scans 3,5,7

Tighter or looser matching (default: ±2 lines)

nelson compare --line-tolerance 0 # exact line match only nelson compare --line-tolerance 5 # more forgiving

Filters

nelson compare --min-agreement 2 # only show clusters >= 2 models flagged nelson compare --cwe CWE-89 nelson compare --confidence high

JSON for scripting / your own benchmarking

nelson compare --json-output

HTML version

nelson html-compare nelson html-compare --scans 3,5,7 -o my-comparison.html

root@kitploit:~
Un "cluster" es un problema aparente: el mismo archivo, la misma CWE, números de línea dentro de la ventana de tolerancia. Para cada cluster, el informe muestra qué modelos lo detectaron y qué modelos tuvieron la oportunidad de detectarlo pero no lo hicieron (el conjunto de votantes elegibles es cada modelo que completó un trabajo de escaneo abierto en ese archivo). Los clusters con alto acuerdo (p. ej., 3/3) son una señal fuerte; los clusters de un solo modelo suelen ser falsos positivos. Es útil tanto para filtrar ruido como para ver cómo se compara un modelo local pequeño con uno frontier.

### Informes HTML

![Ejemplo de informe HTML que muestra totales y resultados revisados](https://assets.kitploit.com/production/public/readmes/9113/03ad22bd9693d8bd8cac544a054001dfe45d77f3174f7b1afe9f4e04355b8383.png)

Nelson puede generar informes HTML estáticos autocontenidos:```bash
# Detailed report for a single scan (default: latest)
nelson html-report
nelson html-report 3
nelson html-report -o my-report.html

# Executive summary across all scans
nelson html-summary
nelson html-summary -o summary.html

Otros comandos

El informe detallado muestra cada hallazgo agrupado por archivo, con insignias de confianza, veredictos de revisión, fragmentos de código y uso de tokens. El resumen ejecutivo es una página única que muestra todos los escaneos con recuentos de confirmados/falsos positivos/requiere revisión y un desglose de los hallazgos confirmados por escaneo.```bash

List source files that would be scanned, with security tooling assessment

nelson inventory /path/to/project

(also accepts individual files or globs, just like nelson scan)

List all scans

nelson list

Show detailed status of a scan (job counts, token usage, review summary)

nelson status nelson status 3

root@kitploit:~
### Modo Haha

El comando `haha` (la frase característica de Nelson) lanza todo contra el código de una sola vez:

1. **Escaneo** — cada modelo de escaneo audita cada archivo, `--repeat` veces cada uno (por defecto 3)
2. **Deduplicación** — los hallazgos combinados se agrupan en errores únicos
3. **Revisión** — un modelo de revisión potente evalúa cada error único una vez
4. **Resumen** — imprime los conteos de confirmados/falsos positivos/necesita revisión

Requiere **al menos dos modelos de escaneo y un modelo de revisión**. Proporciónalos en la línea de comandos, o — más convenientemente — en un [archivo de configuración](#configuration); `haha` termina con un error si no puede encontrarlos.```bash
# Models from ./nelson.yaml or ~/.nelson.yaml
nelson haha /path/to/project

# Or specify on the command line (--scan-model is repeatable)
nelson haha /path/to/project \
    --scan-model "openai:deepseek-v4-flash@https://api.deepseek.com/v1" \
    --scan-model "lmstudio:google/gemma-4-26b-a4b" \
    --review-model claude:opus \
    --repeat 3

Todo cae en un único escaneo, que puedes inspeccionar después con nelson report <scan_id>, nelson html-report <scan_id> o nelson compare <scan_id>.

Advertencia de uso de tokens: En un proyecto grande, haha consume muchos tokens y tarda bastante — ejecuta trabajos de escaneo archivos × modelos_escaneo × repetir más un trabajo de revisión por cada error único. Considera ejecutar comandos nelson scan y nelson review individualmente si deseas más control sobre el ritmo y el costo.

Configuración

Nelson lee un archivo de configuración YAML opcional para que no tengas que volver a escribir tus modelos favoritos por etapa. Busca primero ./nelson.yaml (local del proyecto) y luego ~/.nelson.yaml (en el home); el archivo del proyecto prevalece por clave, y las banderas explícitas de línea de comandos anulan ambos. Todas las claves son opcionales:```yaml

nelson.yaml

scan_models: # used by haha (needs >= 2) and as the default for scan

  • openai:deepseek-v4-flash@https://api.deepseek.com/v1
  • lmstudio:google/gemma-4-31b review_model: claude:opus # used by haha (required) and as the default for review repeat: 3 # default number of passes db: nelson.db # default database path delay: 2.0 # default per-job pacing (seconds)
root@kitploit:~
Con esto en su lugar, `nelson haha /path/to/project` funciona, y `nelson scan` / `nelson review` toman la misma configuración predeterminada a menos que la sobreescribas.

## Configuración del modelo

Los modelos se especifican con una sintaxis `type:model`:

| Especificación | Descripción |
|------|-------------|
| `claude:haiku` | Claude Haiku mediante CLI |
| `claude:sonnet` | Claude Sonnet mediante CLI |
| `claude:opus` | Claude Opus mediante CLI |
| `gemini:gemini-2.5-flash` | Gemini CLI con modelo específico |
| `gemini:` | Gemini CLI con modelo predeterminado |
| `lmstudio:google/gemma-4-26b-a4b` | LM Studio en localhost:1234 |
| `ollama:llama3` | Ollama en localhost:11434 |
| `openai:model@http://host:port/v1` | Cualquier endpoint de API compatible con OpenAI (local o alojado) |
| `openai:deepseek-v4-pro@https://api.deepseek.com/v1` | DeepSeek (alojado) |
| `openai:nvidia/nemotron-3-super-120b-a12b@https://openrouter.ai/api/v1` | OpenRouter (alojado) |

El tipo `openai:` se comunica con cualquier cosa que hable la API de chat-completions de OpenAI — un servidor local *o* un proveedor alojado. Para servidores locales (especificaciones `lmstudio:`, `ollama:`, o `openai:...@http://localhost...`) no se necesita clave. Para proveedores alojados, consulta [Modelos de API alojados](#hosted-api-models-deepseek-mimo-openrouter) a continuación.

Se pueden usar múltiples modelos en un solo escaneo para comparar efectividad. Por defecto, se ejecutan en paralelo — un trabajador por modelo, ya que los límites de tasa son por proveedor:```bash
# Claude Haiku and a local Qwen model both work the queue at once
nelson scan /path/to/project \
    -m claude:haiku \
    -m "lmstudio:Qwen/Qwen3-27B"

Usa --no-parallel si prefieres ejecutar cada modelo en secuencia (por ejemplo, para reducir la contención de CPU/GPU entre dos modelos locales en la misma máquina).

Los agentes basados en CLI (Claude Code, Gemini CLI) se espacian con un retardo configurable entre trabajos para evitar alcanzar los límites de suscripción renovables. Los modelos basados en API (LM Studio, Ollama, endpoints personalizados) se ejecutan sin retardo. El retardo predeterminado es de 2 segundos; ajústalo con --delay. El espaciado es por trabajador, por lo que cada modelo espera independientemente su retardo entre sus propios trabajos:```bash nelson scan /path/to/project -m claude:haiku --delay 5

root@kitploit:~
### Modelos de API alojados (DeepSeek, MiMo, OpenRouter)

No necesitas una GPU local para ejecutar un modelo barato. Cualquier proveedor alojado con un endpoint compatible con OpenAI funciona a través de la especificación `openai:`, en la forma
`openai:MODEL@BASE_URL` donde `BASE_URL` termina en `/v1`. En mis pruebas, estos modelos "baratos" alojados — DeepSeek y MiMo de Xiaomi en particular — han sido los líderes en valor/rendimiento: encuentran la mayor parte de lo que encuentran los modelos de frontera a una fracción del costo, lo que los convierte en una buena opción para el enfoque de fuerza bruta de Nelson, que procesa todos los archivos.

**Autenticación.** Nelson lee la clave de la variable de entorno `OPENAI_API_KEY` (la convención universal compatible con OpenAI). Exporta la clave de tu proveedor bajo ese nombre antes de escanear — sea cual sea el proveedor al que apunte `@BASE_URL`:```bash
export OPENAI_API_KEY="sk-your-provider-key"

Mantener la clave en el entorno (o en un .env no rastreado que hagas source) la mantiene fuera de tu historial de shell y fuera de cualquier archivo que Nelson escriba. Una clave faltante o rechazada se manifiesta como un fallo de autenticación, nunca como un silencioso "escaneado y no encontrado nada."

DeepSeek — deepseek-v4-pro es el modelo más potente/caro, deepseek-v4-flash el más barato:```bash export OPENAI_API_KEY="sk-..." # your DeepSeek key

nelson scan /path/to/project -m "openai:deepseek-v4-pro@https://api.deepseek.com/v1"

Cheaper, still surprisingly capable

nelson scan /path/to/project -m "openai:deepseek-v4-flash@https://api.deepseek.com/v1"

root@kitploit:~
**MiMo (Xiaomi)** — apunta al endpoint compatible con OpenAI de MiMo:```bash
export OPENAI_API_KEY="..."      # your MiMo key

nelson scan /path/to/project \
    -m "openai:mimo-v2.5-pro@https://token-plan-sgp.xiaomimimo.com/v1"

OpenRouter — una clave y una URL base alcanzan la mayoría de los modelos principales detrás de una sola cuenta; el id del modelo es el slug con prefijo del proveedor del catálogo de OpenRouter (por ejemplo, nvidia/nemotron-3-super-120b-a12b, añada :free para una ruta de nivel gratuito). Esta es una forma conveniente de probar muchos modelos sin registrarse en cada proveedor:```bash export OPENAI_API_KEY="sk-or-..." # your OpenRouter key

nelson scan /path/to/project
-m "openai:nvidia/nemotron-3-super-120b-a12b@https://openrouter.ai/api/v1"

root@kitploit:~
Por defecto, un modelo `openai:` alojado es **de un solo disparo** — solo ve el único archivo pegado en cada prompt. Agregue `--tools` (consulte [Scanning](#scanning)) para darle un bucle de solo lectura `read_file`/`grep`/`list_dir` sobre el proyecto, de modo que pueda seguir las importaciones y los sitios de llamada a otros archivos antes de decidir si un hallazgo es real. Esto cuesta más tokens, pero tiende a reducir los falsos positivos:```bash
nelson scan --tools /path/to/project \
    -m "openai:deepseek-v4-pro@https://api.deepseek.com/v1"

La misma especificación y OPENAI_API_KEY funcionan para nelson review — un modelo alojado barato puede escanear y uno más fuerte puede revisar, o viceversa:```bash nelson review -m "openai:deepseek-v4-pro@https://api.deepseek.com/v1" --tools

root@kitploit:~
Debido a que los límites de tasa son por proveedor, puedes mezclar un modelo alojado con uno local (o Claude/Gemini) en un solo escaneo y Nelson ejecuta un trabajador por modelo en paralelo:```bash
nelson scan /path/to/project \
    -m "openai:deepseek-v4-flash@https://api.deepseek.com/v1" \
    -m "lmstudio:Qwen/Qwen3-27B" \
    -m claude:haiku

Indicaciones

El aviso de escaneo le pide al modelo que encuentre cualquier cosa en un solo archivo, un aviso por trabajo (archivo, modelo) (y toda la matriz se repite --repeat veces):``` You are a security researcher performing a vulnerability audit. Analyze the following python file and find any security vulnerabilities.

Look for all classes of vulnerability including but not limited to:

  • Injection attacks (SQL, command, code, XSS, etc.)
  • Authentication and authorization flaws
  • Cryptographic weaknesses
  • Path traversal
  • Hard-coded credentials
  • Any other security-relevant bugs

IMPORTANT INSTRUCTIONS:

  • If you find NO vulnerabilities, you MUST return exactly: []
  • If you find vulnerabilities, return a JSON array of objects with these fields:
    • "line": the line number (integer)
    • "code": the vulnerable code snippet (string)
    • "cwe": the CWE ID if you can identify one, otherwise "unknown" (string)
    • "explanation": what the vulnerability is and why it matters (string)
    • "confidence": "high", "medium", or "low" (string)
  • Return ONLY the JSON array, no other text.
  • Rank by severity — put the most serious vulnerability first.

File: app/db.py

root@kitploit:~
El modelo identifica el CWE en sí; Nelson lo registra junto con el hallazgo y lo utiliza (junto con el número de línea) para agrupar informes duplicados durante la revisión. La pasada de revisión utiliza un prompt separado que entrega al revisor el archivo completo y el hallazgo reportado y le pide que rastree la alcanzabilidad y clasifique `confirmed` / `false_positive` / `needs_review`.

## Filtrado de archivos

Nelson excluye automáticamente los archivos que es poco probable que contengan vulnerabilidades de producción:

- **Código de prueba**: `test_*`, `*_test.*`, `*_spec.*`, `tests/`, `__tests__/`, etc.
- **Documentación**: `docs/`, `*.md`, `*.txt`
- **Código generado**: archivos con cabeceras "DO NOT EDIT" / "AUTO-GENERATED"
- **Código de proveedor**: `vendor/`, `node_modules/`, `third_party/`
- **Archivos grandes**: más de 500KB
- **Archivos no fuente**: solo escanea archivos con extensiones reconocidas (`.py`, `.go`, `.ts`, `.js`, `.c`, `.cpp`, `.rs`, `.java`, `.rb`, `.php`, `.pl`, `.pm`, `.sh`)

Use `nelson inventory /path/to/project` para ver exactamente qué archivos se escanearían.

Estos filtros solo se aplican al escanear un directorio. Si nombra archivos explícitamente en la línea de comandos (por ejemplo, `nelson scan src/foo.py src/bar.py`), solo se aplican las comprobaciones de extensión y tamaño; se omite la detección de archivos de prueba/documentación/generados, bajo el supuesto de que escribió lo que quería.

## Evaluación de herramientas de seguridad

Nelson verifica si su proyecto está utilizando las herramientas de análisis estático recomendadas e informa las brechas. Esto se ejecuta automáticamente como parte de `nelson inventory` y `nelson report`. Por ejemplo, marcará si:

- Ruff está presente pero las reglas de seguridad S (Bandit) no están habilitadas
- Un proyecto Go no tiene golangci-lint con gosec
- Un proyecto TypeScript no tiene eslint-plugin-security
- Un proyecto Perl no tiene configuración Perl::Critic

La idea es que las herramientas de análisis estático son más baratas y rápidas que la IA para la detección de patrones de vulnerabilidades, y Nelson debería complementarlas en lugar de duplicar su trabajo.

## Base de datos

El estado del escaneo se almacena en una base de datos SQLite (`nelson.db` en el directorio actual por defecto). Use `--db` para especificar una ruta diferente.

Todos los resultados de escaneo, hallazgos y veredictos de revisión se conservan, lo que facilita la comparación de resultados entre modelos, modos y tiempo.

## Seguimiento de tokens

Nelson realiza un seguimiento del uso de tokens y del costo por trabajo. Use `nelson status` para ver los totales.