Webinar en inglésWebinar con Jason Lee, mié, 14 octYour newest insider is an AI agent.Jason LeeFormer CISO, Zoom & SplunkInscríbete

Solo los fallos que un atacante puede alcanzar.

Cada hallazgo seguido desde el punto de entrada hasta la línea, con su corrección.

checkout-apiSASTProyecto de demostración
  • AltaInyección SQLusers.controller.ts:10

    CWE-89, alcanzable desde GET /users/:id

    db.query(`SELECT * FROM users WHERE id=${id}`)db.query("SELECT * FROM users WHERE id = $1", [id])

    Corrección listaConsulta parametrizada, reescrita en la misma sesión

Fallos alcanzables, cada uno con su corrección.

  • Fallos alcanzables

    1. GET /users/:id
    2. users.controller.ts:10
    3. db.query()
  • Tu política

    • Equipo de Pagos Bloquear en la pull request
    • Equipo de Growth Solo avisar
  • Flujos de datos que conocen tu framework

    • Expressreq.params.id
    • Djangorequest.GET["id"]
    • Spring@PathVariable id
  • Una corrección con cada hallazgo

    Un parche en tu editor, o una pull request firmada con un test de regresión.

Nueve de cada diez alertas por patrón son falsas.

91 %

de las vulnerabilidades que señalaron los escáneres basados en patrones en casi 3000 repositorios open source eran falsos positivos.

Ghost Security, Exorcising the SAST Demons, 2025

Un escáner por patrones

  • Alerta: Posible inyección SQLusers.controller.ts:10
  • Alerta: Posible inyección SQLPOST /avatar
  • Alerta: Posible inyección SQLGET /export

CybeDefend

  • Alcanzable: Inyección SQLusers.controller.ts:10
  • Descartado: Línea señalada, no llega a ningún sinkPOST /avatar
  • Descartado: Línea señalada, no llega a ningún sinkGET /export

Corregido por tu agente, antes del commit.

Tu agente lee estos hallazgos mientras escribe y los corrige antes del commit.

  1. SASTEscanea el repositorio en cada push.Detectado
  2. VibeDefendLe pasa el hallazgo a tu agente de código.Servido
  3. Tu agenteLo corrige en la sesión.Corregido
  4. CommitEntra sin el fallo.Limpio
  • Claude Code
  • Cursor
  • Windsurf
  • GitHub Copilot
  • OpenAI Codex

Empieza por un repositorio.

Conecta GitHub, GitLab, Bitbucket o Azure DevOps, elige un repositorio y el primer escaneo arranca.

En detalle

Cada hallazgo: el camino, la línea, la corrección.
  • Fallos alcanzables

    Rastreados desde un punto de entrada, como GET /users/:id, hasta el sink.

  • La ruta de explotación

    La ruta, el archivo y la línea, para que cualquiera del equipo pueda reproducirlo.

  • Flujos de datos que conocen tu framework

    Express, Spring, Django, Rails, Laravel, ASP.NET, Gin, Fastify y los principales ORM.

  • Una corrección con cada hallazgo

    Un parche en tu editor, o una pull request firmada con un test de regresión.

  • Tu política

    Gravedad y alcance por equipo. Bloquear en la pull request, o solo avisar.

Todo lo que revisa

Lo que ve nuestro SAST y el tuyo no.

Un hallazgo real por lenguaje, con la línea señalada y su corrección.

  • JavaScript (Express)

    Cross-site scripting. El nombre de la query string llega al HTML sin escapar.

    AltaCWE-79
    res.send(`<h1>Hi ${req.query.name}</h1>`);res.send(`<h1>Hi ${escapeHtml(req.query.name)}</h1>`);
  • TypeScript (Fastify)

    Elusión de autorización (IDOR). Cualquier usuario con sesión iniciada lee cualquier factura con solo cambiar el id.

    AltaCWE-639
    return db.invoice.findUnique({ where: { id } });return db.invoice.findFirst({ where: { id, ownerId: req.user.id } });
  • Python (Django)

    Inyección SQL. El término de búsqueda se pega dentro del SQL, así que una comilla reescribe la consulta.

    CríticaCWE-89
    cursor.execute(f"SELECT * FROM books WHERE title = '{q}'")cursor.execute("SELECT * FROM books WHERE title = %s", [q])
  • Go (Gin)

    Path traversal. Un nombre como ../../etc/passwd se sale de la carpeta uploads.

    AltaCWE-22
    c.File(filepath.Join("uploads", name))c.File(filepath.Join("uploads", filepath.Base(name)))
12 lenguajes más, un hallazgo en cada uno
  • Java (Spring)

    Entidades externas XML. El parser resuelve entidades externas, así que una subida puede leer archivos locales.

    AltaCWE-611
    var doc = dbf.newDocumentBuilder().parse(f.getInputStream());dbf.setAttribute(XMLConstants.ACCESS_EXTERNAL_DTD, "");
  • Kotlin (Spring)

    Hash de contraseña débil. MD5 es rápido y no lleva sal: los hashes filtrados se rompen con poco esfuerzo.

    AltaCWE-916
    val md = MessageDigest.getInstance("MD5")users.save(form.email, encoder.encode(form.password))
  • C# / .NET (ASP.NET)

    Open redirect. returnUrl acepta cualquier sitio, así que el login termina en la página de un atacante.

    MediaCWE-601
    return Redirect(returnUrl);return LocalRedirect(returnUrl);
  • Ruby (Rails)

    Asignación masiva. permit! acepta todos los atributos, admin incluido.

    AltaCWE-915
    @user.update(params.require(:user).permit!)@user.update(params.require(:user).permit(:name, :email))
  • PHP (Laravel)

    Deserialización insegura. Una cookie manipulada se deserializa en objetos vivos.

    CríticaCWE-502
    $cart = unserialize($request->cookie('cart'));$cart = json_decode($request->cookie('cart'), true);
  • Rust

    Inyección de comandos del sistema. El nombre del archivo llega a un shell: un nombre con ; ejecuta un comando.

    CríticaCWE-78
    Command::new("sh").arg("-c").arg(cmd).status()Command::new("convert").args([name, "thumb.png"]).status()
  • Swift

    Token guardado en texto plano. El token de sesión queda en UserDefaults, legible desde una copia de seguridad del dispositivo.

    MediaCWE-312
    UserDefaults.standard.set(reply.token, forKey: "token")try keychain.save(reply.token, account: "token")
  • Scala

    Aleatoriedad débil en un token de restablecimiento. scala.util.Random es predecible, así que los tokens de restablecimiento se pueden adivinar.

    AltaCWE-338
    val token = Random.alphanumeric.take(32).mkStringval token = UUID.randomUUID().toString
  • Elixir (Phoenix)

    Cross-site request forgery. Las rutas del navegador aceptan POST de cualquier sitio, sin comprobar el token CSRF.

    AltaCWE-352
    plug :fetch_sessionplug :protect_from_forgery
  • Solidity

    Reentrada. El ether sale antes de que baje el saldo, así que withdraw puede volver a llamarse.

    CríticaCWE-841
    payable(msg.sender).call{value: amount}("");balances[msg.sender] -= amount;payable(msg.sender).transfer(amount);
  • C / C++

    Desbordamiento de búfer. Un nombre de más de 31 bytes desborda el búfer de la pila.

    CríticaCWE-120
    strcpy(name, argv[1]);snprintf(name, sizeof name, "%s", argv[1]);
  • HTML

    Falta el control de integridad. Sin hash de integridad: un archivo de CDN alterado se ejecuta con acceso total a la página.

    MediaCWE-353
    <script src="https://cdn.example/chart.js"></script><script src="/static/vendor/chart.js"></script>
Seguridad del código en tiempo real, donde vive tu código.

Errores y avisos se acumulan mientras el agente escribe. Detectados antes de la pull request.

  • Feedback en tiempo real

    Escanea y protege tu código en tiempo real mientras desarrollas: en agent-time, no en la CI nocturna.

  • Tecnología de IA híbrida

    Nuestra solución combina grandes modelos de lenguaje con análisis tradicional de taint y reachability.

  • Herramientas de colaboración

    Los hallazgos llegan a Jira, GitHub Issues, GitLab Issues y Slack.

  • Amplia compatibilidad de lenguajes

    Dieciocho lenguajes y todos los frameworks web que merece la pena usar en producción.

  • Correcciones y remediación automatizadas

    Parches generados por IA que llegan directamente al IDE o como una PR firmada con un test de regresión adjunto.

  • Políticas personalizables

    Ajusta la gravedad, el alcance y el ámbito de cada equipo. Bloquea en la PR o solo avisa.

  • Informes pensados para desarrolladores

    Cada hallazgo incluye una explicación de 3 líneas en lenguaje claro, la ruta de explotación reproducible, el archivo y la línea, y el parche sugerido.

De la alerta a la corrección
  • La línea queda marcada.

    Explotable y alcanzable, no un simple patrón.

  • Juzgada en el bucle.

    Tus reglas cargadas, un veredicto antes de guardar.

  • Corregida en la línea.

    El agente la reescribe en la misma sesión.

Preguntas frecuentes sobre CybeDefend SAST.

¿En qué se diferencia CybeDefend SAST de escáneres tradicionales como Semgrep, Snyk Code o Checkmarx?
El SAST tradicional se ejecuta sobre los commits y entierra los problemas reales bajo el ruido. Cuando Ghost Security pasó escáneres basados en patrones por casi 3.000 repositorios open source en 2025, más del 91 % de las vulnerabilidades señaladas resultaron ser falsos positivos. CybeDefend actúa en agent-time sobre el diff que tu agente de IA está a punto de escribir, antes incluso de que se guarde el archivo. Combinamos el trazado de reachability (¿esta ruta de taint llega de verdad a un sink?), modelos de flujo de datos adaptados a cada framework que cubren Express, Spring, Django, Rails, ASP.NET y los principales ORM, y una puntuación por ruta de explotación que ordena los hallazgos por su explotabilidad real y no por el número de coincidencias. En repositorios de producción, nuestra cola verificada es lo bastante corta como para revisarla en minutos y no en días. Además, cada hallazgo llega con una corrección verificada generada por IA, mientras que la mayoría de los escáneres tradicionales se quedan en la alerta. Resultado: muchos menos falsos positivos, seguridad aplicada antes de que exista la PR y una remediación automatizada que tu agente puede aplicar en la misma sesión.
¿Qué lenguajes y frameworks admite CybeDefend SAST?
Dieciocho lenguajes: JavaScript, TypeScript, Python, Go, Java, Kotlin, Rust, C# / .NET, Ruby, PHP, Swift, Scala, Elixir y Solidity, además de C / C++, HTML y otros. Los modelos de flujo de datos adaptados a cada framework cubren Express, Spring, Django, Rails, Phoenix, Laravel, ASP.NET, Gin, Fastify y los principales ORM. Cada mes se añaden frameworks nuevos.
¿CybeDefend SAST se integra con mi IDE y mi CI?
Sí. Incluimos un servidor MCP nativo, así que cualquier agente compatible con MCP (Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini) recibe los veredictos directamente. Hay plugins dedicados para VS Code y la familia JetBrains (IntelliJ, PhpStorm, WebStorm, PyCharm, DataGrip, Rider, CLion, RustRover, GoLand, RubyMine, AppCode). Integración nativa en la CI con GitHub Actions y GitLab CI; una API REST y una CLI cubren cualquier otro sistema.
¿Y los falsos positivos?
La IA híbrida y el trazado de reachability acercan a cero los falsos positivos de la cola verificada. Los hallazgos que el motor no puede confirmar se etiquetan como 'reachable but cold' o 'unreachable' y bajan de prioridad, sin generar nunca una alerta. Resultado en repositorios reales de clientes: muchos menos falsos positivos en SAST, SCA, IaC y secretos, con una cola verificada lo bastante corta como para revisarla en minutos, no en días.