
Правила статического анализа безопасности для обнаружения уязвимостей и аудит-ориентированного ревью кода на Java, Go, Python, C#, Kotlin, PHP, Kubernetes и GitHub Actions.
Добро пожаловать в публичный репозиторий semgrep-правил elttam.

Мы регулярно разрабатываем правила в ходе наших аудитов безопасности с помощью кода и исследований в области безопасности программного обеспечения. Мы будем часто добавлять новые правила и улучшать то, что уже есть здесь, для сообщества semgrep. Мы надеемся, что инженеры по безопасности продуктов и аудиторы кода, использующие semgrep, найдут их полезными!
Если вы обнаружите какие-либо ошибки, пожалуйста, создайте issue на GitHub.
В этом руководстве предполагается, что вы знакомы с 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/
Эти правила направлены на выявление уязвимостей и других слабостей.
| Путь к правилу | Язык | Технология | Описание |
|---|---|---|---|
| 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 | Обнаружение возможной oracle-ошибки в цепочке фильтров 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 Permit ANY) |
| yaml/kubernetes/audit/privileged-container | YAML | Kubernetes | Поиск спецификаций контейнеров с привилегированным security context |
| yaml/kubernetes/security/allow-privileged-escalation | YAML | Kubernetes | Поиск спецификаций контейнеров, включая init-контейнеры, допускающих повышение привилегий (allowPrivilegeEscalation) |
| yaml/kubernetes/security/no-security-context | YAML | Kubernetes | Поиск спецификаций контейнеров без security context; учитывается security context пода или контейнера. |
| yaml/kubernetes/security/run-as-non-root |
Эти правила полезны для помощи в ручном анализе исходного кода: они выявляют интересное поведение или перечисляют точки входа.
| Путь к правилу | Язык | Технология | Описание |
|---|---|---|---|
| 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 |
Поиск спецификаций контейнеров, допускающих запуск от root (отсутствует runAsNonRoot); учитывается security context пода и контейнера PR |
| yaml/kubernetes/security/run-as-non-root-unsafe-value | YAML | Kubernetes | Поиск спецификаций контейнеров, явно допускающих запуск от root (runAsNonRoot: false); учитывается security context пода и контейнера PR |