# Semgrep

**Название задания в Auditor**: Semgrep, Gitlab Semgrep, Gitlab Php\
**Образ в Auditor:** `registry.cybercodereview.ru/cybercodereview/security-images/semgrep:1.99.0`; `registry.cybercodereview.ru/cybercodereview/security-images/semgrep-sast-gitlab:4`\
**Название импортера в Security Center**: Semgrep JSON Report, [GitLab Semgrep](https://gitlab.com/gitlab-org/security-products/analyzers/semgrep)

[Semgrep](https://github.com/semgrep/semgrep) поддерживает ряд языков программирования, таких как:

* Python
* JavaScript
* Java
* Go
* Ruby
* TypeScript
* C#
* Kotlin
* PHP
* Swift

Semgrep можно использовать для проверки на наличие таких проблем безопасности, как:

* SQL-инъекции
* Межсайтовый скриптинг (XSS)
* Инъекция команд
* Проблемы аутентификации и авторизации
* Небезопасная криптография
* Инъекция кода
* Обход путей
* Включение файлов
* Утечка информации
* Инъекция внешних сущностей XML (XXE)
* Подделка запросов на стороне сервера (SSRF)
* и другие

Интересной особенностью Semgrep является его способность обнаруживать проблемы безопасности в **сложных кодовых базах**. Он использует мощный механизм сопоставления шаблонов для выявления уязвимостей и является очень настраиваемым.

**Пример команды Curl**

```
curl -X POST localhost/api/v1/scan/import/ -H "Authorization: Token a75bb26171cf391671e67b128bfc8ae1c779ff7b" -H "Content-Type: multipart/form-data" -F "file=@./" -F "product_name=Product1" -F "product_type=Application" -F "scanner_name=Semgrep JSON Report" -F "branch=dev" -F "repository=git@gitlab.cybercodereview.ru:cybercodereview/security-center.git"
```

В этой команде используются следующие параметры:

1. `-X POST`: задает используемый метод HTTP (в данном случае POST).
2. `-H "Authorization: Token <authorization_token>"`: задает [**токен авторизации**](https://docs.cybercodereview.ru/security-center/importing-reports-from-scanners-to-security-center#token-avtorizacii), полученный от Security Center.
3. `-H "Content-Type: multipart/form-data"`: задает тип содержимого запроса.
4. `-F "file=@<report_file_path>"`: задает **путь к файлу отчета**, создаваемого сканером.
5. `-F "product_name=<product_name>"`: задает **название** сканируемого **продукта**.
6. `-F "product_type=<product_type>"`: задает  **тип** сканируемого **продукта**.
7. `-F "scanner_name=<scanner_name>"`: задает **имя сканера**, используемого для создания отчета (Bandit Scan или GitLab Bandit)
8. `-F "branch=<branch_name>"`: (*необязательно*) указывает имя ветки в репозитории исходного кода (если применимо). Этот параметр особенно полезен, когда вы хотите связать результаты сканирования с определенной веткой в вашем репозитории. Если параметр не указан, сканирование будет связано с веткой по умолчанию

Информация об активах, если используется [Auditor](https://docs.cybercodereview.ru/auditor)

1. `-F "repository=<repository SSH URL>"`: Если ваш продукт хранится в **репозитории**, введите адрес **репозитория** в определенном формате, например: <git@gitlab.cybercodereview.ru>:cybercodereview/security-center.git
2. `-F "docker_image=<registry address>"`: Если ваш продукт является **образом**, введите адрес **реестра**, в котором находится ваш продукт, например: registry.cybercodereview\.ru/cybercodereview/security-center/back/importer:latest
3. `-F "domain=<domain>"`: Если ваш продукт является **веб-продуктом**, введите **доменное имя** вашего продукта, например: cybercodereview\.ru
4. `-F "host=<host>"`: Если ваш продукт является **веб-продуктом**, введите **IP-адрес** вашего продукта, например: 0.0.0.0

**Пример отчета:**

<figure><img src="https://630546901-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2F31dcCQWMOu1AiZEAFiOT%2Fuploads%2FyjIGqMYZt0Um67RmpGuJ%2Fimage.webp?alt=media&#x26;token=9c8208c9-47c7-4f16-a921-015dd7905647" alt=""><figcaption></figcaption></figure>
