
Коллекция правил 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 | 🛝🔗 | 🟧 | 🌗 | Отсутствует 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 внутри цикла |