Gepinde scannerversies verouderen ongemerkt — check-actions kijkt alleen naar Actions #802
Labels
No labels
accepted
bug
declined
docs
duplicate
enhancement
good first issue
in-progress
needs-info
privacy
security
triage
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
LibreKAT/Ocideck#802
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Wat er speelt
Sinds #799 (
.forgejo/workflows/scans.yml) en #800 (.github/workflows/ci.yml)staan gitleaks, trufflehog en semgrep op een vaste versie, sha256-gecontroleerd.
Dat is goed, en het was precies de bedoeling van #778: "een scanner die zichzelf
bijwerkt verandert stilletjes wat de poort betekent."
De keerzijde van een pin wordt nergens bewaakt. Er is één plek in de repo die
bijhoudt of een pin achterloopt —
make check-actions(
tool/check_pinned_actions.dartplus.github/pinned-actions.json) — en diekijkt uitsluitend naar Actions die op een exacte versie staan. Er staat er
precies één in:
aquasecurity/trivy-action. Een versie die in eenrun:-blokgepind is, valt buiten die lijst en dus buiten de monitor.
Gevolg: de drie scannerversies verouderen zonder dat iets het zegt.
Voor déze drie is dat geen cosmetisch punt. Een geheimenscanner die stilstaat,
mist de detectoren voor sleutelvormen die pas daarna zijn ontstaan — en dan staat
de poort groen omdat hij niet weet waarnaar hij moet kijken. Dat is dezelfde
faalvorm die #799 bij
fetch-depthbeschrijft: groen dat niets gelezen heeft.Waarom dit een eigen issue is en geen bezwaar tegen de pin
Niet-pinnen is geen alternatief. #778 heeft die knoop terecht doorgehakt: zonder
pin betekent "groen" elke week iets anders, en dat is erger. Wat ontbreekt is de
tegenhanger van de pin — een melding dat er een nieuwere is. Die vorm bestaat
hier al twee keer:
make deps-checkvoor de gevendorde JS,make check-actionsvoor de Actions. Er is er alleen geen voor deze drie.
Wat er ongeveer moet gebeuren
.github/pinned-actions.jsonheet naar waterin staat, en
check_pinned_actions.dartprint "pinned CI Actions". Erbinaries bij schuiven laat de naam liegen; het is een hernoemd manifest of een
tweede lijst, niet een stilzwijgende uitbreiding.
scans.ymlén inci.yml, en dat is nu een menselijke afspraak die in hetcommentaar van beide bestanden staat opgeschreven. Uit elkaar lopen is precies
wat een poort wél kan zien.
check-actionsendeps-outdated:een bump is een prompt, geen regressie. Rood mag hier niet van iemand anders
zijn PR afhangen.
laatste" is daar dus een andere dan voor de twee tarballs.
Wat het niet raakt
Het bestandsformaat, de opslag en de afhankelijkheden van de app: niets. Dit
gaat alleen over CI-definities en
tool/.Waar het vandaan komt
Gevonden bij het inbouwen van #800, bij de vraag "wie merkt het als deze drie
getallen twee jaar blijven staan". Het antwoord was: niemand.
Opgepakt. Tak:
ci/pins-verouderingsbewaking-802. Verwachte reikwijdte:.github/pinned-actions.json(hernoemd),tool/check_pinned_actions.dart(hernoemd en uitgebreid), het make-doel, een nieuwe test die de manifesten en de twee workflows tegen elkaar houdt, endocs/CHECKS.md+docs/SECURITY_DESIGN.md.Opgelost en op main. PR #808, gemerged als
606f5a29.a7c6e923→ het manifest en het gereedschap dekken nu ook de scannerbinaries en heten ernaar:.github/pinned-ci-versions.json,tool/check_pinned_versions.dart,make check-pins. Twee lijsten (actions/tools), twee bronnen (GitHub-releasetag_nameen PyPIinfo.version); semgrep bij PyPI, want de workflow installeert hem met pip.033dc115→test/pinned_versions_manifest_test.dart, offline en in de suite: het manifest tegen béide workflows, inclusief de richting die niemand onthoudt — een*_VERSION:-pin die nergens in het manifest staat laat de test vallen. Drie mutaties gedraaid om te zien dat hij bijt.f77a8d84→ CHECKS.md, SECURITY_DESIGN.md, CHANGELOG.7f4b18d1→ en de eerste bevinding meteen weggewerkt: semgrep 1.170.0 → 1.171.0 in beide workflows, in het manifest én op de werkbank (brew upgrade semgrep). Is er een hogere, dan gaat alles mee — anders draai je alsnog niet de laatste. Nagemeten:make sastop 1.171.0 geeft 0 bevindingen over 709 bestanden met 3 regels, gelijk aan 1.170.0.make check-pinsstaat nu op vier keer "up to date".make check,make check-secretsenmake sastlokaal groen;scans.ymlgroen op de PR, dus de gebumpte pin is ook in CI werkelijk geïnstalleerd en gedraaid.