
Una raccolta delle mie regole Semgrep per facilitare la ricerca di vulnerabilità.
"The attack surface is the vulnerability. Finding a bug there is just a detail."
-- Mark Dowd
"Some details are more important than others."
-- Fedor G. Pikus
Una raccolta delle mie regole Semgrep per facilitare la ricerca di vulnerabilità.
# high priority scan (quick wins)
semgrep --severity ERROR --config "p/0xdea"
# high and medium priority scan (recommended)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# full scan (might include marginal findings and more false positives)
semgrep --config "p/0xdea"
In alternativa, puoi clonare questo repository GitHub in locale ed eseguire:
# full scan
semgrep --config semgrep-rules/rules /path/to/source
# specific rule scan
semgrep --config semgrep-rules/rules/c/command-injection.yaml /path/to/source
[!TIP] Specifica l'opzione
--no-git-ignoreper analizzare i file indipendentemente dallo stato di tracciamento git o dalle regole.gitignore.
Per un'esperienza più fluida, consiglio di salvare l'output dell'analisi Semgrep in formato SARIF e di usare SARIF Explorer in VS code:
semgrep --sarif --sarif-output=/path/to/source/SEMGREP.sarif --config semgrep-rules/rules /path/to/source
code /path/to/source # then open the SEMGREP.sarif file in VS code with SARIF Explorer
Vedi anche l'esempio di output SARIF incluso.
Testato con Semgrep CLI 1.169.0.
Ruleset C (e talvolta C++) collaudato sul campo.
gets.strcpy, stpcpy, strcat.sprintf e vsprintf.scanf.strncat.strncpy, , e varianti.strlen in short potrebbe essere pericolosa.alloca.free.free.free su memoria non heap.malloc, calloc, realloc, ecc.putenv con una variabile allocata sullo stack.system o popen.access, stat, lstat, ecc.mktemp, tmpnam, tempnam.signal.setuid e seteuid.memset.rand e srand.scanf.atoi, atol, atof.Queste regole sono considerate potenzialmente troppo rumorose e inadatte all'uso generale.
--time su codice reale per individuare le regole lente che necessitano di ottimizzazione.memcpysnprintfsizeof su un puntatore invece che sulla sua destinazione.strncpy e stpncpy.snprintf e vsnprintf.strlcpy e strlcat.default mancante in un'istruzione switch.break o equivalente mancante in un'istruzione switch.return mancante in una funzione non void.