Mais 123% CVE comunicadas por dia em 2026 do que no ano passado.

Geração de SBOM, registada durante o build

O CRACI é uma ferramenta de geração de SBOM que regista o que cada build de GitHub Actions efetivamente descarregou, em vez de analisar ficheiros depois. Cada SBOM indica o seu grau de completude.

Em resumo: execute os seus jobs de GitHub Actions em runners do CRACI e cada job recebe uma SBOM dos pacotes que obteve, incluindo dependências transitivas e pacotes restaurados de caches de CI, exportada em CycloneDX ou SPDX. Cada SBOM tem um estado de completude e é monitorizada quanto a novas vulnerabilidades após o lançamento. Ferramentas de análise como o Syft e o Trivy reconstroem uma SBOM a partir de ficheiros; o CRACI regista-a a partir do build. Porque é que as SBOM geradas durante o build são diferentes.

Registada durante o build, não analisada depois

A maioria dos geradores de SBOM lê ficheiros depois do build e reconstrói aquilo que julga ter entrado nele. O CRACI gera a SBOM dentro do seu próprio runner de CI. Um proxy que reconhece pacotes observa o tráfego de cada job para as fontes de pacotes, pelo que a SBOM lista o que o job efetivamente descarregou, incluindo as dependências transitivas, e não o que um manifesto diz que deveria ser necessário. Para que o registo exista, não é preciso lockfile, nem árvore de dependências instalada, nem um passo de análise adicional.

Recorded during the build, not scanned afterwards A scanner reads a lockfile or manifest after the fact and reconstructs what it thinks went in. CRACI observes the job's traffic to package sources while the build runs, including packages restored from CI caches, so the SBOM lists what the job actually pulled in. A scanner, after the build Lockfile Scanner SBOM Reconstructs what it thinks went in, from the files it can read Nothing tells you what it missed CRACI, during the build Job fetches Proxy records Job SBOM Lists what the job actually pulled in, including packages restored from CI caches Completeness stated for every job

Todas as camadas de dependências transitivas

A maior parte do que um build descarrega não é uma dependência direta. É uma dependência de uma dependência, várias camadas abaixo, e parte dela nem sequer aparece num lockfile: binários pré-compilados que um script de build descarrega, pacotes restaurados de uma cache, pacotes do sistema operativo. O CRACI regista todos os pacotes que o job obteve, a qualquer profundidade, para que as vulnerabilidades sejam cruzadas com a árvore completa. Em comparações lado a lado com outras ferramentas de SBOM, este registo mais completo revelou vulnerabilidades que as outras ferramentas não reportaram.

Every layer of transitive dependencies A dependency tree three layers deep. The app depends directly on express, pg and a build script. Express pulls in body-parser and router, which pull in raw-body and path-to-regexp; pg pulls in pg-protocol. The build script fetches a prebuilt library during the build, which bundles a native codec that matches a vulnerability advisory. A lockfile scanner sees the packages the lockfile lists; CRACI records every package the job fetched, at every depth, including the ones only the build pulls in. Your app Direct Layer 2 Layer 3 your-app express pg build script body-parser router pg-protocol prebuilt lib raw-body path-to-regexp native-codec advisory match In the lockfile and the build record Only in the build record: fetched while the job ran Matched an advisory, so it is tracked like any other

Os pacotes restaurados de caches de CI ficam na SBOM

As caches são o ponto onde o registo durante o build costuma falhar: um pacote restaurado de uma cache nunca passa por um registo de pacotes, pelo que um proxy, por si só, não o veria. O CRACI faz acompanhar a cache das evidências de dependências, para que os pacotes restaurados de uma cache de CI fiquem na SBOM do job que os restaurou.

Packages restored from CI caches stay in the SBOM A first job fetches packages from a registry through CRACI's proxy and saves a cache. The dependency evidence travels with the cache, so when a later job restores it, those packages stay in that job's SBOM even though they never touched a registry. First run: cache miss npm registry Job 1 fetches Cache + evidence Packages recorded through the proxy Later run: cache hit Job 2 restores Cache + evidence No registry request, packages still recorded Job 2 SBOM express 5.2.1 (from cache) lodash 4.17.21 (from cache) Cache-restored packages stay in the SBOM

Um estado de completude para cada job

O acompanhamento de vulnerabilidades só consegue cruzar os componentes que a sua SBOM lista. Um pacote que falta na SBOM é uma vulnerabilidade sobre a qual ninguém é alertado. Por isso, em vez de apresentar todas as SBOM como completas, o CRACI indica a completude de cada job e de cada cache: Complete, Complete with connections, Incomplete, Unavailable ou Not recorded. Fica a saber em que SBOM pode confiar e quais merecem uma segunda análise.

A completeness state for every job Instead of presenting every SBOM as complete, CRACI states completeness for each job and each cache: Complete, Complete with connections, Incomplete, Unavailable or Not recorded. Workflow run: SBOM completeness Job Completeness build Complete test Complete with connections integration Incomplete docs Not recorded Why it matters Vulnerability tracking can only match listed components. A package missing from the SBOM is a vulnerability nobody is alerted about, so CRACI says when a list is partial.

Os ecossistemas e formatos com que trabalha

O CRACI regista pacotes de fontes npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk e Git, bem como as predefinições de descarga do Yocto e do OpenEmbedded, e trata os mirrors npm e PyPI do JFrog Artifactory como fontes conhecidas. O suporte para Maven e Java está no roadmap. As SBOM são exportadas em CycloneDX e SPDX, com as dependências transitivas incluídas, prontas a partilhar com clientes, parceiros e auditores.

Ecosystems and formats CRACI records packages from npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk and Git sources, plus Yocto and OpenEmbedded download presets, and treats JFrog Artifactory npm and PyPI mirrors as known sources. Maven and Java are on the roadmap. SBOMs export as CycloneDX or SPDX. Recorded today npm PyPI RubyGems Cargo Go Nix OCI apt · apk Git sources, Yocto presets Artifactory npm, PyPI mirrors On the roadmap Maven and Java Export CycloneDX SPDX With transitive dependencies and declared licenses

Licenças declaradas em cada componente

Cada pacote registado leva a sua licença declarada para a SBOM. Pode ver que dependências estão sujeitas a uma licença comercial ou de outra forma restritiva antes de lançar o produto, e as licenças copyleft são detetadas antes de chegarem ao seu produto.

Declared licenses on every component Every recorded package carries its declared license into the SBOM, so restrictive and copyleft licenses show up before you ship. License policy rules can block a build on a license. Job SBOM: components and licenses Component Declared license express 5.2.1 MIT requests 2.32.3 Apache-2.0 serde 1.0.219 MIT OR Apache example-lib 1.4.0 GPL-3.0 copyleft License policy Build blocked: GPL-3.0 is not allowed Caught before it ends up in your product

Proveniência através da API

A SBOM é uma parte do que o CRACI regista para cada job. A REST API pública devolve SBOM, traços de rede e dados de proveniência, tudo registado a partir do mesmo build.

Provenance data from every build Every job on CRACI records the packages it fetched and its network trace. The public REST API returns the job's SBOMs, network trace and provenance. Build release job on CRACI Recorded packages fetched network trace Provenance build data, via the API Ask the API about any job Job → SBOM, trace, provenance Returned by the API Job Packages CycloneDX SBOM Network trace Recorded on every CRACI job, no extra step

Monitorizada após o lançamento

Uma SBOM é a forma de uma empresa saber o que está dentro do software que distribui, e clientes e reguladores pedem-na cada vez mais: o Cyber Resilience Act obriga os fabricantes a elaborá-la para os produtos vendidos na UE. O CRACI reavalia continuamente as SBOM monitorizadas à medida que são publicadas novas vulnerabilidades, agrega as conclusões de todos os builds e repositórios e suporta VEX. As SBOM que recolhe dos seus próprios fornecedores são monitorizadas a par dos seus builds.

Vulnerability tracking after release After a release ships, its SBOM stays monitored. When a new vulnerability is published, CRACI re-evaluates the monitored SBOMs, finds the affected releases, and the security team triages the finding and routes it to the team that owns the fix. The inventory view shows which software versions are deployed to which products. Release shipped SBOM monitored Later New advisory published Re-evaluated automatically Finding: critical, in 2 releases 1. Triage 2. Route to owner 3. Team fixes Policy gates can block a build on findings · VEX supported Inventory: deployed versions Product Version Web app v4.12.0 Mobile API v2.3.1

Uma SBOM registada face a uma SBOM analisada

Os scanners são a ferramenta certa para software que não foi a sua empresa a compilar. Para as suas próprias versões, é isto que muda quando se regista o build. Um scanner lê o lockfile ou o resultado do build e deduz o que entrou nele. O CRACI vê o tráfego que entra no build, pelo que as dependências ocultas trazidas por hooks de instalação, scripts de build e imagens base também acabam na SBOM.

How a scanned SBOM and a recorded SBOM are made Left, a scanner: it reads the lockfile after the build, which lists packages A to E, so its SBOM contains A to E. The build also fetched code through an install hook, a build script download and a base image, which are in no lockfile, so the scanned SBOM is missing them. Right, CRACI: it sees the traffic coming into the build, so all eight packages, including the three hidden dependencies, land in the recorded SBOM. Scanner reads files after the build package-lock.json A B C D E the build also fetched install hook download build script download base image layers in no lockfile, so the scan never sees them Scanned SBOM A B C D E missing missing missing CRACI sees the traffic into the build the network build job on CRACI every package that comes in Recorded SBOM A B C D E install hook build script base image hidden ones too
A scanner can only list what the lockfile or the output declares. CRACI sees what actually came into the build, including the hidden dependencies.
Funcionalidade CRACI Ferramenta de SBOM baseada em scanner
Como é produzida a lista de componentes Registada a partir do tráfego de pacotes do próprio build Reconstruída a partir de ficheiros, a posteriori
Precisa de um lockfile ou de dependências instaladas Não Normalmente, de um ou de outro
Pacotes restaurados de caches de CI As evidências acompanham a cache Só se os ficheiros estiverem presentes na análise
Estado de completude por job Cinco estados, por job e por cache
Ligação assinada entre artefacto e build Sem proveniência assinada Com um passo de assinatura separado
Software que não foi a sua empresa a compilar Adicione antes a SBOM do fornecedor
Sistemas de CI GitHub Actions hoje; outros sistemas de CI no roadmap Funciona em qualquer CI
  • Incluído
  • Em parte
  • Não incluído
  • No roadmap

Está a comparar ferramentas concretas? Consulte Ferramentas de SBOM comparadas para o Syft, Trivy, cdxgen, Microsoft SBOM Tool, Dependency-Track e outras. Para uma visão mais ampla, consulte ferramentas de segurança da cadeia de abastecimento de software comparadas.

SBOM basics: SPDX, CycloneDX and OpenVEX

O que uma SBOM regista, como os formatos SPDX e CycloneDX diferem na prática e o que o OpenVEX acrescenta sobre se uma vulnerabilidade afeta realmente um produto.

Petteri Pulkkinen e Erika Marttinen em Kubernetes Community Days Helsinki 2026, de 16:50 a 22:05 de SBOMbastic: Getting Ready for Upcoming EU Cybersecurity Regulation in Software Supply Chains.

Geração de SBOM: perguntas frequentes

O que é a geração de SBOM?

A geração de SBOM consiste em produzir uma lista de materiais de software (software bill of materials): uma lista legível por máquina dos componentes e dependências de um software. Pode ser feita a partir dos ficheiros de código-fonte, durante o build ou através da análise de um artefacto final, como uma imagem de contentor. O CRACI gera a SBOM durante o build, a partir do que o build efetivamente descarregou.

Como é que o CRACI gera uma SBOM?

Os seus jobs de GitHub Actions são executados em runners do CRACI. Durante a execução de cada job, um proxy que reconhece pacotes observa o tráfego para as fontes de pacotes e regista os pacotes que o job descarrega, incluindo dependências transitivas e pacotes restaurados de caches de CI. Cada job recebe a sua própria SBOM com um estado de completude.

Tenho de alterar os meus workflows?

Basta alterar runs-on para craci. O CRACI substitui o runner, não o GitHub Actions, pelo que os seus workflows e as respetivas execuções continuam no GitHub.

Que ecossistemas de pacotes o CRACI regista?

Fontes npm, PyPI, RubyGems, Cargo, Go, Nix, OCI, apt, apk e Git, bem como as predefinições de descarga do Yocto e do OpenEmbedded. Os mirrors npm e PyPI do JFrog Artifactory são tratados como fontes conhecidas. O suporte para Maven e Java está no roadmap.

Em que formatos de SBOM posso exportar?

CycloneDX e SPDX, incluindo as dependências transitivas e a licença declarada de cada componente.

O que significa o estado de completude?

Complete significa que o CRACI observou evidências completas do job e que todas as caches restauradas estavam completas. Complete with connections significa que o job também usou ligações de rede personalizadas que convém rever. Incomplete significa que alguma condição pode ter deixado dependências de fora. Unavailable significa que não foi possível avaliar as evidências, e Not recorded significa que o job é anterior à indicação de completude.

O CRACI encontra vulnerabilidades na SBOM?

Sim. O CRACI reavalia continuamente as SBOM monitorizadas à medida que são publicadas novas vulnerabilidades, agrega as conclusões de todos os builds e repositórios e suporta VEX. As equipas de segurança fazem a triagem do que é encontrado e enviam-no às equipas responsáveis pela correção.

O CRACI consegue gerar uma SBOM para software que não compilei?

Não. O CRACI regista os builds executados nos seus runners. Para o software que compra, adicione a SBOM do fornecedor e o CRACI monitoriza-a a par dos seus próprios builds. Para uma imagem de terceiros que não compilou, um scanner é a opção prática; consulte Ferramentas de SBOM comparadas.

Veja a SBOM do seu próprio build

Marque uma demo, execute um dos seus workflows de GitHub Actions no CRACI e veja o que ele efetivamente descarregou

Marcar uma demo