semgrep
Semgrep — инструмент статического анализа, а этот skill описывает его применение для поиска ошибок, уязвимостей и anti-patterns в исходном коде. В качестве базового сценария источник предлагает установить Semgrep через pip и начать со сканирования semgrep scan --config=auto. Для более узкой проверки можно выбрать готовые конфигурации p/security-audit, p/owasp-top-ten, p/typescript или p/python, а также передать конкретный каталог. Это позволяет начать с рекомендованного набора правил, а затем ограничить проверку языком или областью проекта. Главная практическая часть skill — создание собственных правил в YAML. Правило получает id, сообщение, severity и список языков, а условия задаются pattern, patterns и pattern-not. В metadata можно сохранить CWE, категорию OWASP и confidence, чтобы результат было проще интерпретировать. Источник показывает правила для потенциальной SQL-инъекции, захардкоженных секретов и маршрута без auth middleware. В примере для SQL-инъекции проверяются конкатенация пользовательского ввода с запросом и шаблонные строки, а fix предлагает параметризованный запрос. Для секрета правило дополнительно исключает значение, полученное через переменную окружения. Такой подход помогает выразить именно те соглашения, которые важны конкретному коду. Для React источник приводит отдельные проверки: опасный dangerouslySetInnerHTML с пользовательским вводом и ссылку с target="_blank" без rel="noopener noreferrer". В metadata этих правил указаны CWE и, где уместно, OWASP A03:2021. Skill также рекомендует добавлять project-specific rules, потому что общие правила не покрывают доменные ошибки. Severity следует выбирать по смыслу: ERROR подходит для security vulnerabilities, WARNING — для замечаний по качеству, которые нужно показать, но не обязательно блокировать. Semgrep можно включить в GitHub Actions через semgrep/semgrep-action@v1 и передать конфигурации p/security-audit, p/owasp-top-ten и локальный каталог .semgrep. Для результатов в формате SARIF источник предлагает команду с --sarif и --output=semgrep.sarif, а для блокировки CI только по высоким находкам — --severity=ERROR --error. При интеграции нужно передать SEMGREP_APP_TOKEN, если его требует окружение. Для pull request полезен инкрементальный scan изменённых файлов с --diff-depth=1; для команд, которым нужна история находок и triage, источник отдельно упоминает Semgrep Cloud. Карточка не обещает автоматического исправления всех находок: fix показан как опциональное поле конкретного правила, а конфигурацию и severity нужно проектировать под репозиторий. Source также предлагает варианты запуска через Docker и Homebrew, но сам workflow остаётся CLI-ориентированным. Поэтому перед блокировкой CI следует проверить правила на коде проекта, подтвердить ожидаемые языки и разобрать результаты, а не считать любой отчёт заменой ручного security review.
Для чего подходит
- Поиск уязвимостей и anti-patterns
- Создание custom Semgrep rules
- Подключение SAST к CI/CD
Установка
Сначала прочитайте SKILL.md и scripts в исходном репозитории. Затем выполните команду в каталоге проекта:
npx skills add https://github.com/TerminalSkills/skills/tree/main/skills/semgrep