ci(pins): verouderingsbewaking op de gepinde scanners, een poort tegen stil uiteenlopen, en semgrep meteen bij #808
No reviewers
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!808
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/pins-verouderingsbewaking-802"
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?
Closes #802
Sinds #799/#800 staan gitleaks, trufflehog en semgrep op een vaste versie. Goed —
maar een pin zonder tegenhanger veroudert ongemerkt, en voor déze drie is dat
niet cosmetisch: een geheimenscanner die stilstaat eindigt netjes op 0 terwijl
hij de sleutelvormen mist die ná hem zijn bedacht. Groen omdat hij niet wist waar
hij naar moest kijken — dezelfde faalvorm als een historie-scan op een ondiepe
kloon.
Er bestond één monitor,
make check-actions, en die keek uitsluitend naarActions met een exacte versie. Een versie in een
run:-blok viel erbuiten.Wat erin zit
1. De monitor is verbreed en heet ernaar.
.github/pinned-actions.json→.github/pinned-ci-versions.json,tool/check_pinned_actions.dart→tool/check_pinned_versions.dart,make check-actions→make check-pins.Hernoemd in plaats van er stilzwijgend binaries bij te schuiven: een manifest dat
"pinned-actions" heet en scanners bevat, laat zijn naam liegen — zoals #802
vroeg.
Twee lijsten, omdat een
uses:-pin en een binary die eenrun:-blok binnenhaaltop dezelfde manier verouderen en er niet op lijken. Twee bronnen ook: een
GitHub-release draagt
tag_name, PyPI draagtinfo.version. Semgrep wordt bijPyPI opgehaald en niet bij zijn GitHub-release, want de workflow installeert hem
met
pip— "de laatste" moet betekenen: de laatste die díe weg kan bereiken.Een half ingevulde ingang valt nu om met exit 2 in plaats van overgeslagen te
worden. Overslaan zou een pin opleveren die niemand bewaakt, en dat is precies
het ding dat deze tool moet voorkomen.
2. De offline helft is géén advies maar een poort.
test/pinned_versions_manifest_test.dartdraait in de suite en houdt hetmanifest tegen béide workflows. Drie richtingen zijn het voor de hand liggende
soort. De vierde niet, en die is de belangrijkste: elke
*_VERSION:-pin die in.github/workflows/of.forgejo/workflows/opduikt en niet in het manifeststaat, valt om. Zonder die richting kon het manifest verouderen door
wegláting — een vierde scanner erbij, het manifest vergeten, en er kijkt weer
niemand. Dat is #802 opnieuw, één niveau hoger.
Hij scant álle workflowbestanden in beide mappen, niet alleen die het manifest
zelf noemt: een nieuw bestand is precies hoe een pin ongemerkt binnenkomt.
3. Documentatie — CHECKS.md (tabelregel, sectie, en de nieuwe test bij de
klassewachters), SECURITY_DESIGN.md (sprak van "Pinned CI Actions" met één
ingang; klopt sinds #799/#800 niet meer), CHANGELOG.
Hoe het getoetst is
die alleen in
ci.ymlwerd bijgewerkt (rood, mét de bestandsnaam), eenverzonnen
HADOLINT_VERSIONinscans.yml(rood, "nothing monitors this"), entrivy-actionéén minor vooruit zonder manifest (rood). Daarna alle zes weergroen.
make check-pinslive gedraaid, tegen de echte API's. Zie hieronder.dart run tool/check_pinned_versions.dart --offline: exit 0, manifest goedgevormd.
kapotte.
make checkgroen.Wat de monitor meteen vond, en meteen is opgelost
De eerste live run, vóór de laatste commit:
Is er een hogere, dan gaat alles mee — een melding die blijft staan is geen
controle maar een lijstje, en dan draai je alsnog niet de laatste. Vandaar de
laatste commit: semgrep naar 1.171.0 in de pin van
scans.yml, in de pin vanci.yml, in het manifest, én op de werkbank (brew upgrade semgrep). Dielaatste is geen bijzaak: dat CI en de werkbank dezelfde scanner draaien is de
reden dat deze pins bestaan, dus een pin die vooruitloopt op de machine breekt
precies wat hij moest bewaken.
Nagemeten in plaats van aangenomen, want een nieuwe scannerversie mag stilletjes
iets anders vinden:
make sastop 1.171.0 geeft 0 bevindingen over 709bestanden met 3 regels, identiek aan 1.170.0. Daarna:
De manifest-test bleef daarbij groen, wat precies is wat hij moet bewijzen: het
getal ging op alle drie de plekken tegelijk mee.
Bewaker
Geraakt: uitgaand verkeer / een nieuwe partij, en een publieke belofte.
pypi.org. De tool sprak alleenapi.github.com. Het iseen leesverzoek zonder inloggegevens, alleen wanneer een ontwikkelaar
make check-pinsmet de hand draait — niet in de app, niet inmake check,niet in enig pad van een gebruiker. Zelfde categorie als
deps-outdated. Dereden staat in het manifest genoteerd in plaats van stil gelaten.
bewaakt worden. Dat is getoetst en waar: de tool is live gedraaid en meldde
een echte achterstand. Geen onbetaalde belofte.
in
pubspec.yaml, dus geen SBOM.Botsing, hardop: een adviserende controle die blijft rammelen wordt na een maand
behang. Het antwoord daarop is de bump doen — pin én lokale installatie samen,
zoals in de laatste commit — en niet de monitor dempen. Zou blijken dat deze
vier zó vaak uitkomen dat het gerammel de melding waardeloos maakt, dan is de
bespreekbare aanpassing een drempel (bijvoorbeeld: alleen melden bij een minor-
of majorverschil), niet het weghalen van de bewaking.
ci(pins): verouderingsbewaking op de gepinde scanners, plus een poort tegen stil uiteenlopento ci(pins): verouderingsbewaking op de gepinde scanners, een poort tegen stil uiteenlopen, en semgrep meteen bijd058f3f5367f4b18d1d5