Módulo 5 de 10 · 35 min

Deep Code Analysis

Aprende cómo Deep Code Analysis convierte una coincidencia del escáner en un hallazgo que entiendes: el flujo de datos que hay detrás, si un atacante puede alcanzarlo y hasta qué punto puedes fiarte de los veredictos de IA que lo acompañan.

Al terminar este módulo podrás

  • Explicar por qué una coincidencia de patrón o una explicación de IA, por sí solas, no muestran cómo afecta una debilidad a tu aplicación
  • Leer el Flujo de Datos y Traza de Contaminación de un hallazgo, su veredicto de alcanzabilidad y sus señales de exposición a internet
  • Elegir un modo de detección de AI Scan y explicar por qué se descartan los hallazgos de IA sin evidencia literal
  • Describir qué puede hacer y qué no la Detección de falsos positivos con IA, y cómo tu propia decisión prevalece sobre ella
  • Priorizar hallazgos con la puntuación de prioridad, valorar cuándo puedes fiarte de No alcanzable y saber cuándo pasar una ruta a AI Swarm Pentest

Por qué no basta con buscar patrones

La página de Deep Code Analysis resume el problema en tres frases: “SAST puede marcar un patrón. Un LLM puede explicar el código. Ninguno establece cómo una debilidad afecta a la aplicación.” Esta lección muestra qué significa eso en tu triage del día a día.

Lo que ve un escáner de patrones

Piensa en un handler de login repartido en dos archivos:

# routes/auth.py
@app.post("/login")
def login():
    username = request.form["username"]
    user = find_user(username)

# services/users.py
def find_user(username):
    query = "SELECT * FROM users WHERE name = '" + username + "'"
    return db.execute(query)

Una regla de patrones detecta una concatenación de cadenas que llega a db.execute y notifica una inyección SQL en services/users.py. La coincidencia es correcta. Aun así, deja sin responder las preguntas que deciden qué haces a continuación:

  • ¿username viene de la petición HTTP o de una constante en un proceso batch?
  • ¿Se sanea o se parametriza el valor en algún punto del camino?
  • ¿El handler está enrutado y desplegado, y alguien desde internet puede llegar al servicio?
  • ¿Qué datos podría leer un atacante a través de él?

Sin esas respuestas, los equipos caen en uno de estos dos errores. Unos tratan cada coincidencia como urgente y se ahogan en ruido. Otros empiezan a ignorar las coincidencias y se les escapa la que importa.

Lo que aporta una explicación de IA, y lo que no

Un modelo de lenguaje grande puede leer find_user y escribir un párrafo convincente sobre ella. Pero una explicación fluida no es evidencia. Un modelo puede describir una ruta de llamadas que no existe, citar una línea que no está en el archivo o dar por contaminada una entrada que se saneó dos funciones antes. Si nadie contrasta esas afirmaciones con tu repositorio, solo has cambiado el ruido del escáner por ruido de IA.

Fallos sin ningún patrón

Ahora fíjate en una API de facturas:

// GET /api/invoices/:id
router.get("/api/invoices/:id", requireLogin, async (req, res) => {
  const invoice = await Invoice.findById(req.params.id);
  res.json(invoice);
});

Aquí nada llama a una función peligrosa, y quien hace la petición ha iniciado sesión. El fallo es algo que falta: no hay ninguna comprobación de que la factura pertenezca a la cuenta de quien la pide. Cualquier cliente puede ir recorriendo IDs de factura y leer los datos de facturación de todos los demás. Es una referencia directa insegura a objetos (IDOR), también llamada autorización rota a nivel de objeto (BOLA). No hay ningún sumidero con el que pueda coincidir un patrón. Este fallo solo se encuentra razonando sobre lo que el código debería permitir.

Dónde encaja Deep Code Analysis

Plexicus llama a su enfoque Proof-Driven AppSec: Validar (AI Swarm Pentest), Entender (Deep Code Analysis), Remediar (Remediation). Deep Code Analysis es el paso Entender. Añade a un hallazgo el flujo afectado, si un atacante puede alcanzarlo y la clase de debilidad. También contrasta con tu código las afirmaciones clave de la IA: los hallazgos de AI Scan deben citar una línea real, y los pasos de traza generados por IA deben coincidir con tu repositorio. El resto del texto de IA, como la narrativa de Escenario de ataque en Riesgo y exposición, no se comprueba de esta forma, y el producto lo señala para que lo verifiques contra la traza de código.

Qué añade Deep Code Analysis a un hallazgo

El módulo 4 presentó las señales de un hallazgo. Esta lección muestra qué las genera, para que sepas hasta qué punto fiarte de cada una.

ContextoLa pregunta que respondeDónde lo ves
Flujo afectado¿Qué entrada, ruta de código y operación toca?Código y taint trace
Alcanzabilidad y exposición¿Puede llegar un atacante, y desde dónde?Insignia de alcanzabilidad, Ruta internet, sección Exposición
Clase de debilidad¿Qué tipo de debilidad es?Mapeo a CWE y OWASP Top 10, Compliance y OWASP
Prioridad¿Qué urgencia tiene frente a todo lo demás?Puntuación de prioridad en Riesgo y exposición

Flujo de datos y traza de contaminación de la fuente al sumidero

La sección Código y taint trace empieza con un Flujo de Datos y Traza de Contaminación: pasos numerados que siguen los datos no confiables desde una Fuente, como request.form["username"], a través de saltos de Propagación, hasta un Sumidero, como db.execute(query). Cada paso lleva una insignia de procedencia:

InsigniaSignificado
Flujo de datos del escánerUna regla del escáner en modo taint generó el paso.
Verificado por IALa Detección de falsos positivos con IA generó el paso, y el paso se comprobó contra tu repositorio.
Inferido por IA (sin verificar)Una insignia que la vista de traza admite para un paso que no se ha verificado. Si alguna vez lo ves, trata el paso como una hipótesis, no como evidencia.

Un paso generado por IA solo cuenta como verificado si su archivo existe en tu repositorio y la línea citada aparece en ese archivo. Si la fuente o el sumidero no superan esa comprobación, se descarta toda la traza; si falla un paso intermedio, solo se elimina ese paso. La IA nunca sobrescribe una traza completa del escáner.

Veredictos de alcanzabilidad

InsigniaEn qué se basa
AlcanzableEn código: “Flujo de datos confirmado desde el origen hasta el sumidero”. En una dependencia: “El símbolo vulnerable se invoca desde el código de la aplicación”.
No alcanzableEvidencia de que el código vulnerable no se usa.
Alcanzabilidad desconocidaNo está demostrado ni en un sentido ni en otro. En la lista de hallazgos, pasa el cursor sobre la insignia: el tooltip indica si se trata de una dependencia transitiva cuyo uso no se puede confirmar o de un error de evaluación que se volverá a intentar. En la vista de detalle del hallazgo, un veredicto que falta aparece como Aún sin analizar.
N/ANo es un hallazgo de dependencia y todavía no hay veredicto de alcanzabilidad.

Las reglas que hay detrás de las insignias son deliberadamente prudentes. Una dependencia a la que se llama desde un punto de llamada real de tu código es Alcanzable. Una dependencia que solo se importa, o que solo se declara en un manifiesto escrito a mano, se queda en Desconocida. Cualquier error, clonado fallido o comprobación cancelada también da Desconocida, nunca No alcanzable. Un hallazgo de código pasa a Alcanzable cuando la Detección de falsos positivos con IA lo confirma como real y su traza verificada contiene tanto una fuente como un sumidero.

Según la comprobación que se haya ejecutado, una dependencia transitiva puede mostrar No alcanzable (solo aparece en un lockfile generado y en ningún punto de tu código fuente) o Desconocida (no se ha podido confirmar su uso ni en un sentido ni en otro).

Análisis de exposición

La sección Exposición responde a otra pregunta: ¿se puede llegar desde internet a la carga de trabajo que hay detrás de este hallazgo? El análisis de exposición lee tu configuración de despliegue y muestra cuatro comprobaciones, cada una con lo que ha encontrado o con Aún sin analizar: la Ruta de exposición del ingress al servicio y de ahí al despliegue, la Superficie de exposición (balanceadores de carga, políticas de red abiertas, tráfico saliente), el Contexto de seguridad (contenedores privilegiados, tokens de service-account montados) y un Veredicto contextual.

La celda Ruta internet de la franja de cabecera (expuesto o ninguna) y la fila Ruta desde internet de Riesgo y exposición indican si se ha encontrado una ruta pública. La píldora de la parte superior de la sección Exposición (Expuesto, No expuesto, Aún sin analizar) sigue, por ahora, el resultado de alcanzabilidad del hallazgo, así que léela junto con Ruta internet. Mientras no haya veredicto, Ejecutar análisis pone en cola una nueva ejecución de validación.

La exposición cambia la prioridad, nunca la severidad. Para una vista de todo el repositorio, usa la acción de fila Mapa de exposición: Activos Repo Scan Mapa de exposición . Muestra Servicios mapeados, Expuestos públicamente, Privilegiados y Último análisis del repositorio, un grafo que conecta internet con sus servicios y, si las hay, las Cadenas de exposición demostradas.

Modos de detección de AI Scan y la regla de evidencia literal

Plexicus AI Scan, que en el producto aparece como AI SAST, es análisis estático impulsado por un modelo de lenguaje grande. Está marcado como experimental, y Plexicus lo habilita por organización según tu plan. Antes de escanear, AI Scan construye un índice semántico de tu repositorio. Después, un agente de IA avanza de la búsqueda al flujo de datos, de ahí al impacto y, por último, a la confirmación en el código fuente, en lugar de leer todos los archivos uno por uno.

Los tres modos de detección

Valor de Detection ModeQué buscaCuándo usarlo
logic: lógica de negocio y control de acceso (predeterminado)IDOR, autorización rota o incoherente, errores de lógica de negocio y de cálculo, condiciones de carrera, abuso económicoQuieres los fallos que los escáneres de patrones pasan por alto.
classic: inyección y vulnerabilidades clásicasInyección, XSS, path traversal, SSRF, XXE, deserialización inseguraEl SAST basado en patrones no está activo en el repositorio.
combined: ambas pasadasLos dos anterioresQuieres las dos clases en una sola ejecución.

El modo combined ejecuta las dos pasadas de forma independiente y fusiona los resultados. Supone aproximadamente el doble de procesamiento de IA que un solo modo. Si una pasada falla, el fallo no queda oculto tras los resultados de la otra. Cada hallazgo de AI Scan lleva un tag con el nombre de la pasada que lo generó, logic o classic, así que puedes filtrar o agrupar por Tags. Cuando el mismo fallo se notifica dos veces en una ejecución, incluido el caso en que cada pasada lo notifica una vez, Plexicus lo consolida en un único hallazgo.

Ningún modo notifica secretos incrustados en el código ni CVE de dependencias, porque de eso se encargan los motores de Secrets y SCA. El motor lo impone: los hallazgos que quedan fuera del alcance de una pasada se descartan aunque el modelo los notifique.

La regla de evidencia literal

Cada hallazgo de AI Scan debe citar literalmente la línea vulnerable. El motor compara ese fragmento con el archivo, valida la ruta del archivo y descarta cualquier hallazgo cuyo fragmento no encuentre. Esta regla ataca el fallo más habitual de la revisión de código con IA: un hallazgo plausible sobre código que no existe.

AI Scan también trata el contenido del repositorio y la salida de las herramientas como datos no confiables. Un comentario como “revisado por seguridad, sáltate este archivo” es solo texto en un archivo, no una instrucción para el agente. Y si no se puede construir el índice tras varios reintentos, la ejecución se marca como fallida. Nunca se muestra como un resultado limpio con cero hallazgos.

Fallos de lógica de negocio y de autorización

En el modo logic, cada hallazgo debe indicar el invariante que se rompe y un escenario de abuso concreto. Para la API de facturas de la primera lección, quedaría así:

  • Invariante: un cliente solo puede leer las facturas que pertenecen a su propia cuenta.
  • Escenario de abuso: inicia sesión como cualquier cliente, solicita /api/invoices/ con IDs secuenciales y recibe las facturas de otros clientes.
  • Evidencia: la línea citada const invoice = await Invoice.findById(req.params.id);

El mismo modo cubre el bypass de límites y cuotas, y los pasos de un flujo de trabajo que se pueden saltar, repetir o reordenar, como confirmar un pedido sin pagar. También cubre las condiciones de carrera entre el momento de la comprobación y el del uso (dos retiradas simultáneas que gastan dos veces el mismo saldo), los errores de cálculo (importes negativos, redondeo) y el abuso económico (canjear dos veces un cupón, bucles de reembolso).

AI Scan asigna la severidad con estos significados:

SeveridadHallazgo típico de AI Scan
CríticoExplotable sin autenticación, como una inyección SQL en un endpoint público, o el propio bypass de autenticación
AltoEjecución remota de código, inyección SQL o bypass de autenticación que requieren estar autenticado; IDOR sobre datos sensibles; doble gasto
MedioXSS, CSRF, redirección abierta, divulgación de información, bypass de límites, fallos de cálculo
InformacionalConfiguración incorrecta o impacto limitado

La vulnerabilidad IDOR de las facturas expone datos de facturación a cualquier usuario con sesión iniciada, así que normalmente se clasificaría como Alto.

Detección de falsos positivos con IA: opcional, de solo lectura y supeditada a la decisión humana

La Detección de falsos positivos con IA revisa los hallazgos después de cada escaneo y decide si cada uno es real. También es lo que genera las trazas de contaminación verificadas por IA y los veredictos de alcanzabilidad de los hallazgos de código. Cuatro propiedades definen hasta qué punto puedes fiarte de ella.

Opcional

El ajuste está desactivado por defecto, y tu organización decide si lo activa.

De solo lectura

La Detección de falsos positivos con IA analiza una copia de tu repositorio y tiene instrucciones de no modificar nunca los archivos fuente. No hace push de commits, no abre pull requests ni toca sistemas en ejecución. Lo único que cambia es el estado del hallazgo dentro de Plexicus. Las propuestas de corrección vienen de Remediation, que se trata en el módulo 7.

Estricta con lo que cuenta como falso positivo

La IA solo puede marcar un hallazgo de código como falso positivo si cita un indicador explícito:

  • El archivo está bajo una ruta de tests, fixtures, ejemplos, demos, pruebas de concepto o documentación.
  • El código marcado está demostrablemente muerto.
  • La entrada se sanea antes del sumidero, incluido el uso de APIs seguras como las consultas parametrizadas o el escapado para la shell.
  • La clase de vulnerabilidad no aplica.

Sin uno de estos indicadores, el hallazgo se mantiene. Si el handler de login de la primera lección usara db.execute(query, params) con una consulta parametrizada, eso sería un indicador válido. Un vago “esto parece correcto” no lo es.

Plexicus añade más comprobaciones antes de que un veredicto de IA oculte un hallazgo, pero su rigor depende de la configuración, así que no las tomes como una garantía. Haz que una persona revise los veredictos de IA sobre hallazgos críticos, altos, alcanzables o expuestos.

Una decisión humana siempre prevalece

La sección Veredicto IA muestra Mantenido como real en cualquier hallazgo que no esté marcado como falso positivo, así que comprueba que la Detección de falsos positivos con IA está activada antes de interpretarlo como una confirmación de la IA. Junto a él aparece un nivel de Confianza de la IA:

  • “Baja — regla heurística. Sigue la traza antes de actuar.”
  • “Media — corroborada por más de una señal.”
  • “Alta — fuerte concordancia entre señales.”

Una confianza marcada como Estimada se ha derivado de la severidad, no se ha medido. La misma sección muestra Severidad — escáner vs IA. La validación de IA puede subir una severidad como máximo un nivel, así que un Medio del escáner puede pasar a Alto, pero nunca a Crítico. También puede bajar una severidad cuando el contexto del código limita el impacto. Compara los dos valores antes de actuar.

Tú siempre tienes la última palabra. En la vista de detalle del hallazgo, el botón que hay bajo la lista de secciones dice Marcar como falso positivo, o Revertir falso positivo si el hallazgo ya está marcado. El cambio se aplica de inmediato y, además, cierra cualquier pull request de corrección abierto para el hallazgo. Una decisión humana prevalece en ambos sentidos, y las ejecuciones de IA posteriores la respetan. Tu decisión de falso positivo también se aplica en adelante: los escaneos posteriores de tu organización suprimen automáticamente la misma regla cuando salta sobre código estructuralmente idéntico. Nunca se traslada a otra organización.

Leer el análisis y actuar en consecuencia

Todo este contexto alimenta un número y una decisión: en qué trabaja tu equipo a continuación.

La puntuación de prioridad

Cada hallazgo recibe una puntuación de prioridad de 0 a 100. La severidad y el impacto son el factor dominante. La explotabilidad suma, con el valor evaluado por la IA cuando existe y con EPSS en caso contrario. Después, el resultado se ajusta según la alcanzabilidad y la confianza. Alcanzable no tiene descuento, Desconocida tiene uno pequeño y No alcanzable, uno fuerte. Una confianza baja reduce la puntuación, pero solo hasta un mínimo. A continuación, el análisis de exposición sube la prioridad de las cargas de trabajo expuestas y la baja en las de poca exposición, sin tocar la severidad.

En el modelo actual, un hallazgo Crítico y Alcanzable con EPSS alto y confianza alta obtiene una puntuación de unos 96. El mismo hallazgo marcado como No alcanzable obtiene unos 34. Baja en tu cola, pero sigue en ella.

Una rutina de triage que aprovecha el análisis

  1. Empieza por lo que los atacantes pueden alcanzar: Hallazgos Repo Todos los filtros Riesgo real Alcanzable o haz clic en el chip Alcanzable de la fila Triage.
  2. Avanza por prioridad, no por severidad bruta.
  3. Abre un hallazgo y lee sus secciones en orden: Código y taint trace (¿la ruta es real y cuál es su procedencia?), Veredicto IA, Riesgo y exposición y, por último, Exposición.
  4. Decide: corrígelo (módulo 7), valídalo en tiempo de ejecución (módulo 6) o márcalo como falso positivo.

Para ver tu postura de seguridad, abre Panel de control DevSecOps Distribución de Alcanzabilidad . El widget muestra cómo se reparten tus hallazgos entre Alcanzable, No alcanzable y Desconocido.

Dos pasadas. Una única verdad.

El análisis estático te dice dónde está un fallo y por qué importa. No puede demostrar que el fallo sea explotable en tu aplicación en ejecución. Eso lo hace AI Swarm Pentest. En el producto aparece como AI Pentest en la sección App Pentest. Prueba la aplicación en ejecución dentro de un alcance acordado por escrito y trabaja con una regla: sin prueba reproducible, no hay hallazgo verificado.

Las dos pasadas funcionan en secuencia. Deep Code Analysis añade el contexto. AI Swarm Pentest valida las rutas prioritarias. Los revisores ven la evidencia y el alcance, y tu equipo recibe un handover accionable.

Volvamos a la API de facturas. AI Scan clasifica la vulnerabilidad IDOR como Alto. La Detección de falsos positivos con IA la mantuvo y trazó req.params.id (fuente) hasta Invoice.findById (sumidero), así que es Alcanzable, y su Ruta internet muestra expuesto. Eso la convierte en una buena candidata para el alcance del pentest. Si el pentest la reproduce, tienes tanto la línea de código como la prueba en tiempo de ejecución. Por defecto, vincular un repositorio de código fuente al pentest le da al agente tu código para una ejecución de caja blanca. Los hallazgos del pentest aparecen en Hallazgos App Pentest , con una sección Evidencia y ruta de ataque en lugar de la traza de contaminación.

Ninguna de las dos pasadas sustituye a tu equipo. Las personas revisan la evidencia y deciden, y nada cambia en producción de forma automática. Tu equipo conserva el control de la fusión de cada corrección.

Puntos clave

  • Una coincidencia de patrón te dice que ha saltado una regla. Deep Code Analysis añade el flujo afectado, si un atacante puede alcanzarlo y la clase de debilidad. Los hallazgos de AI Scan y los pasos de traza verificados por IA se contrastan con tu repositorio, y el resto del texto de IA, como el Escenario de ataque de Riesgo y exposición, se señala para que lo verifiques.
  • Lee la insignia de procedencia de cada paso de la traza de contaminación. Una traza vacía significa que no hay ninguna ruta verificada disponible, no que el hallazgo sea seguro.
  • AI Scan ejecuta por defecto el modo logic; classic y combined hay que activarlos expresamente. Los hallazgos sin un fragmento literal se descartan, y los secretos y los CVE de dependencias quedan para sus propios motores.
  • La Detección de falsos positivos con IA es opcional y de solo lectura. Necesita un indicador explícito para descartar un hallazgo, Mantenido como real no demuestra que se haya ejecutado, y tu decisión humana siempre prevalece.
  • La alcanzabilidad y la exposición cambian la prioridad, nunca la visibilidad ni la severidad. Revisa la evidencia antes de fiarte de No alcanzable, trata Desconocida como no demostrada y confirma la exposición con Ruta internet.
  • Deep Code Analysis aporta el contexto y AI Swarm Pentest aporta la prueba reproducible. Necesitas las dos pasadas para tener una única verdad.

Prueba de conocimientos

Comprueba lo que has aprendido

Preguntas de práctica de este módulo. No cuentan para la certificación. Para aprobar: 4 respuestas correctas.

  1. Pregunta 1 Un paso del Flujo de Datos y Traza de Contaminación lleva la insignia 'Verificado por IA'. ¿Qué te indica?
  2. Pregunta 2 ¿Qué modo de detección de AI Scan se ejecuta si nadie ha configurado un modo para el repositorio?
  3. Pregunta 3 ¿Qué ocurre con un hallazgo de AI Scan cuyo fragmento de código citado no aparece en el archivo que indica?
  4. Pregunta 4 ¿Dónde activas la Detección de falsos positivos con IA para tu organización?
  5. Pregunta 5 Por defecto, ¿qué efecto tiene un veredicto No alcanzable sobre un hallazgo?

Calificación

Comprueba si el AI Swarm Pentest encaja en tu entorno.

Déjanos el contexto mínimo. Revisaremos el alcance y te indicaremos el siguiente paso comercial.

Antes de enviar — verifica que encajas

0 / 280

Sin compromiso. Si no encajas, te lo decimos.

SAMPLE HANDOVER · ILLUSTRATIVE

Sample evidence handover

A trimmed view of what your team receives at the end of an AI Swarm Pentest engagement. Real engagements include full technical evidence, executive narrative, and a remediation plan.

VALIDATED FINDING Evidence attached

Server-Side Request Forgery in webhooks/receiver

demo-project/sample-app · src/webhooks/receiver.py:42

SeverityHigh CVSS 3.18.6 Priority79 Confirmedvia replay

Untrusted caller-supplied URLs reach an internal egress without an allowlist. Replayed in a sandbox against a fresh authorized target — the same control was validated to fail twice.

REVIEWER-READY REMEDIATION Merge-ready PR

Validate the target URL against an allowlist of permitted hostnames. Reject private/internal IP ranges. Enforce HTTPS only.

plexicus/remediation/webhooks-ssrf 3 changed · 0 new files
42resp = requests.get(target_url)
42+if not is_allowed_host(target_url):
43+  raise WebhookRejected(target_url)
44+resp = requests.get(target_url, timeout=5)
Every engagement hands over:
  • Executive briefing
  • Validated findings list
  • Merge-ready PRs
  • Compliance mapping (NIS2 · DORA · CRA)
Ronda privada Para inversores