
Sicherheitsregeln für die statische Analyse zur Erkennung von Schwachstellen und für auditorientierte Code-Reviews in Java, Go, Python, C#, Kotlin, PHP, Kubernetes und GitHub Actions.
Willkommen im öffentlichen Repository für semgrep-Regeln von [elttam][].

Wir entwickeln regelmäßig Regeln im Rahmen unserer codegestützten Sicherheitsaudits und unserer Forschung zur Softwaresicherheit. Wir werden häufig neue Regeln hinzufügen und das hier Vorhandene für die Semgrep-Community verbessern. Wir hoffen, dass Produktsicherheitsingenieure und Code-Auditoren, die Semgrep verwenden, diese Regeln nützlich finden!
Wenn Sie Fehler finden, erstellen Sie bitte ein GitHub-Issue.
Dieser Leitfaden setzt voraus, dass Sie mit Semgrep vertraut sind und es bereits installiert haben.
Dieses Repository unterteilt die Regeln in zwei breite Kategorien:
rules/ -- Regeln, die für Entwickler oder AppSec-Teams nützlich sind; es handelt sich dabei im Allgemeinen um Schwachstellen.rules-audit/ -- Regeln, die für die Quellcode-Auditierung nützlich sind, interessantes Verhalten identifizieren und Einstiegspunkte aufzählen, um die manuelle Quellcode-Überprüfung zu ergänzen.Testen Sie dieses Repository mit dem folgenden Befehl:
git clone https://github.com/elttam/semgrep-rules.git
Um die Regeln zu testen, führen Sie Folgendes aus:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
Um die auf Audits ausgerichteten Regeln zu testen, führen Sie Folgendes aus:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
Diese Regeln zielen darauf ab, Schwachstellen oder andere Schwächen zu identifizieren.
| Regelpfad | Sprache | Technologie | Beschreibung |
|---|---|---|---|
| generic/jsp-likely-xss | Generic | JSP | Erkennt XSS bei unsicherem Rendering in der Vorlage |
| go/lang/security/audit/executable-symlink | Go | Mögliche Symlink-Übernahme mit os.Executable | |
| go/lang/security/audit/sprintf-plain-string | Go | Sprintf mit nicht maskierten Steuerzeichen | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | Findet GCM, das dieselben Werte für Schlüssel und IV verwendet | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | Findet RandomStringUtils, das den standardmäßigen java.util.Random verwendet, der für die Sicherheit nicht geeignet ist |
| java/spring/security/audit/remoting/ | Java | Spring | Findet die Verwendung von Spring Remoting |
| php/php-filter-chain-read-from-oracle | PHP | Erkennt mögliches fehlerbasiertes Oracle für PHP-Filterketten | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | Findet die Verwendung des unsicheren und veralteten ::save-state |
| yaml/github-actions/security/set-output | YAML | Github-Actions | Findet die Verwendung des unsicheren und veralteten ::set-output |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | Findet Container-Spezifikationen mit NetworkPolicy mit Ingress-Erlaubnis ANY |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | Findet Container-Spezifikationen mit privilegiertem Security Context |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | Findet Container-Spezifikationen, einschließlich Init-Containern, die eine Privilegienausweitung erlauben (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | Findet Container-Spezifikationen ohne Security Context; berücksichtigt den Security Context von Pod oder Container. |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | Findet Container-Spezifikationen, die das Ausführen als Root erlauben (fehlendes runAsNonRoot); berücksichtigt den Security Context von Pod und Container. [PR][Upstream PR 2630] |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | Findet Container-Spezifikationen, die das Ausführen als Root explizit erlauben (runAsNonRoot: false); berücksichtigt den Security Context von Pod und Container. [PR][Upstream PR 2630] |
Diese Regeln sind nützlich, um die manuelle Quellcode-Überprüfung zu unterstützen, indem sie interessantes Verhalten identifizieren oder Einstiegspunkte aufzählen.