Перейти к содержимому
traio.kz

OWASP Dependency Track

Dependency Track используется для анализа рисков зависимостей на основе SBOM. В TRAIO этот шаг обычно идёт после генерации SBOM (например, Syft) и позволяет получить унифицированный отчёт по findings в JSON

  • В Sequences до этого шага должен быть выполнен job генерации SBOM (например, Syft), чтобы SBOM-файл был доступен в pipeline volume
  • Установленный Dependency Track отдельно
    • Сетевая доступность до Depedency Track HTTP/HTTPS
    • Адрес Dependency Track
    • API Token с правами: BOM_UPLOAD, PORTFOLIO_MANAGEMENT, PROJECT_CREATION_UPLOAD, VIEW_PORTFOLIO, VIEW_VULNERABILITY
  1. Job формирует уникальные projectName и projectVersion на каждый запуск (ephemeral-режим)
  2. Загружает SBOM в Dependency Track через endpoint загрузки BOM с autoCreate=true
  3. Ждёт завершения обработки BOM по token
  4. Находит UUID созданного проекта по name и version
  5. Экспортирует findings в JSON и сохраняет файл в /data
  6. Удаляет проект в Dependency-Track (cleanup)

Для запуска job используется образ:

  • registry.gitlab.com/traio-group/tools/dependency-track:latest
Переменная Обязательная Пример Описание
DT_URL Да https://dependency-track.company.kz URL инстанса Dependency-Track (без завершающего / или с ним — скрипт нормализует).
DT_API_KEY Да *** API key для доступа к Dependency-Track API.
SBOM_PATH (указывается автоматический) sbom.json или /data/sbom.json Путь к SBOM-файлу, который будет загружен в Dependency-Track.
REPORT_FILE_NAME (указывается автоматический) dependency-track-findings.json Имя выходного отчёта (будет сохранён в /data).
SCAN_TYPE (указывается автоматический) OWASP Dependency Track Тип сканирования для парсинга

Скрипта для job:

Окно терминала
echo "[stage 0] init"
DT="${DT_URL%/}"
HDR="X-Api-Key: ${DT_API_KEY}"
OUT="/data/${REPORT_FILE_NAME}"
RUN_ID="$(date +%Y%m%d-%H%M%S)"
PN="traio-scan-${RUN_ID}"
PV="run-${RUN_ID}"
echo "[info] projectName=${PN}"
echo "[info] projectVersion=${PV}"
# Stage 1 — Upload BOM (SBOM -> Dependency-Track)
echo "[stage 1] upload bom"
UPLOAD="$(curl -sS -X POST "${DT}/api/v1/bom" \
-H "${HDR}" \
-F "projectName=${PN}" \
-F "projectVersion=${PV}" \
-F "autoCreate=true" \
-F "bom=@${SBOM_PATH}")"
TOKEN="$(echo "$UPLOAD" | jq -r '.token')"
echo "[info] upload token=${TOKEN}"
# Stage 2 — Wait for BOM processing
echo "[stage 2] wait bom processing"
i=0
while [ $i -lt 18 ]; do
PROC="$(curl -sS "${DT}/api/v1/bom/token/${TOKEN}" -H "${HDR}")"
echo "[wait] attempt=$((i+1))/18 status=${PROC}"
echo "$PROC" | jq -e '(.processing == false) or (.status == "PROCESSED") or (.status == "COMPLETE")' >/dev/null 2>&1 && break
i=$((i+1))
sleep 10
done
# Stage 3 — Resolve project UUID
echo "[stage 3] lookup project uuid"
LOOKUP="$(curl -sS -G "${DT}/api/v1/project/lookup" \
--data-urlencode "name=${PN}" \
--data-urlencode "version=${PV}" \
-H "${HDR}")"
UUID="$(echo "$LOOKUP" | jq -r '.uuid')"
echo "[info] project uuid=${UUID}"
# Stage 4 — Export findings JSON
echo "[stage 4] export findings (FPF)"
curl -sS "${DT}/api/v1/finding/project/${UUID}/export" -H "${HDR}" | jq '.' > "${OUT}"
echo "[info] report saved: ${OUT}"
ls -lah "${OUT}"
# Stage 5 — Cleanup (delete ephemeral project)
echo "[stage 5] cleanup (delete project)"
curl -sS -X DELETE "${DT}/api/v1/project/${UUID}" -H "${HDR}" >/dev/null 2>&1 || true
echo "[done] dependency-track job finished"
  • 401/403 при запросах к API
    • Проверьте DT_API_KEY и права ключа.
  • TOKEN = null / пустой ответ на upload
    • Проверьте DT_URL, доступность инстанса и корректность SBOM_PATH.
  • Долгая обработка BOM
    • Увеличьте число попыток/таймаут ожидания (сейчас 18×10с = 180с).