AUR-622 — Plugin externo na validação agendada, achados só na aba Security
Problema
O dono pediu um harness agêntico de vulnerabilidade como plugin externo da validação agendada, sem que a vulnerabilidade fique pública: num repositório público, log do Actions, resumo do job, anotações, artefatos e PR são públicos; a lista de alertas de code scanning exige escrita.
Desenho
| arquivo | responsabilidade |
|---|---|
internal/config/scheduled.go |
scheduled.plugins: validação na leitura (digest ou Dockerfile, env só nomes, output.path relativo, nome único) e governScheduled (entrada required da política vence; não obrigatória cede). |
internal/plugin/adapter_vvah.go, adapter_sarif.go |
Um adaptador por formato: findings.json 1.x do harness (só main + TRUE_POSITIVE; o resto conta) e SARIF genérico (executionSuccessful, hollow, coverageDegraded). |
internal/plugin/harness_coverage.go |
vvah-findings lê também o SARIF do harness e o *_errors.jsonl: perda de cobertura ou erro de estágio s2–s6 é inconclusivo, mesmo com exit 0 e degraded: false. |
internal/plugin/paths.go |
Caminho absoluto, .., inexistente ou que sai por link simbólico reprova o ingest. |
internal/plugin/sarif.go |
SARIF 2.1.0: driver AurumCode plugin <nome>, plugin/<nome>/<cwe>, partialFingerprints (case_id), automationDetails.id, security-severity; texto redigido campo a campo; gravação atômica. |
internal/plugin/ingest.go, report.go |
Ordem do ingest; inconclusivo e recusa não gravam SARIF (exit 1); a saída é só contagem e motivo estável. |
internal/plugin/destination.go |
security ou issues pela visibilidade; repositório público nunca usa issue. |
cmd/aurumcode/cmd_plugin.go |
aurumcode plugin list|ingest|destino (só flags). |
.github/workflows/review.yml |
Jobs plugins-list e plugins (matriz por plugin) em schedule/workflow_dispatch na branch padrão; saída do plugin em arquivo; upload-sarif fixado, categoria aurumcode/plugin/<nome>. |
demo/plugins/vvah/ |
Imagem do harness fixado por commit; perfil "só descoberta" gerado do default.yaml do pacote. |
demo/tutoriais/plugin-agendado/ |
Tutorial offline: 3 casos de uso e 2 de falha. |
Rodada de correção
- Política central com
dockerfileé recusada na leitura (ValidatePolicy). - Descarte
INCONCLUSIVE/VERIFY_ERROR/UNCONFIRMEDvira avisoplugin/<nome>/nao-verificado/<classe>;coverageDegradedsó por motivos representados (s6_undetermined) é conclusivo;zero_analysise motivo desconhecido seguem inconclusivos. - Timeout do job = timeout do plugin + 30 min (
job_timeout_minutes); rc 124 vira uma linha no log. - Achado dentro do diretório de
output.pathé recusado. pull_request: os jobs são pulados peloif:; o passo de recusa é defesa em profundidade.
Aceite
tests/acceptance/AUR-622.sh: AC-001..AC-006, MUT-001 (aceitar
degraded: true derruba AC-003) e MUT-002 (imprimir a saída do plugin
derruba AC-002).
Pendências declaradas
- Sincronização de issues para repositório privado sem Code Security: o
destino é decidido e, quando seria
issues, o job falha sem publicar. - Formato do
*_errors.jsonl(stage,error),finding.filerelativo e a montagem somente leitura comsecurity-scan/gravável confirmados na prova real.