Integridade da cadeia de suprimentos
Visão geral
Seção intitulada “Visão geral”Os controles de cadeia de suprimentos do NextPDF operam em dois pontos: gates de CI que rodam em todo pull request que altera dependências e em toda tag de versão, e o workflow de release, que configura a geração de proveniência, a assinatura keyless e a emissão de SBOM.
| Controle | Tipo |
|---|---|
SBOM CycloneDX 1.7 do build | Gate de CI, rígido |
| Declaração in-toto que se compromete com os insumos do build | Gate de CI, rígido |
| Comparação de fingerprints SHA-256 das dependências com uma linha de base fixada | Gate de CI, rígido |
| Verificação de consistência OpenVEX em relação à política de advisories de dependências | Gate de CI, rígido |
| Verificação de determinismo entre fixtures | Verificação de CI, melhor esforço |
Geração de proveniência com slsa-github-generator fixado | Configuração de workflow — workflow de release |
Assinatura keyless com cosign da Sigstore, com registro de transparência no Rekor | Configuração de workflow — workflow de release |
Emissão de SBOM CycloneDX 1.7 e SPDX 2.3 | Configuração de workflow — workflow de release |
Matriz noturna de php-fuzzer sobre os caminhos de parser e writer | CI agendada |
Gates de CI
Seção intitulada “Gates de CI”Todo pull request que altera dependências, e toda tag de versão, executa:
| Verificação | O que faz | Gate |
|---|---|---|
| Inventário | Emite um SBOM CycloneDX 1.7 do build | Rígido |
| Registro de insumos do build | Emite uma declaração in-toto que se compromete com os insumos do build | Rígido |
| Integridade das dependências | Compara fingerprints SHA-256 dos bytes com uma linha de base fixada | Rígido |
| Consistência VEX | Exige que cada entrada da política de advisories de dependências tenha uma declaração correspondente no documento OpenVEX v0.2.0 do repositório | Rígido |
| Reprodutibilidade | Executa uma verificação de determinismo entre as fixtures | Melhor esforço |
O gate de integridade das dependências compara fingerprints SHA-256 dos bytes da árvore de dependências com uma linha de base fixada no repositório, de forma independente dos metadados dos pacotes.
Configuração do workflow de release
Seção intitulada “Configuração do workflow de release”Proveniência — configuração de workflow
Seção intitulada “Proveniência — configuração de workflow”O workflow de release fixa o workflow reutilizável canônico slsa-github-generator,
configurado para gerar proveniência in-toto dentro de um builder isolado e efêmero, e
configura o slsa-verifier para rodar em linha contra a saída do gerador.
Assinatura e transparência — configuração de workflow
Seção intitulada “Assinatura e transparência — configuração de workflow”O workflow de release configura a assinatura keyless com cosign da Sigstore para o
bundle de artefatos, com registro de transparência no Rekor. A assinatura keyless
deriva um certificado de curta duração da identidade OIDC do workflow
(https://token.actions.githubusercontent.com), de modo que esse caminho de assinatura
de release é configurado sem nenhuma chave de longa duração para assinatura de
artefatos.
SBOM — configuração de workflow
Seção intitulada “SBOM — configuração de workflow”O workflow de release configura a emissão dupla de SBOM — um documento CycloneDX 1.7
e um documento SPDX 2.3.
Fuzzing
Seção intitulada “Fuzzing”Uma matriz noturna de php-fuzzer, junto com um harness de AST/árvore de estrutura,
exercita os caminhos de parser e writer.