
Коллекция правил Semgrep для статического анализа кода, обнаружения уязвимостей безопасности и обеспечения безопасных методов разработки на нескольких языках программирования.
Этот репозиторий содержит Semgrep-правила, разработанные Trail of Bits и предоставленные общественности. Они являются частью наших текущих разработок и используются в наших аудитах безопасности, исследовании уязвимостей и внутренних проектах. Они будут развиваться со временем по мере выявления новых техник.
Посетите Testing Handbook для получения рекомендаций по Semgrep.
Самый простой способ запустить правила — запустить их из реестра Semgrep. Для этого перейдите в корневую папку вашего проекта и выполните следующее:```shell $ semgrep --config "p/trailofbits"
В качестве альтернативы вы можете клонировать этот репозиторий, перейти в корневую папку вашего проекта и запускать отдельные правила с помощью команды ниже :```shell
$ semgrep --config /path/to/semgrep-rules/semgreprule.yml
Чтобы запустить все правила из клонированного репозитория:```shell $ semgrep --config /path/to/semgrep-rules/ .
## Полезные флаги
Semgrep будет запускаться для всех поддерживаемых файлов кода, кроме тех, что указаны в вашем файле `.gitignore`. Если вы хотите запускать правила для всех файлов и директорий, включая указанные в `.gitignore`, добавьте флаг `--no-git-ignore`.```shell
$ semgrep --config /path/to/semgrep-rules/ . --no-git-ignore
Вы также можете указать Semgrep игнорировать файлы и директории, соответствующие любому шаблону. Например, если вы хотите указать Semgrep игнорировать все тестовые файлы Go, вы можете выполнить следующее:```shell $ semgrep --config /path/to/semgrep-rules/ . --exclude='*_test.go'
Используйте `-o` для вывода результатов в файл:```shell
$ semgrep --config /path/to/semgrep-rules/hanging-goroutine.yml -o leaks.txt'
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| eth-rpc-tracetransaction | 🛝🔗 | 🟥 | 🌕 | Обнаруживает попытки извлечения трассировочной информации из EVM-транзакции или блока. В обменных или мостовых приложениях необходимо реализовать дополнительную логику, оборачивающую эти конечные точки, чтобы предотвратить учёт значений, переданных во время отменённых кадров вызовов. |
| eth-txreceipt-status | 🛝🔗 | 🟥 | 🌕 | Обнаруживает, когда читается статус квитанции транзакции |
| hanging-goroutine | 🛝🔗 | 🟩 | 🌗 | Утечки горутин |
| invalid-usage-of-modified-variable | 🛝🔗 | 🟧 | 🌘 | Возможное непреднамеренное присваивание при возникновении ошибки |
| iterate-over-empty-map | 🛝🔗 | 🟩 | 🌗 | Вероятно, избыточная итерация по пустой карте |
| missing-runlock-on-rwmutex |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| automatic-memory-pinning | 🛝🔗 | 🟩 | 🌘 | Память PyTorch не закрепляется автоматически |
| lxml-in-pandas | 🛝🔗 | 🟧 | 🌘 | Потенциальные XXE-атаки при загрузке lxml в pandas |
| msgpack-numpy | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций, полагающихся на пиклинг |
| numpy-distutils | 🛝🔗 | 🟩 | 🌘 | Использование устаревшего numpy.distutils |
| numpy-f2py-compile | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода при компиляции с помощью NumPy f2py |
| numpy-in-pytorch-datasets | 🛝🔗 |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| panic-in-function-returning-result | 🛝🔗 | 🟩 | 🌘 | Вызов unwrap или expect в функции, возвращающей Result |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| schema-directives | 🛝🔗 | 🟥 | 🌗 | Использование устаревшей опции ApolloServer 'schemaDirectives' |
| use-of-graphql-upload | 🛝🔗 | 🟧 | 🌕 | Использование библиотеки graphql-upload |
| v3-potentially-bad-cors | 🛝🔗 | 🟧 | 🌕 | Потенциально небезопасная политика CORS |
| v3-express-bad-cors | 🛝🔗 | 🟥 | 🌗 | Небезопасная политика CORS |
| v3-express-no-cors | 🛝🔗 | 🟩 | 🌘 | Отсутствие политики CORS |
| v3-bad-cors | 🛝🔗 | 🟥 |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| gc-call | 🛝🔗 | 🟩 | 🌘 | |
| mongo-hostname-verification-disabled | 🛝🔗 | 🟥 | 🌘 |
| ID | Песочница | Влияние | Уверенность | Описание | | -- | :--------: | :----: | :--------: | ----------- || ID | Песочница | Влияние | Уверенность | Описание | | -- | :--------: | :----: | :--------: | ----------- | | apt-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | apt-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | apt-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | dnf-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | get-url-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | get-url-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | rpm-key-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | unarchive-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | unarchive-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | wrm-cert-validation-ignore | 🛝🔗 | 🟥 | 🌘 | | | yum-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | yum-validate-certs-disabled | 🛝🔗 | 🟥 | 🌘 | | | zypper-repository-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | zypper-unencrypted-url | 🛝🔗 | 🟥 | 🌘 | | | port-all-interfaces | 🛝🔗 | 🟩 | 🌕 | | | aws-secret-key | 🛝🔗 | 🟧 | 🌘 | | | azure-principal-secret | 🛝🔗 | 🟧 | 🌘 | | | gcp-credentials-json | 🛝🔗 | 🟧 | 🌘 | | | jfrog-hardcoded-credential | 🛝🔗 | 🟧 | 🌘 | | | pypi-publish-password | 🛝🔗 | 🟧 | 🌘 | | | rubygems-publish-key | 🛝🔗 | 🟧 | 🌘 | | | vault-token | 🛝🔗 | 🟧 | 🌘 | |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| amqp-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 | |
| container-privileged | 🛝🔗 | 🟥 | 🌗 | |
| container-user-root | 🛝🔗 | 🟥 | 🌗 | |
| curl-insecure | 🛝🔗 | 🟥 | 🌗 | |
| curl-unencrypted-url | 🛝🔗 | 🟥 | 🌗 | |
| gpg-insecure-flags | 🛝🔗 | 🟥 | 🌗 | |
| installer-allow-untrusted | 🛝🔗 |
| ID | Песочница | Влияние | Уверенность | Описание |
|---|---|---|---|---|
| insecure-url-host-hassuffix-check | 🛝🔗 | 🌫️ | 🌘 |
Pull Requests и issues приветствуются!
Дополнительную информацию см. в CONTRIBUTING.md.
Правила, определенные в этом репозитории, распространяются под лицензией AGPLv3.
Sidecar-примеры могут быть производными от других работ и сохраняют свои исходные лицензии там, где это требуется.
| 🟧 |
| 🌗 |
Отсутствует RUnlock для блокировки RWMutex перед возвратом из функции |
| missing-unlock-before-return | 🛝🔗 | 🟧 | 🌗 | Отсутствует разблокировка mutex перед возвратом из функции |
| nil-check-after-call | 🛝🔗 | 🟧 | 🌗 | Возможные разыменования nil |
| racy-append-to-slice | 🛝🔗 | 🟧 | 🌗 | Конкурентные вызовы append из нескольких горутин |
| racy-write-to-map | 🛝🔗 | 🟧 | 🌗 | Конкурентные записи в одну и ту же карту из нескольких горутин |
| servercodec-readrequestbody-unhandled-nil | 🛝🔗 | 🟩 | 🌘 | Возможная некорректная реализация интерфейса ServerCodec |
| string-to-int-signedness-cast | 🛝🔗 | 🟧 | 🌘 | Целочисленные переполнения вниз |
| sync-mutex-value-copied | 🛝🔗 | 🟩 | 🌘 | Копирование sync.Mutex через приёмники значений |
| unmarshal-tag-is-dash | 🛝🔗 | 🟧 | 🌘 |
| unmarshal-tag-is-omitempty | 🛝🔗 | 🟩 | 🌘 |
| unsafe-dll-loading | 🛝🔗 | 🟥 | 🌘 | Использование функции, уязвимой к атакам перехвата DLL |
| waitgroup-add-called-inside-goroutine | 🛝🔗 | 🟧 | 🌗 | Вызовы sync.WaitGroup.Add внутри анонимных горутин |
| waitgroup-wait-inside-loop | 🛝🔗 | 🟧 | 🌗 | Вызовы sync.WaitGroup.Wait внутри цикла |
| 🟩 |
| 🌘 |
Вызовы ГПСЧ NumPy внутри набора данных Torch |
| numpy-in-pytorch-modules | 🛝🔗 | 🌫️ | 🌗 | Использование функций NumPy внутри модулей PyTorch |
| numpy-load-library | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода при загрузке библиотеки NumPy |
| onnx-session-options | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода при загрузке библиотеки ONNX |
| pandas-eval | 🛝🔗 | 🟥 | 🌕 | Потенциальное выполнение произвольного кода из функций pandas, вычисляющих пользовательские выражения |
| pickles-in-keras-deprecation | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функции load_model Keras |
| pickles-in-keras | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функции load_model Keras |
| pickles-in-numpy | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций NumPy, полагающихся на пиклинг |
| pickles-in-pandas | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций Pandas, полагающихся на пиклинг |
| pickles-in-pytorch-distributed | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций PyTorch.Distributed, полагающихся на пиклинг |
| pickles-in-pytorch | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций PyTorch, полагающихся на пиклинг |
| pickles-in-tensorflow | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функции load в tensorflow |
| pytorch-classes-load-library | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода при загрузке библиотеки PyTorch |
| pytorch-package | 🛝🔗 | 🟥 | 🌕 | Потенциальное выполнение произвольного кода из torch.package |
| pytorch-tensor | 🛝🔗 | 🌫️ | 🌘 | Возможные проблемы с парсингом и неэффективность из-за неправильного создания тензора |
| scikit-joblib-load | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода из функций SciKit.Joblib, полагающихся на пиклинг |
| tarfile-extractall-traversal | 🛝🔗 | 🟧 | 🌗 | Потенциальный обход пути при вызове extractall для tarfile |
| tensorflow-load-library | 🛝🔗 | 🟥 | 🌗 | Потенциальное выполнение произвольного кода при загрузке библиотеки TensorFlow |
| waiting-with-pytorch-distributed | 🛝🔗 | 🟩 | 🌗 | Возможное неопределённое поведение PyTorch при отсутствии ожидания запросов |
| 🌗 |
| Небезопасная политика CORS |
| v3-no-cors | 🛝🔗 | 🟩 | 🌘 | Отсутствие политики CORS |
| v3-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Отсутствие защиты от CSRF |
| v4-csrf-prevention | 🛝🔗 | 🟧 | 🌘 | Защита CSRF отключена |
| 🛝🔗 |
| 🟩 |
| 🌘 |
| json-create-deserialization | 🛝🔗 | 🟥 | 🌕 |
| rails-cache-store-marshal | 🛝🔗 | 🟩 | 🌗 |
| rails-cookie-attributes | 🛝🔗 | 🟩 | 🌘 |
| rails-params-json | 🛝🔗 | 🟥 | 🌕 |
| rest-client-disable-verification | 🛝🔗 | 🟥 | 🌘 |
| ruby-saml-skip-validation | 🛝🔗 | 🟧 | 🌘 |
| yaml-unsafe-load | 🛝🔗 | 🟥 | 🌘 |
| 🛝🔗 |
| 🟥 |
| 🌘 |
| vault-hardcoded-token | 🛝🔗 | 🟥 | 🌘 |
| vault-skip-tls-verify | 🛝🔗 | 🟥 | 🌘 |
| 🟥 |
| 🌘 |
| mongodb-insecure-transport | 🛝🔗 | 🟥 | 🌘 |
| mysql-insecure-sslmode | 🛝🔗 | 🟥 | 🌗 |
| node-disable-certificate-validation | 🛝🔗 | 🟥 | 🌘 |
| openssl-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| postgres-insecure-sslmode | 🛝🔗 | 🟥 | 🌘 |
| redis-unencrypted-transport | 🛝🔗 | 🟥 | 🌘 |
| ssh-disable-host-key-checking | 🛝🔗 | 🟥 | 🌗 |
| tar-insecure-flags | 🛝🔗 | 🟥 | 🌗 |
| wget-no-check-certificate | 🛝🔗 | 🟥 | 🌗 |
| wget-unencrypted-url | 🛝🔗 | 🟥 | 🌗 |