ci(scanners): gepinde, sha256-geverifieerde scanners in de GitHub-definitie #804
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!804
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/scanners-gepind-800"
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 #800
De stap "Gereedschap voor de scanners" in
.github/workflows/ci.ymlhaaldegitleaks en trufflehog binnen door een installatiescript vanaf de tip van een
branch door
shte pijpen, en semgrep zonder versie:Twee dingen tegelijk mis: willekeurige code van een bewegende aanwijzer,
ongeverifieerd uitgevoerd, én scanners die zichzelf bijwerken — waardoor "groen"
stilletjes iets anders gaat betekenen dan de week ervoor. #778 benoemde precies
dit als anti-patroon, en zei er in dezelfde alinea bij dat wie de binaries zelf
trekt ze moet verifiëren zoals de Flutter-stap dat doet.
Wat erin zit
1. Gepinde, sha256-geverifieerde installatie — het patroon uit
.forgejo/workflows/scans.yml(#799): de versie in eenenv-blok, de tarballbinnengehaald en gecontroleerd tegen het gepubliceerde release-manifest, semgrep
gepind in een venv (systeem-pip is op Ubuntu 24.04 afgeschermd, PEP 668). Drie
stappen in plaats van één, zodat de log zegt wélke scanner niet binnenkwam.
Eén bewuste afwijking van
scans.yml: de pin staat in hetenv-blok van zijneigen stap en niet in één blok bovenaan de taak. Die taak scant hier niet
alléén, en tachtig regels tussen pin en download is de helft die je bij een bump
vergeet.
2.
fetch-depth: 0op de checkout — losse commit, gevonden bij (1). De taakcheckte uit met de standaard van
actions/checkout, één commit diep, en draaidedaarna
make check-secrets; twee van de vier passes daarvan lezen de historie(
gitleaks git .,trufflehog git file://.). Op een ondiepe kloon lezen diebijna niets en eindigen groen — en het geval waarvoor ze bestaan is nu juist het
geheim dat drie commits terug is toegevoegd en daarna "verwijderd".
scans.ymlhad dit al; alleen deze definitie liep achter. Staat los van de pinsen kan er als losse commit uit.
3. Een vervallen zin uit het commentaar — "geen marketplace-actions, want
die zouden gepind moeten worden": hieronder wordt nu sowieso gepind, dus dat
argument onderscheidt niets meer. De tweede helft (de stapnaam zou liegen) staat
nog.
4. Documentatie —
CHECKS.mdbeschreef de Gate (Linux)-taak zondercheck-audience-boundary,check-secretsensast, terwijl die stappen er alin stonden. Aangevuld, plus een punt over wat er nu anders is.
CHANGELOG.mdkreeg de ingang.
5. Een correctie op #799, dat tijdens dit werk landde. Zie hieronder.
Dit bestand draait nergens
Forgejo leest
.forgejo/workflows/en dat schaduwt.github/workflows/; dit iseen referentiedefinitie voor een GitHub-spiegel. Er is dus geen CI-run die deze
wijziging bewijst — en om dezelfde reden was er ook geen buildmachine die de
ongepinde code uitvoerde. Het moest toch: dit is het bestand dat een bijdrager
als eerste vindt (#592), en op de dag dat de spiegel er komt draait het wél.
Hoe het dan wél getoetst is
yq4.53.2, op beide workflows: ze ontleden, en de drieenv-blokken komen er met de juiste waarden uit.shellcheck -s bashover de drierun-blokken, uit de YAML geëxtraheerd:schoon.
gitleaks_8.30.1_linux_x64.tar.gzentrufflehog_3.95.9_linux_amd64.tar.gzstaan er allebei in en leveren een sha256 op — de verificatie is op deze
versies dus geen no-op.
scans.ymlgelegd; de afwijkingen staan hierboven.CHECKS.mdnagelopen: geen kapotte.make checkgroen.De correctie op #799
De aanleiding voor
test -n "$SHA"zoals #799 die opschreef, klopt niet — en hijstaat op drie plekken: het commentaar in
scans.yml, de beschrijving inCHECKS.mden de CHANGELOG-ingang.Nagemeten met GNU coreutils 9.5 (
ubuntu:24.04draait 9.4, dezelfde codebasis):bij een lege treffer loopt
sha256sum -c -níet stil met exit 0 door. Hij meldt"no properly formatted checksum lines found" en eindigt op 1 — zowel via een
grepzonder treffer als met een lege$SHAuitawkdie alsecho " /pad" | sha256sum -c -binnenkomt.De regel blijft staan, om een andere reden: zonder hem struikelt de stap over de
invoer van sha256sum, en wie dat leest gaat de verificatie debuggen in plaats
van te zien dat er een release-asset hernoemd is. De CHANGELOG-ingang van #799
krijgt een gedateerde correctie in plaats van een herschrijving — het is een
dagboek, en wat er stond hoort bij hoe het liep.
Bewaker
Geraakt: "iets dat een nieuwe partij vertrouwt". Uitkomst: geen nieuwe partij —
dezelfde uitgevers als voorheen, maar een vast punt in plaats van een bewegend,
mét controle. Eerlijk erbij: het manifest komt van diezelfde uitgever, dus dit is
geen bewijs over de uitgever, en de transitieve afhankelijkheden van semgrep
zijn niet gehasht. Allebei staat het in het commentaar in plaats van stil
gelaten. Bestandsformaat, opslag en app-afhankelijkheden: niet geraakt.
Botsing, hardop: pinnen ruilt "altijd het nieuwste" in voor "reproduceerbaar en
bewust". #778 heeft die knoop doorgehakt en dat is hier gevolgd — maar de
tegenhanger ontbreekt: niets bewaakt dat deze drie getallen verouderen, en een
geheimenscanner die stilstaat mist de sleutelvormen die daarna zijn ontstaan.
Apart ingediend als #802, want het raakt
scans.ymlnet zo hard en het iseen wijziging in
tool/, niet in deze workflow.test -n "$SHA"klopt niet — nagemeten