
Автоматизирует статический аудит безопасности API-контрактов OpenAPI в CI/CD, выполняя 300+ проверок аутентификации, авторизации и ограничений данных, с порогами минимальной оценки и выводом в формате SARIF.
Действие REST API Static Security Testing находит контракты REST API, соответствующие спецификации OpenAPI (OAS, ранее известной как Swagger), и выполняет по ним тщательные проверки безопасности. Поддерживаются OAS v2 и v3.0.x в форматах JSON и YAML.
Это действие можно использовать в следующих сценариях:
Действие работает на основе 42Crunch API Security Audit. Security Audit выполняет статический анализ определения API, включающий более 300 проверок лучших практик и потенциальных уязвимостей, связанных с аутентификацией, авторизацией, а также ограничениями данных.
По умолчанию это действие:
.json и .yaml в репозитории.Таким образом, вы можете находить новые или изменённые контракты API в репозитории.
Вы можете точно настроить поведение действия, указав конкретные части репозитория или маски имён файлов, которые должны быть включены или исключены при поиске API. Вы можете даже полностью отключить поиск и вместо этого указать только конкретные файлы API для проверки и сопоставить их с существующими API в 42Crunch API Security Platform. Все эти параметры настраиваются в файле конфигурации 42c-conf.yaml. Дополнительные примеры см. здесь.
Все обнаруженные API загружаются в коллекцию API на платформе 42Crunch. По умолчанию действие использует переменные окружения GITHUB_REPOSITORY и GITHUB_REF для указания имени репозитория и ветки/тега/PR, из которых произошла коллекция API. Вы можете переопределить имя с помощью параметра действия default-collection-name. При последующих запусках API в коллекции синхронизируются с изменениями в вашем репозитории.
Добавьте это действие в свои CI/CD конвейеры в GitHub, и оно будет завершаться ошибкой для определений API, содержащих проблемы безопасности.
Security Audit присваивает каждому контракту API оценку от 0 до 100, отражающую поверхность безопасности ваших API. Вы можете использовать параметр min-score GitHub Action, чтобы задать пороговое значение оценки, при котором действие завершается ошибкой (по умолчанию — 75, если не указано другое значение). Это помогает выявлять определения API низкого качества и устранять проблемы как можно раньше, уже на этапе проектирования.
Более сложные условия завершения с ошибкой можно задать в файле конфигурации 42c-conf.yaml, например, оценку аудита по категориям (безопасность или проверка данных), уровень серьёзности проблем или даже конкретные проблемы по их идентификатору. Дополнительные примеры см. здесь.
Кроме того, плагин обеспечивает соблюдение шлюзов качества безопасности, определённых на уровне платформы (по умолчанию или на основе тегов). Шлюзы качества безопасности обеспечивают соблюдение требований безопасности приложений, определённых на уровне предприятия.
При каждом запуске действие включает ссылку на подробный приоритизированный отчёт с рекомендациями для каждого вашего файла OpenAPI:
Перейдите по ссылкам, чтобы прочитать подробный отчёт на платформе 42Crunch:
Вы также можете отслеживать проблемы, обнаруженные аудитом 42Crunch, непосредственно в GitHub, на вкладке Security, в разделе Code scanning alerts.
Чтобы включить эту функцию, просто добавьте upload-to-code-scanning:true в параметры действия в вашем GitHub workflow.
Нажмите на любое оповещение, чтобы увидеть его точное расположение в вашем коде, а также получить подробную информацию об уязвимости и рекомендуемые шаги по её устранению.
Это действие использует сервис 42Crunch API Security Audit. Перед использованием действия вам потребуется учётная запись на платформе 42Crunch. Если вы не являетесь клиентом 42Crunch, вы можете запросить бесплатную учётную запись на этой странице: https://42crunch.com/get-started/.
Затем выполните шаги, описанные в документации, чтобы создать API-токен для аутентификации действия на платформе 42Crunch, и сохраните его как секрет в GitHub.
api-tokenОбязательный параметр. API-токен, который GitHub Action использует для аутентификации на платформе 42Crunch. Не указывайте API-токен напрямую в файле workflow! Вместо этого создайте секрет GitHub в настройках репозитория и укажите его так, как показано в примере ниже.
min-scoreМинимальная оценка аудита, которую должны достичь файлы OpenAPI, иначе действие завершится ошибкой. По умолчанию — 75.
upload-to-code-scanningЗагрузка результатов аудита в Github Code Scanning. По умолчанию — false. Обратите внимание, что для успешного выполнения этого шага workflow должен иметь соответствующие разрешения.
...
jobs:
run_42c_audit:
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for results upload to Github Code Scanning
...
ignore-failuresЕсли задано значение true, принудительно завершает выполнение успешно, даже если заданные вами условия завершения с ошибкой (например, min-score или критерии SQG) выполнены. По умолчанию — false.
Этот параметр может быть полезен, если вы хотите выявлять сценарии нарушений SQG, не применяя их (например, предоставить командам разработки льготный период перед тем, как начнёте ломать сборки).
ignore-network-errorsЕсли задано значение true, принудительно завершает выполнение успешно, даже если произошла сетевая ошибка (например, сбой подключения к платформе 42Crunch и т. д.). По умолчанию — false.
skip-local-checksЕсли задано значение true, отключает все условия завершения с ошибкой (например, минимальную оценку), заданные в файле 42c-conf.yaml, и завершает выполнение ошибкой только в том случае, если не соблюдены критерии, определённые в SQG. По умолчанию — false.
platform-urlURL-адрес, по которому вы обращаетесь к платформе 42Crunch. По умолчанию — https://us.42crunch.cloud.
Если вы корпоративный клиент, укажите URL-адрес, который вы используете для доступа к своей производственной платформе.
root-directoryКорневой каталог, содержащий файл конфигурации 42c-conf.yaml. Если не указан, используется текущий рабочий каталог плагина, который обычно соответствует корню проверенного репозитория.
default-collection-nameИмя коллекции по умолчанию, используемое при создании коллекций для обнаруженных API. Если имя не задано, имя по умолчанию создаётся на основе информации о репозитории и ветке/PR.
log-levelУровень детализации в журналах: один из FATAL, ERROR, WARN, INFO, DEBUG. По умолчанию — INFO.
share-everyoneАвтоматически предоставляет доступ к коллекциям API, созданным задачей CI/CD, всем пользователям вашей организации на платформе 42Crunch. Допустимые значения: OFF, READ_ONLY, READ_WRITE. По умолчанию — OFF. Обратите внимание, что учётная запись, от имени которой выполняется действие (владелец API-токена), должна иметь разрешение Share with Everyone, иначе задача завершится ошибкой 403.
json-reportЗаписывает отчёт о выполнении аудита в формате JSON в указанный файл. Отчёт о выполнении содержит список API, которые были созданы, обновлены и удалены. Это полезно, если вы хотите автоматически обрабатывать результаты выполнения аудита на последующем шаге конвейера. По умолчанию отчёт не записывается.
api-tagsЗадача CI/CD может автоматически назначать теги вновь созданным API. Теги указываются в следующем формате: category1:name1 category2:name2. Этот флаг является необязательным.
sarif-reportПреобразует необработанный JSON-формат аудита в SARIF и сохраняет результаты в указанный файл. По умолчанию отчёт не записывается.
audit-timeoutЗадаёт максимальное время ожидания (в секундах) для отчёта аудита. Задача завершится ошибкой, если результат не будет готов в течение этого интервала. По умолчанию: 600
Создайте API-токен на платформе 42Crunch и скопируйте его значение в секрет репозитория с именем API_TOKEN.
Типичный новый шаг в существующем workflow выглядит так:
- name: 42crunch-static-api-testing
uses: 42Crunch/api-security-audit-action@v4
with:
api-token: ${{ secrets.API_TOKEN }}
default-collection-name: GitHub-MyRepo-${{ github.ref_name }}
log-level: info
json-report: audit-action-report-${{ github.run_id }}
sarif-report: 42Crunch_AuditReport_${{ github.run_id }}.SARIF
Типичный workflow, который проверяет содержимое репозитория, выполняет Security Audit для каждого найденного файла OpenAPI и сохраняет файл выполнения как артефакт, выглядит так:
name: "42crunch-audit-workflow"
# follow standard Code Scanning triggers
on:
push:
branches: [ "main" ]
pull_request:
# The branches below must be a subset of the branches above
branches: [ "main" ]
schedule:
- cron: '19 9 * * 6'
env:
PLATFORM_URL: https://us.42crunch.cloud
jobs:
run_42c_audit:
environment: QA
permissions:
contents: read # for actions/checkout to fetch code
security-events: write # for results upload to Github Code Scanning
runs-on: ubuntu-latest
steps:
- name: checkout repo
uses: actions/checkout@v3
- name: 42crunch-static-api-testing
uses: 42Crunch/api-security-audit-action@v4
with:
api-token: ${{ secrets.API_TOKEN }}
platform-url: ${{ env.PLATFORM_URL}}
default-collection-name: GitHub-MyRepo-${{ github.ref_name }}
# Upload results to Github code scanning
upload-to-code-scanning: false
log-level: info
json-report: audit-action-report-${{ github.run_id }}
sarif-report: 42Crunch_AuditReport_${{ github.run_id }}.SARIF
- name: save-audit-report
if: always()
uses: actions/upload-artifact@v3
with:
name: auditaction-report-${{ github.run_id }}
path: audit-action-report-${{ github.run_id }}.json
if-no-files-found: error
Действие поддерживается командой 42Crunch Ecosystems. Если вы столкнулись с проблемой или у вас есть вопрос, на который здесь нет ответа, вы можете создать обращение в службу поддержки на support.42crunch.com.
При сообщении о проблеме обязательно укажите: