AUR-530 — Varredura agendada acha CVE publicada depois do merge
Medido antes (pela leitura)
.github/workflows/review.ymléon: workflow_callcom um jobreviewsó de PR (github.event.pull_request.*); não declara gatilho próprio e não pode concedersecurity-events: write(o SARIF do PR sai como artefato e o caller faz o upload, AUR-521).internal/render/sarif.gogera o SARIF do PR compartialFingerprintsde regra, caminho, linha e contexto, semautomationDetails(a categoria vem docategory:do caller).- A verificação de dependências (AUR-495) só existia sobre um diff.
docs/configuration.mddizia que "um futuro run agendado" atualizaria a mesma análiseaurumcode-policy-gate;docs/getting-started.mdlistava os subcomandos semmcp. Ambos corrigidos.
Decisão
internal/dependencies/scan.go:Scansobre a árvore inteira: oosv-scannerextrai (uma execução,--recursive) os pacotes de todo arquivo que reconhece e essa extração é usada como está; o modelo aponta, na lista de arquivos rastreados, manifestos que o scanner não conhece e lê só esses (arquivo inteiro como linhas adicionadas, aterrado). Lista de arquivos acima do limite do modelo, modelo ausente, scanner ausente ou base inalcançável = inconclusivo.cmd/aurumcode/cmd_dependencies.go: subcomandoaurumcode dependencies --repo --sarif [--politica] [--categoria](registrado emsubcommands.go). Conclusivo: grava o SARIF e sai 0 (os achados não reprovam o job: o estado é o do code scanning). Inconclusivo: sai 1, diz o motivo e não grava SARIF. Configuração/uso: 2.- Impressão digital estável: o
Contextdo achado édependency/v1|<ecossistema>|<pacote>, com regracve/<id>e caminho do manifesto, sem linha (0), versão, severidade nem data; o hash é oFindingFingerprintexistente. internal/render/sarif_categorized.go:BuildCategorizedSARIF/WriteCategorizedSARIFreusamBuildSARIFLoge a redação, e põemautomationDetails.id(aurumcode/dependencies-scheduled/) no run..github/workflows/review.yml: jobreviewcomif: github.event_name != 'schedule'; job novodependencies(só emschedule) que constrói a imagem, faz checkout da branch padrão, roda o subcomando no container e envia o artefatoaurumcode-dependencies-sarifsó comif: success().action.ymlnão mudou: a action standalone é só de PR (documentado).- Docs: seção nova "Varredura agendada de dependências" (com o job de upload
do caller, sem
category:), link emdocs/index.md, comentário velho da seção SARIF corrigido, lista de subcomandos emdocs/getting-started.md.
Como cada AC/MUT é provado
tests/acceptance/AUR-530.sh (pacote cmd/aurumcode; a raiz temporária
também copia .github para o teste do workflow):
- AC-001
TestAUR530AC001ScheduledSARIF(resultadocve/GHSA-..., CVE na mensagem,automationDetails.id), mais os testes do registro de subcomandos (TestAUR572*). - AC-002
TestAUR530AC002StableFingerprintAndClosure: duas execuções vulneráveis com versão e severidade diferentes têm a mesma impressão digital; depois da correção o documento conclusivo não tem o resultado. - AC-003
TestAUR530AC003UnreachableKeepsAlerts(exit 1, sem SARIF, motivo no stderr),TestAUR530AC003WorkflowUploadsOnlyConclusive(job só emschedule, upload só comsuccess()). - MUT-001: a impressão digital passa a incluir a versão: AC-002 fica vermelho.
Riscos
- Código escrito sem compilar; o workflow não foi executado.
github/codeql-action/upload-sarifcomcategory:sobre um SARIF que já temautomationDetails.id: o guia manda não passarcategory:.- Arquivos fora dos
pathsdo card:internal/dependencies/scan.go,internal/render/sarif_categorized.go,docs/index.md,docs/getting-started.md. - Repositório com lista de arquivos rastreados acima de 256 KiB (por volta de 6 mil arquivos) fica inconclusivo na varredura agendada (documentado).
Correções da revisão estática
- Pacote listado pelo scanner sem versão é
Unresolvede a varredura fica inconclusiva, nunca conclusiva com menos pacotes (TestScanVersionlessPackageIsInconclusive). - Regra do SARIF pelo identificador canônico (o menor do advisory) e
registros
GO-/GHSA-do mesmo advisory num alerta só (TestAUR530AliasRecordsAreOneAlert). - Job agendado com
timeout-minutes: 30epersist-credentials: falseem todos os checkouts. - Docs: a varredura agendada não aplica
fail_on,preexisting,licenses_denied, suspeita nemexceptions; o osv-scanner precisa de rede. - Não feito: incluir a versão na impressão digital. Isso contradiz o AC-002 e o MUT-001 deste card (a mesma vulnerabilidade numa versão ainda vulnerável fecharia e reabriria o alerta, perdendo dispensa e histórico do code scanning). A versão continua na mensagem do resultado. Se o dono quiser um alerta por versão, o card precisa mudar o AC-002.