
Находите уязвимости безопасности аутентификации (authn) и авторизации (authz) в маршрутах веб-приложений.
Находите уязвимости безопасности аутентификации (authn) и авторизации (authz) в маршрутах веб-приложений:

Маршруты из потокового сервера koel
Уязвимости аутентификации и авторизации HTTP-маршрутов веб-приложений являются одними из самых распространенных проблем безопасности сегодня. Эти отраслевые стандарты подчеркивают серьезность проблемы:
Используйте pip для установки route-detect:
$ python -m pip install --upgrade route-detect
Вы можете проверить, что route-detect установлен корректно, с помощью следующей команды:
$ echo 'print(1 == 1)' | semgrep --config $(routes which test-route-detect) -
Scanning 1 file.
Findings:
/tmp/stdin
routes.rules.test-route-detect
Found '1 == 1', your route-detect installation is working correctly
1┆ print(1 == 1)
Ran 1 rule on 1 file: 1 finding.
route-detect использует команду CLI routes и предоставляет следующее дерево команд:
routes
whichvizСначала убедитесь, что semgrep установлен и добавлен в ваш PATH.
[!IMPORTANT] Функциональность Semgrep, от которой зависит
route-detectдля отображения фрагментов кода, была перенесена в облачное приложение. Для получения дополнительной информации см. #10762. Однако более ранние версии Semgrep по-прежнему поддерживают это поведение. При использованииroute-detectубедитесь, что установлена версия Semgrep до1.97.0. Это можно сделать с помощью следующей команды:python -m pip install 'semgrep<1.97.0'.
Используйте подкоманду which, чтобы указать semgrep на правильные правила веб-приложений:
$ semgrep --config $(routes which django) path/to/django/code
Используйте подкоманду viz для визуализации информации о маршрутах в вашем браузере:
$ semgrep --json --config $(routes which django) --output routes.json path/to/django/code
$ routes viz --browser routes.json
Если вы не уверены, какой фреймворк искать, вы можете использовать специальный идентификатор all для проверки всего:
$ semgrep --json --config $(routes which all) --output routes.json path/to/code
Если у вас есть пользовательская логика аутентификации (authn) или авторизации (authz), вы можете скопировать правила route-detect:
$ cp $(routes which django) my-django.yml
Затем вы можете изменить правило по мере необходимости и запустить его, как показано выше:
$ semgrep --json --config my-django.yml --output routes.json path/to/django/code
$ routes viz --browser routes.json
Сначала убедитесь, что codeql установлен и добавлен в ваш PATH.
Используйте подкоманду which, чтобы сначала установить зависимости пакета, а затем выполнить соответствующие запросы:
$ codeql pack install $(poetry run routes which -c rails)
$ codeql database analyze \
--output routes.sarif \
--format sarif-latest \
--sarif-add-file-contents \
--no-group-results \
-- \
/path/to/codeql/db \
$(routes which --codeql rails)
Используйте подкоманду viz для визуализации информации о маршрутах в вашем браузере:
$ routes viz --codeql --browser routes.sarif
route-detect использует poetry для управления зависимостями и конфигурацией.
Прежде чем продолжить, установите зависимости проекта с помощью следующей команды:
$ poetry install --with dev
Проверьте все файлы проекта с помощью следующей команды:
$ poetry run pre-commit run --all-files
Запустите тесты Python с помощью следующей команды:
$ poetry run pytest --cov
Запустите тесты правил Semgrep с помощью следующей команды:
$ poetry run semgrep --test --config routes/rules/ tests/test_rules/
Запустите тесты запросов CodeQL с помощью следующей команды:
$ codeql test run routes/queries/rails/test/
| Язык | Фреймворк | Semgrep | CodeQL |
|---|
| Python | Django | ✅ | ❌ |
| Python | Django REST framework | ✅ | ❌ |
| Python | Flask | ✅ | ❌ |
| Python | Sanic | ✅ | ❌ |
| Python | FastAPI | ✅ | ❌ |
| PHP | Laravel | ✅ | ❌ |
| PHP | Symfony | ✅ | ❌ |
| PHP | CakePHP | ✅ | ❌ |
| Ruby | Rails | ❌ | ✅ |
| Ruby | Grape | ✅ | ❌ |
| Java | JAX-RS | ✅ | ❌ |
| Java | Spring | ✅ | ❌ |
| Go | Gorilla | ✅ | ❌ |
| Go | Gin | ✅ | ❌ |
| Go | Chi | ✅ | ❌ |
| JavaScript/TypeScript | Express | ✅ | ❌ |
| JavaScript/TypeScript | React | ✅ | ❌ |
| JavaScript/TypeScript | Angular | ✅ | ❌ |