wasviking-sentinel sbom
Gere um SBOM CycloneDX 1.5 on-premises, enriqueça com OSV e CISA KEV e envie para o seu tenant.
O wasviking-sentinel sbom percorre os manifestos de build no host e produz um
SBOM CycloneDX 1.5, enriquecido com os advisories do OSV.dev e as marcações
do CISA KEV. A saída pode ser gravada localmente ou enviada para o seu
tenant WASViking®.
Manifestos suportados
| Ecossistema | Arquivos de manifesto |
|---|---|
| npm | package-lock.json, npm-shrinkwrap.json |
| yarn | yarn.lock |
| pnpm | pnpm-lock.yaml |
| Python | requirements.txt, Pipfile.lock, poetry.lock |
| Go | go.sum, go.mod |
| PHP | composer.lock |
| Java | pom.xml, gradle.lockfile |
| Ruby | Gemfile.lock |
| Dart / Flutter | pubspec.lock |
A varredura lê a partir de um diretório que você informa. Ela não exige que o toolchain da linguagem esteja instalado; ela interpreta o formato do lock diretamente.
Verificação de licença (preflight)
Antes de qualquer trabalho local, o sbom chama o endpoint de preflight da WASViking
para confirmar que a chave de API da organização está ativa. Isso é obrigatório mesmo
quando você não está enviando resultados.
--api-key(ou a variável de ambienteWASV_API_KEY) é obrigatória. Ausente ou vazia, a execução é recusada com exit 1.- A verificação é
POST /api/v1/sentinel/preflight. Qualquer chave de API ativa da organização passa; nenhum escopo específico é necessário para o preflight em si. - O resultado fica em cache em
~/.wasviking/preflight_cache.json(modo0600) por 30 minutos por padrão (TTL vindo do servidor, limitado ao intervalo 60s..6h). - Dentro do TTL, as chamadas seguintes dispensam a rede por completo.
- Se a API estiver inacessível, mas houver em disco uma aprovação recente bem-sucedida (dentro de uma janela de tolerância de 24 horas), a execução continua. Indisponibilidades curtas da WASViking não quebram o CI do cliente.
- Se a API rejeitar ativamente a chave (401 / 403), a janela de tolerância não se aplica. Chaves revogadas bloqueiam na próxima expiração do cache.
- A chave do cache é um SHA-256 truncado da chave de API, então rotacionar a chave invalida o cache automaticamente.
A flag
--submité independente.--api-keyé obrigatória, quer você envie o SBOM, quer não.
Uso básico
A partir do diretório que contém a árvore de código-fonte:
export WASV_API_KEY="wv_live_xxxxxxxxxxxxxxxxxxxxxxxxxxxx"
wasviking-sentinel sbom --path .
Por padrão, a execução grava dois arquivos em --out (padrão .):
wasviking-sbom.cdx.json: documento CycloneDX 1.5.wasviking-sbom.sarif: relatório SARIF dos componentes vulneráveis, para ingestão direta em IDEs e ferramentas de code scanning que consomem SARIF.
Envie para o seu tenant
wasviking-sentinel sbom \
--path . \
--app-name checkout-api \
--app-version "$CI_COMMIT_TAG" \
--submit \
--api-key "$WASV_API_KEY"
O agente faz o envio para POST /api/v1/sentinel/sbom/submit. O envio
carrega:
- O documento CycloneDX 1.5.
- O nome e a versão da aplicação (de
--app-name/--app-versionou detectados automaticamente a partir dos manifestos). - O enriquecimento de OSV e KEV.
- O hostname da máquina que o produziu.
No portal, o envio chega em Inventory → SBOM e alimenta o Supply Chain Watch.
Referência de flags
| Flag | Finalidade | Padrão |
|---|---|---|
--path |
Diretório a ser percorrido em busca de manifestos, de forma recursiva. | . |
--out |
Diretório onde gravar wasviking-sbom.cdx.json e wasviking-sbom.sarif. |
. |
--app-name |
Nome do projeto embutido no metadata.component do BOM. |
(detectado automaticamente) |
--app-version |
Versão do projeto embutida no metadata.component do BOM. |
(detectada automaticamente) |
--fail-on |
Limiar de severidade: critical, high, medium, low, none. |
high |
--no-osv |
Dispensa o enriquecimento do OSV.dev (entrega um SBOM sem enriquecimento). | false |
--air-gapped |
Assegura que não há HTTP externo; usa somente a seed de KEV embutida. | false |
--submit |
Faz o POST do SBOM para a API da WASViking depois da geração. | false |
--api |
URL base da API da WASViking. Variável de ambiente: WASV_API. |
https://api.wasviking.com |
--api-key |
Chave de API da organização. Obrigatória em toda execução (preflight). Adicione o escopo sca:submit à chave se você também usa --submit. Variável de ambiente: WASV_API_KEY. |
(obrigatória) |
--timeout |
Tempo máximo de relógio (wall-clock) para o pipeline de SBOM. | 5m0s |
Execuções air-gapped. Com
--air-gapped, o SBOM usa um snapshot do CISA KEV embutido no binário. Nenhum HTTP externo é realizado. O snapshot do KEV avança a cada release; atualize o binário para atualizar o snapshot.
Determinismo
Duas execuções sobre a mesma árvore de código-fonte produzem SBOMs cujo diff sai limpo. A varredura:
- Ordena os componentes por
purlantes da saída. - Fixa os timestamps de enriquecimento no início da execução.
- Normaliza as strings de versão conforme as regras de cada ecossistema.
Isso importa para as decisões do gate de SCA e para comparar builds por diff.
Exit codes
| Exit code | Significado |
|---|---|
| 0 | SBOM produzido, enviado se solicitado, nada em nível igual ou superior a --fail-on. |
| 1 | Falha genérica (erro de parsing, IO, rede). |
| 2 | Argumento inválido, ou --submit sem uma chave de API. |
| 70 | Achado sinalizado no KEV em nível igual ou superior a --fail-on. Exploração conhecida, trate como urgente. |
| 71 | Achados em nível igual ou superior a --fail-on, nenhum deles no KEV. |
| 79 | Falha de cobertura: a raiz não pôde ser percorrida, então nada foi analisado. Nunca é retornado para um projeto que simplesmente está vazio ou não tem nenhum manifesto suportado. Consulte Falhas de cobertura. |
Duas condições deliberadamente não fazem o build falhar: uma falha no enriquecimento de OSV ou de KEV e uma falha no envio. As duas imprimem um aviso, os artefatos permanecem em disco, e o gate é decidido com base no que a execução realmente conseguiu ver. Uma rede com problemas não deveria, sozinha, bloquear um merge.
O sbom pode, ele próprio, ser usado como gate de CI por meio de --fail-on. Para o wrapper
de nível mais alto, que também executa os scans de secrets e os scans guiados por template em
uma única passada, consulte wasviking-sentinel ci.
O que isto não é
Isto não é um scanner de runtime. Ele lê lockfiles, não processos em execução. Para a detecção de componentes na camada de aplicação, de fora, a plataforma oferece a detecção de componentes a partir da nuvem (camada N1) e a combina com esta camada N2, no ambiente do cliente, para o quadro completo.
