
Regole di analisi statica della sicurezza per il rilevamento di vulnerabilità e la revisione del codice orientata all'audit in Java, Go, Python, C#, Kotlin, PHP, Kubernetes e GitHub Actions.
Benvenuti nel repository pubblico di regole semgrep di [elttam][].

Sviluppiamo regolarmente regole durante i nostri audit di sicurezza assistiti da codice e nella ricerca sulla sicurezza del software. Aggiungeremo di frequente nuove regole e miglioreremo il contenuto per la comunità di semgrep. Speriamo che gli ingegneri della sicurezza di prodotto e gli auditor di codice che usano semgrep le trovino utili!
Se trovi bug, apri una issue su GitHub.
Questa guida presuppone che tu abbia familiarità con Semgrep e che lo abbia già installato.
Questo repo suddivide le regole in due ampie categorie:
rules/ -- Regole utili per sviluppatori o team AppSec; in genere riguardano vulnerabilità.rules-audit/ -- Regole utili per l'audit del codice sorgente, per identificare comportamenti interessanti ed enumerare gli entrypoint, a supporto della revisione manuale del codice.Prova questo repo con il seguente comando:
git clone https://github.com/elttam/semgrep-rules.git
Per provare le regole, esegui:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
Per provare le regole orientate all'audit, esegui:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
Queste regole sono focalizzate sull'identificazione di vulnerabilità o altre debolezze.
| Percorso regola | Linguaggio | Tecnologia | Descrizione |
|---|---|---|---|
| generic/jsp-likely-xss | Generic | JSP | Rileva XSS con rendering non sicuro nel template |
| go/lang/security/audit/executable-symlink | Go | Possibile takeover di symlink con os.Executable | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf con caratteri di controllo non escapati | |
| go/lang/security/audit/uintptr-nonatomic | Go | Uso non atomico di uintptr convertito | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | Trova GCM che usa gli stessi valori per chiave e IV | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | Trova RandomStringUtils che usa il java.util.Random predefinito, non adatto alla sicurezza |
| java/spring/security/audit/remoting/ | Java | Spring | Trova l'uso di Spring Remoting |
| php/php-filter-chain-read-from-oracle | PHP | Rileva un possibile oracolo basato su errori nella catena di filtri PHP | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | Trova l'uso di ::save-state non sicuro e deprecato |
| yaml/github-actions/security/set-output | YAML | Github-Actions | Trova l'uso di ::set-output non sicuro e deprecato |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Trova specifiche di container con NetworkPolicy con Ingress che consente ANY |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | Trova specifiche di container con contesto di sicurezza privileged |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | Trova specifiche di container, inclusi gli init container, che consentono l'escalation dei privilegi (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | Trova specifiche di container senza contesto di sicurezza; considera il contesto di sicurezza di pod o container. |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | Trova specifiche di container che consentono l'esecuzione come root (manca runAsNonRoot); considera il contesto di sicurezza di pod e container [PR][Upstream PR 2630] |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | Trova specifiche di container che consentono esplicitamente l'esecuzione come root (runAsNonRoot: false); considera il contesto di sicurezza di pod e container [PR][Upstream PR 2630] |
Queste regole sono utili per supportare la revisione manuale del codice sorgente, identificando comportamenti interessanti o enumerando gli entrypoint.