
A collection of my Semgrep rules to facilitate vulnerability research.
"La surface d'attaque est la vulnérabilité. Trouver un bug là-dedans n'est qu'un détail."
-- Mark Dowd
"Certains détails sont plus importants que d'autres."
-- Fedor G. Pikus
Une collection de mes règles Semgrep pour faciliter la recherche de vulnérabilités.
# analyse haute priorité (gains rapides)
semgrep --severity ERROR --config "p/0xdea"
# analyse haute et moyenne priorité (recommandé)
semgrep --severity ERROR --severity WARNING --config "p/0xdea"
# analyse complète (peut inclure des résultats marginaux et plus de faux positifs)
semgrep --config "p/0xdea"
Alternativement, vous pouvez cloner ce dépôt GitHub localement et exécuter :
# analyse complète
semgrep --config semgrep-rules/rules /chemin/vers/la/source
# analyse d'une règle spécifique
semgrep --config semgrep-rules/rules/c/command-injection.yaml /chemin/vers/la/source
[!TIP] Utilisez l'option
--no-git-ignorepour analyser les fichiers indépendamment du suivi git ou des règles.gitignore.
Pour une expérience plus fluide, je recommande de sauvegarder la sortie de l'analyse Semgrep au format SARIF et d'utiliser SARIF Explorer dans VS code :
semgrep --sarif --sarif-output=/chemin/vers/la/source/SEMGREP.sarif --config semgrep-rules/rules /chemin/vers/la/source
code /chemin/vers/la/source # puis ouvrez le fichier SEMGREP.sarif dans VS code avec SARIF Explorer
Voir aussi l'exemple de sortie SARIF inclus.
Testé avec Semgrep CLI 1.169.0.
Ensemble de règles C (et parfois C++) testé en conditions réelles.
gets.strcpy, stpcpy, strcat.sprintf et vsprintf.scanf.strncat.strncpy, memcpy, snprintf, et variantes.sizeof sur un pointeur au lieu de sa cible.strncpy et stpncpy.snprintf et vsnprintf.strlcpy et strlcat.strlen en short peut être dangereux.alloca.free.free potentiel.free sur une mémoire ne se trouvant pas dans le tas.malloc, calloc, realloc, etc.putenv avec une variable allouée sur la pile.system ou popen.access, stat, lstat, etc.mktemp, tmpnam, tempnam.signal.setuid et seteuid.memset.rand et srand.scanf.atoi, atol, atof.default dans une instruction switch.break ou équivalent dans une instruction switch.return dans une fonction non void.Ces règles sont considérées comme potentiellement trop bruitées et inadaptées à une utilisation générale.
--time sur du code réel pour repérer les règles lentes nécessitant une optimisation.