Webinar em inglêsWebinar com Jason Lee, quarta, 14/10Your newest insider is an AI agent.Jason LeeFormer CISO, Zoom & SplunkInscreva-se

Só as falhas que um atacante consegue alcançar.

Cada falha seguida do ponto de entrada até à linha, com a sua correção.

checkout-apiSASTProjeto de demonstração
  • AltaInjeção SQLusers.controller.ts:10

    CWE-89, alcançável a partir de GET /users/:id

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

    Correção prontaConsulta parametrizada, reescrita na mesma sessão

Falhas alcançáveis, cada uma com a sua correção.

  • Falhas alcançáveis

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

    • Equipa de Pagamentos Bloquear na pull request
    • Equipa de Growth Só avisar
  • Fluxos de dados que conhecem o teu framework

    • Expressreq.params.id
    • Djangorequest.GET["id"]
    • Spring@PathVariable id
  • Uma correção para cada descoberta

    Um patch no teu editor, ou uma pull request assinada com um teste de regressão.

Nove em cada dez alertas por padrão são falsos.

91%

das vulnerabilidades assinaladas por scanners baseados em padrões em quase 3000 repositórios open source eram falsos positivos.

Ghost Security, Exorcising the SAST Demons, 2025

Um scanner por padrões

  • Alerta: Possível injeção SQLusers.controller.ts:10
  • Alerta: Possível injeção SQLPOST /avatar
  • Alerta: Possível injeção SQLGET /export

CybeDefend

  • Alcançável: Injeção SQLusers.controller.ts:10
  • Descartada: Linha assinalada, não chega a nenhum sinkPOST /avatar
  • Descartada: Linha assinalada, não chega a nenhum sinkGET /export

Corrigido pelo teu agente, antes do commit.

O teu agente lê estas falhas enquanto escreve e corrige-as antes do commit.

  1. SASTAnalisa o repositório em cada push.Detetada
  2. VibeDefendPassa a descoberta ao teu agente de código.Servida
  3. O teu agenteCorrige-a na sessão.Corrigida
  4. CommitEntra sem a falha.Limpo
  • Claude Code
  • Cursor
  • Windsurf
  • GitHub Copilot
  • OpenAI Codex

Começa por um repositório.

Liga o GitHub, o GitLab, o Bitbucket ou o Azure DevOps, escolhe um repositório e a primeira análise arranca.

Em detalhe

Cada descoberta: o caminho, a linha, a correção.
  • Falhas alcançáveis

    Rastreadas desde um ponto de entrada, como GET /users/:id, até ao sink.

  • O caminho de exploração

    A rota, o ficheiro e a linha, para que qualquer pessoa da equipa o consiga reproduzir.

  • Fluxos de dados que conhecem o teu framework

    Express, Spring, Django, Rails, Laravel, ASP.NET, Gin, Fastify e os principais ORM.

  • Uma correção para cada descoberta

    Um patch no teu editor, ou uma pull request assinada com um teste de regressão.

  • A tua política

    Gravidade e âmbito definidos por equipa. Bloquear na pull request, ou só avisar.

Tudo o que verifica

O que o nosso SAST vê e o teu não.

Uma falha real por linguagem, com a linha assinalada e a correção.

  • JavaScript (Express)

    Cross-site scripting. O nome que vem da query string chega ao HTML sem escape.

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

    Contorno de autorização (IDOR). Qualquer utilizador com sessão iniciada lê qualquer fatura só por mudar o id.

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

    Injeção SQL. O termo de pesquisa é colado no SQL, por isso uma aspa reescreve a 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. Um nome como ../../etc/passwd sai da pasta uploads.

    AltaCWE-22
    c.File(filepath.Join("uploads", name))c.File(filepath.Join("uploads", filepath.Base(name)))
Mais 12 linguagens, uma falha em cada
  • Java (Spring)

    Entidades externas XML. O parser resolve entidades externas, por isso um upload consegue ler ficheiros locais.

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

    Hash de palavra-passe fraco. O MD5 é rápido e não tem salt: hashes que vazam são baratos de quebrar.

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

    Open redirect. O returnUrl aceita qualquer site, por isso o login acaba na página de um atacante.

    MédiaCWE-601
    return Redirect(returnUrl);return LocalRedirect(returnUrl);
  • Ruby (Rails)

    Atribuição em massa. O permit! aceita todos os atributos, incluindo admin.

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

    Desserialização insegura. Um cookie forjado é desserializado em objetos vivos.

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

    Injeção de comandos do sistema. O nome do ficheiro chega a uma shell: um nome com ; executa um comando.

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

    Token guardado em texto simples. O token de sessão fica no UserDefaults, legível a partir de uma cópia de segurança do dispositivo.

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

    Aleatoriedade fraca num token de reposição. O scala.util.Random é previsível, por isso os tokens de reposição podem ser adivinhados.

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

    Cross-site request forgery. As rotas do browser aceitam POST de qualquer site, sem verificar o token CSRF.

    AltaCWE-352
    plug :fetch_sessionplug :protect_from_forgery
  • Solidity

    Reentrância. O ether sai antes de o saldo baixar, por isso o withdraw pode ser chamado de novo.

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

    Buffer overflow. Um nome com mais de 31 bytes transborda o buffer da stack.

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

    Verificação de integridade em falta. Sem hash de integridade: um ficheiro de CDN adulterado corre com acesso total à página.

    MédiaCWE-353
    <script src="https://cdn.example/chart.js"></script><script src="/static/vendor/chart.js"></script>
Segurança do código em tempo real, onde o teu código vive.

Erros e avisos acumulam-se enquanto o agente escreve. Apanhados antes da pull request.

  • Feedback em tempo real

    Analisa e protege o teu código em tempo real durante o desenvolvimento: em agent-time, não na CI noturna.

  • Tecnologia de IA híbrida

    A nossa solução combina grandes modelos de linguagem com análise tradicional de taint e reachability.

  • Ferramentas de colaboração

    As descobertas chegam ao Jira, ao GitHub Issues, ao GitLab Issues e ao Slack.

  • Suporte abrangente de linguagens

    Dezoito linguagens e todos os frameworks web que vale a pena pôr em produção.

  • Correções e remediação automatizadas

    Patches gerados por IA chegam diretamente ao IDE ou como PR assinada com um teste de regressão anexado.

  • Políticas personalizáveis

    Ajusta a gravidade, o âmbito e a atribuição por equipa. Bloqueia na PR ou só avisa.

  • Relatórios pensados para programadores

    Cada descoberta vem com uma explicação de 3 linhas em linguagem simples, o caminho de exploração reproduzível, o ficheiro e a linha, e o patch sugerido.

Do alerta à correção
  • A linha é assinalada.

    Explorável e alcançável, não um simples padrão.

  • Julgada no ciclo.

    As tuas regras carregadas, um veredicto antes de guardar.

  • Corrigida na linha.

    O agente reescreve-a na mesma sessão.

Perguntas frequentes sobre o CybeDefend SAST.

Em que é que o CybeDefend SAST é diferente de scanners tradicionais como o Semgrep, o Snyk Code ou o Checkmarx?
O SAST tradicional corre sobre os commits e afoga os problemas reais em ruído. Quando a Ghost Security passou scanners baseados em padrões por quase 3000 repositórios open source em 2025, mais de 91% das vulnerabilidades assinaladas eram falsos positivos. A CybeDefend atua em agent-time sobre o diff que o teu agente de IA está prestes a escrever, antes mesmo de o ficheiro ser guardado. Combinamos o rastreio de reachability (este caminho de taint chega mesmo a um sink?), modelos de fluxo de dados adaptados a cada framework, que cobrem Express, Spring, Django, Rails, ASP.NET e os principais ORM, e uma pontuação por caminho de exploração que ordena as descobertas pela explorabilidade real e não pelo número de correspondências. Em repositórios de produção, a nossa fila verificada é curta o suficiente para ser triada em minutos e não em dias. Além disso, cada descoberta chega com uma correção verificada gerada por IA, enquanto a maioria dos scanners tradicionais se fica pelo alerta. O resultado: muito menos falsos positivos, segurança aplicada antes de a PR existir e uma remediação automatizada que o teu agente pode aplicar na mesma sessão.
Que linguagens e frameworks são suportados?
Dezoito linguagens: JavaScript, TypeScript, Python, Go, Java, Kotlin, Rust, C# / .NET, Ruby, PHP, Swift, Scala, Elixir e Solidity, além de C / C++, HTML e outras. Os modelos de fluxo de dados adaptados a cada framework cobrem Express, Spring, Django, Rails, Phoenix, Laravel, ASP.NET, Gin, Fastify e os principais ORM. Todos os meses são acrescentados novos frameworks.
O CybeDefend SAST integra-se com o IDE e a CI que já uso?
Sim. Disponibilizamos um servidor MCP nativo, por isso qualquer agente compatível com MCP (Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini) recebe os veredictos diretamente. Há plugins dedicados para o VS Code e a família JetBrains (IntelliJ, PhpStorm, WebStorm, PyCharm, DataGrip, Rider, CLion, RustRover, GoLand, RubyMine, AppCode). Integração nativa na CI com o GitHub Actions e o GitLab CI; uma API REST e uma CLI cobrem qualquer outro sistema.
E os falsos positivos?
A IA híbrida e o rastreio de reachability aproximam de zero os falsos positivos da fila verificada. As descobertas que o motor não consegue confirmar são marcadas como 'reachable but cold' ou 'unreachable' e perdem prioridade, sem nunca gerar alertas. Resultado em repositórios reais de clientes: muito menos falsos positivos em SAST, SCA, IaC e segredos, com a fila verificada curta o suficiente para ser triada em minutos, não em dias.