Webinar in ingleseWebinar con Jason Lee, mer 14 ottYour newest insider is an AI agent.Jason LeeFormer CISO, Zoom & SplunkIscriviti

Solo le falle che un attaccante può raggiungere.

Ogni falla seguita dal punto di ingresso fino alla riga, con la sua correzione.

checkout-apiSASTProgetto dimostrativo
  • AltaSQL injectionusers.controller.ts:10

    CWE-89, raggiungibile da GET /users/:id

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

    Fix prontoQuery parametrizzata, riscritta nella stessa sessione

Falle raggiungibili, ognuna con la sua correzione.

  • Falle raggiungibili

    1. GET /users/:id
    2. users.controller.ts:10
    3. db.query()
  • La tua policy

    • Team Pagamenti Blocca alla pull request
    • Team Growth Solo avviso
  • Flussi di dati che conoscono il tuo framework

    • Expressreq.params.id
    • Djangorequest.GET["id"]
    • Spring@PathVariable id
  • Un fix per ogni finding

    Una patch nel tuo editor, oppure una pull request firmata con un test di regressione.

Nove alert su dieci dei pattern sono falsi allarmi.

91%

delle vulnerabilità segnalate da scanner basati su pattern su quasi 3.000 repository open source erano falsi positivi.

Ghost Security, Exorcising the SAST Demons, 2025

Uno scanner a pattern

  • Alert: Possibile SQL injectionusers.controller.ts:10
  • Alert: Possibile SQL injectionPOST /avatar
  • Alert: Possibile SQL injectionGET /export

CybeDefend

  • Raggiungibile: SQL injectionusers.controller.ts:10
  • Scartato: Riga segnalata, non raggiunge nessun sinkPOST /avatar
  • Scartato: Riga segnalata, non raggiunge nessun sinkGET /export

Corretto dal tuo agente, prima del commit.

Il tuo agente legge questi finding mentre scrive e li corregge prima del commit.

  1. SASTScansiona il repository a ogni push.Trovato
  2. VibeDefendPassa il finding al tuo agente di codice.Servito
  3. Il tuo agenteLo corregge nella sessione.Corretto
  4. CommitEntra senza la falla.Pulito
  • Claude Code
  • Cursor
  • Windsurf
  • GitHub Copilot
  • OpenAI Codex

Inizia da un repository.

Collega GitHub, GitLab, Bitbucket o Azure DevOps, scegli un repository e la prima scansione parte.

Nel dettaglio

Ogni finding: il percorso, la riga, la correzione.
  • Falle raggiungibili

    Tracciate da un punto di ingresso, come GET /users/:id, fino al sink.

  • Il percorso di exploit

    La route, il file e la riga, così chiunque nel team può riprodurlo.

  • Flussi di dati che conoscono il tuo framework

    Express, Spring, Django, Rails, Laravel, ASP.NET, Gin, Fastify e i principali ORM.

  • Un fix per ogni finding

    Una patch nel tuo editor, oppure una pull request firmata con un test di regressione.

  • La tua policy

    Gravità e ambito definiti per team. Blocca alla pull request, o avvisa soltanto.

Tutto quello che controlla

Quello che vede il nostro SAST e il tuo no.

Una vulnerabilità reale per linguaggio, con la riga segnalata e la sua correzione.

  • JavaScript (Express)

    Cross-site scripting. Il nome preso dalla query string finisce nell'HTML senza escape.

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

    Bypass dell'autorizzazione (IDOR). Qualsiasi utente autenticato legge qualsiasi fattura cambiando l'id.

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

    SQL injection. Il termine di ricerca finisce dentro l'SQL, quindi un apice riscrive la query.

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

    Path traversal. Un nome come ../../etc/passwd esce dalla cartella uploads.

    AltaCWE-22
    c.File(filepath.Join("uploads", name))c.File(filepath.Join("uploads", filepath.Base(name)))
Altri 12 linguaggi, una vulnerabilità ciascuno
  • Java (Spring)

    Entità esterne XML. Il parser risolve le entità esterne, quindi un upload può leggere file locali.

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

    Hash della password debole. MD5 è veloce e senza salt: gli hash trapelati si craccano con poco.

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

    Open redirect. returnUrl accetta qualsiasi sito, quindi il login finisce sulla pagina di un attaccante.

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

    Mass assignment. permit! accetta tutti gli attributi, admin compreso.

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

    Deserializzazione non sicura. Un cookie costruito ad arte viene deserializzato in oggetti vivi.

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

    OS command injection. Il nome del file arriva a una shell: un nome con ; esegue un comando.

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

    Token salvato in chiaro. Il token di sessione resta in UserDefaults, leggibile da un backup del dispositivo.

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

    Casualità debole per un token di reset. scala.util.Random è prevedibile, quindi i token di reset si possono indovinare.

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

    Cross-site request forgery. Le route del browser accettano POST da qualsiasi sito, senza controllare il token CSRF.

    AltaCWE-352
    plug :fetch_sessionplug :protect_from_forgery
  • Solidity

    Reentrancy. L'ether esce prima che il saldo scenda, quindi withdraw può essere richiamata.

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

    Buffer overflow. Un nome più lungo di 31 byte manda in overflow il buffer sullo stack.

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

    Controllo di integrità mancante. Nessun hash di integrità: un file CDN manomesso gira con accesso completo alla pagina.

    MediaCWE-353
    <script src="https://cdn.example/chart.js"></script><script src="/static/vendor/chart.js"></script>
Sicurezza del codice in tempo reale, dove vive il tuo codice.

Errori e avvisi si accumulano mentre l'agente scrive. Intercettati prima della pull request.

  • Feedback in tempo reale

    Analizza e metti in sicurezza il tuo codice in tempo reale durante lo sviluppo, in agent-time, non in una CI notturna.

  • Tecnologia AI ibrida

    La nostra soluzione combina i large language model con la classica analisi taint e di reachability.

  • Strumenti di collaborazione

    I finding finiscono in Jira, GitHub Issues, GitLab Issues e Slack.

  • Ampio supporto dei linguaggi

    Diciotto linguaggi e tutti i principali framework web.

  • Fix e remediation automatici

    Le patch generate dall'AI arrivano direttamente nell'IDE o come PR firmata con test di regressione allegato.

  • Policy personalizzabili

    Regola gravità, perimetro e ambito per team. Blocca in PR o limitati a un avviso.

  • Report pensati per gli sviluppatori

    Ogni finding arriva con una spiegazione di 3 righe in linguaggio semplice, il percorso di exploit riproducibile, file e riga, e la patch suggerita.

Dalla segnalazione al fix
  • La riga è segnalata.

    Sfruttabile e raggiungibile, non un semplice pattern.

  • Giudicata nel loop.

    Le tue regole caricate, un verdetto prima del salvataggio.

  • Corretta sulla riga.

    L'agente la riscrive nella stessa sessione.

Domande frequenti su CybeDefend SAST.

In cosa si distingue CybeDefend SAST da scanner tradizionali come Semgrep, Snyk Code o Checkmarx?
Il SAST tradizionale gira sui commit e seppellisce i problemi reali sotto il rumore. Quando nel 2025 Ghost Security ha fatto girare scanner basati su pattern su quasi 3.000 repository open source, oltre il 91% delle vulnerabilità segnalate si è rivelato un falso positivo. CybeDefend lavora in agent-time sul diff che il tuo agente AI sta per scrivere, prima ancora che il file venga salvato. Combiniamo il tracciamento della reachability (questo percorso di taint raggiunge davvero un sink?), modelli di data flow che conoscono Express, Spring, Django, Rails, ASP.NET e i principali ORM, e un punteggio sul percorso di exploit che ordina i finding per sfruttabilità reale anziché per numero di corrispondenze. Sui repository in produzione, la nostra coda verificata resta abbastanza corta da essere smistata in minuti invece che in giorni. Insieme a ogni finding forniamo anche correzioni verificate generate dall'AI, mentre la maggior parte degli scanner tradizionali si ferma all'alert. Il risultato: drasticamente meno falsi positivi, sicurezza applicata prima ancora che esista la PR e una remediation automatica che il tuo agente può applicare nella stessa sessione.
Quali linguaggi e framework supportate?
Diciotto linguaggi: JavaScript, TypeScript, Python, Go, Java, Kotlin, Rust, C# / .NET, Ruby, PHP, Swift, Scala, Elixir, Solidity, più C / C++, HTML e altri. I modelli di data flow specifici per framework coprono Express, Spring, Django, Rails, Phoenix, Laravel, ASP.NET, Gin, Fastify e i principali ORM. Nuovi framework arrivano ogni mese.
CybeDefend SAST si integra con il mio IDE e la mia CI esistenti?
Sì. Mettiamo a disposizione un server MCP nativo, così qualsiasi agente compatibile con MCP (Claude Code, Cursor, Windsurf, GitHub Copilot, Gemini) riceve direttamente i verdetti. Plugin dedicati sono disponibili per VS Code e la famiglia JetBrains (IntelliJ, PhpStorm, WebStorm, PyCharm, DataGrip, Rider, CLion, RustRover, GoLand, RubyMine, AppCode). Integrazione CI completa su GitHub Actions e GitLab CI; un'API REST e una CLI coprono qualsiasi altro sistema tu usi.
E i falsi positivi?
L'AI ibrida e il tracciamento della reachability portano i falsi positivi vicino allo zero nella coda verificata. I finding che il motore non riesce a confermare vengono etichettati come 'reachable but cold' o 'unreachable' e declassati, senza mai far scattare un'allerta. Risultato sui repository reali dei clienti: drasticamente meno falsi positivi su SAST, SCA, IaC e secret, con una coda verificata abbastanza corta da smistarla in minuti, non in giorni.