
قواعد التحليل الثابت للأمان لاكتشاف الثغرات ومراجعة الكود الموجهة للتدقيق عبر Java وGo وPython وC# وKotlin وPHP وKubernetes وGitHub Actions.
مرحبًا بك في مستودع قواعد semgrep العامة الخاص بـ elttam.

نطوّر القواعد بانتظام أثناء عمليات تدقيق الأمان المستندة إلى الكود وأبحاث أمن البرمجيات. سنضيف باستمرار قواعد جديدة ونحسّن ما هو موجود هنا من أجل مجتمع semgrep. نأمل أن يجد مهندسو أمن المنتجات ومدققو الكود الذين يستخدمون semgrep هذه القواعد مفيدة!
إذا وجدت أي أخطاء، يرجى فتح GitHub issue.
يفترض هذا الدليل أنك على دراية بـ Semgrep وأنه مثبّت لديك بالفعل.
قسّم هذا المستودع القواعد إلى فئتين عريضتين:
rules/ -- قواعد مفيدة للمطوّرين أو فرق أمن التطبيقات (AppSec)، وهي بشكل عام ثغرات أمنية.rules-audit/ -- قواعد مفيدة لتدقيق الكود المصدري، وتحديد السلوك المثير للاهتمام، وحصر نقاط الدخول، لتعزيز المراجعة اليدوية للكود المصدري.جرّب هذا المستودع باستخدام الأمر التالي:
git clone https://github.com/elttam/semgrep-rules.git
لتجربة القواعد، شغّل:
semgrep --config semgrep-rules/rules semgrep-rules/rules/
لتجربة القواعد الموجّهة للتدقيق، شغّل:
semgrep --config semgrep-rules/rules-audit semgrep-rules/rules-audit/
تركز هذه القواعد على تحديد الثغرات الأمنية أو نقاط الضعف الأخرى.
| Rule Path | Language | Technology | Description |
|---|---|---|---|
| generic/jsp-likely-xss | Generic | JSP | اكتشاف XSS مع عرض غير آمن في القالب |
| go/lang/security/audit/executable-symlink | Go | استيلاء محتمل على الروابط الرمزية عبر os.Executable | |
| go/lang/security/audit/sprintf-plain-string | Go | أحرف تحكم غير مُهرّبة في Sprintf | |
| go/lang/security/audit/uintptr-nonatomic | Go | استخدام غير ذرّي لـ uintptr محوّل | |
| java/lang/security/audit/crypto/gcm-static-iv | Java | البحث عن GCM يستخدم نفس القيم للمفتاح وIV | |
| java/lang/security/audit/crypto/randomstringutils | Java | Apache Commons | البحث عن RandomStringUtils التي تستخدم java.util.Random الافتراضي، وهو غير مناسب للأمان |
| java/spring/security/audit/remoting/ | Java | Spring | البحث عن استخدام Spring Remoting |
| php/php-filter-chain-read-from-oracle | PHP | اكتشاف أوراكل محتمل قائم على أخطاء سلسلة فلاتر PHP | |
| yaml/github-actions/security/save-state | YAML | Github-Actions | البحث عن استخدام ::save-state غير الآمن والمهجور |
| yaml/github-actions/security/set-output | YAML | Github-Actions | البحث عن استخدام ::set-output غير الآمن والمهجور |
| yaml/kubernetes/audit/network-policy-ingress-any | YAML | Kubernetes | البحث عن مواصفات حاويات تحتوي NetworkPolicy مع Ingress يسمح بأي مرور (ANY) |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | البحث عن مواصفات حاويات مع سياق أمني مميز (privileged) |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | البحث عن مواصفات حاويات، بما في ذلك حاويات init، التي تسمح بتصعيد الامتيازات (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | البحث عن مواصفات حاويات بدون سياق أمني، مع مراعاة سياق أمان pod أو الحاوية |
| yaml/kubernetes/security/run-as-non-root | YAML | Kubernetes | البحث عن مواصفات حاويات تسمح بالتشغيل كجذر (بسبب غياب runAsNonRoot)، مع مراعاة سياق أمان pod والحاوية |
هذه القواعد مفيدة للمساعدة في المراجعة اليدوية للكود المصدري من خلال تحديد السلوك المثير للاهتمام أو حصر نقاط الدخول.
| Rule Path | Language | Technology | Description |
|---|---|---|---|
| c/lang/security/audit/exec | C | البحث عن تنفيذ العمليات | |
| csharp/dotnet/security/audit/entrypoints/apsnet-controller | C# | ASP.NET | البحث عن نقاط دخول REST الخاصة بـ ASP.NET |
| java/jackson/polymorphic-typing | Java | Jackson | البحث عن الكتابة متعددة الأشكال للمساعدة في اكتشاف مشكلات إلغاء تسلسل Jackson القابلة للاستغلال |
| java/jackson/type-resolver-override | Java | Jackson | البحث عن الكتابة متعددة الأشكال باستخدام TypeResolveBuilder |
| java/jax-rs/security/audit/entrypoints/ | Java | JAX-RS | البحث عن نقاط دخول REST الخاصة بـ JAX-RS |
| java/lang/security/audit/processbuilder | Java | البحث عن تنفيذ العمليات باستخدام ProcessBuilder | |
| java/spring/security/audit/entrypoints/ | Java | Spring | البحث عن نقاط دخول REST الخاصة بـ Spring |
| java/struts2/security/audit/devmode/ | Java | Struts2 | البحث عن استخدام devMode |
| java/struts2/security/audit/dmi/ | Java | Struts2 | البحث عن استخدام استدعاء الأسلوب الديناميكي (Dynamic Method Invocation) |
| java/struts2/security/audit/entrypoints/ | Java | Struts2 | البحث عن نقاط دخول REST الخاصة بـ Struts2 |
| java/xstream/security/audit/fromxml | Java | XStream | البحث عن استخدام XStream.fromXML(...) |
| kotlin/spark/security/audit/entrypoints/ | Kotlin | Spark | البحث عن نقاط دخول REST الخاصة بـ Spark |
| python/flask/security/audit/entrypoints/ | Python | Flask | البحث عن نقاط دخول REST الخاصة بـ Flask |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | البحث عن مواصفات حاويات تسمح صراحةً بالتشغيل كجذر (runAsNonRoot: false)، مع مراعاة سياق أمان pod والحاوية PR |