feat(release): laat de webbundel met licentie, bron, SBOM en checksums reizen (#520) #665
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!665
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/release-artefacten"
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?
Werkt #520 af voor zover het zonder certificaat kan. Het taggen blijft van de beheerder.
Wat er verandert
Een webbundel die je aan iemand geeft was tot nu toe de app plus de SBOM. Daar horen drie dingen bij die er niet in zaten:
LICENSE.mdenTHIRD_PARTY_NOTICES.md— zonder die voorwaarden mag de ontvanger het ding niet doorgeven. Dat is geen nettigheid maar de afspraak waaronder de afhankelijkheden zélf meereizen.SOURCE.md—main.dart.jsis gecompileerd. EUPL-1.2 artikel 5 vraagt bij het distribueren of communiceren van het Werk om de bron of een aanwijzing ernaartoe, en artikel 1 rekent hosten uitdrukkelijk tot communiceren. Zonder dit kreeg de ontvanger onleesbare JavaScript met een licentie eronder die zegt dat hij het mag bestuderen en aanpassen, en geen route om dat te doen.SHA256SUMS— in het gewonesha256sum-formaat, zodatshasum -a 256 -c SHA256SUMSvolstaat.Dat de checksumstap de láátste is, is de hele reden dat het één gereedschap is (
tool/pack_web_release.dart) en niet een paarcp-regels: zolang kopiëren en hashen op twee plekken staan, komt er een dag waarop iemand er een bestand tussen schuift en de lijst stil onvolledig wordt.--checkloopt een klaargezette bundel na en klaagt óók over een bestand dat er onaangekondigd bíj is gekomen..last_build_idgaat er juist uit vóór het hashen — zie hieronder.Daarnaast staat de op 22-07 genomen scopebeslissing nu in de gepubliceerde tekst in plaats van alleen in het issue: 0.1.0 is een webbundel, desktop blijft zelf-bouwen-uit-de-bron.
Wat het níét belooft
SHA256SUMSis geen handtekening, en de teksten zeggen dat met zoveel woorden. De lijst laat je nákijken; uit zichzelf bewijst hij niets. De controle die wél iets zegt is de sha256 vanSHA256SUMSafzetten tegen de aankondiging, via een ander kanaal — en ook dáár staat de grens bij: het vangt een beschadigde download, een gewijzigde spiegel en een herhost, níet een compromittering van onze eigen publicatieketen. Daar helpt alleen een handtekening of een reproduceerbare build tegen, en die hebben we vandaag geen van beide.Die kernzin staat als constante in de code met een test eromheen, zodat niemand hem later stelliger maakt dan hij is.
Bewakerreview
Gedraaid vóór de poort, want dit raakt publieke beloftes. Twee blokkerende bevindingen, beide nagemeten en verholpen in
908c9719:.well-known/security.txt— een beveiligingscontactbestand dat een herhoster door zijn eigen vervangt. →SOURCE.md..last_build_idwerd mee verzegeld. De inhoud is een md5 over onder meer het absolute pad van de uitvoermap op de bouwmachine. Wie zelf bouwt kreeg daardoor gegarandeerd een andere digest dan de aankondiging, bij byte-identieke bron — de ene controle die een zelf-bouwer een onafhankelijk oordeel geeft, stond structureel op rood. → eruit vóór het hashen, en de claim "sorteren maakt de lijst reproduceerbaar" is teruggebracht tot wat sorteren wérkelijk doet.Vier kleinere bevindingen zijn in dezelfde ronde verwerkt: de bescheidenheidsformulering van
checksumUitleg, de grens van het aankondigingskanaal, de vertrouwensruil van een gehoste webapp tegenover een binair (die stond als "geen probleem" opgeschreven terwijl hij juist de mínst soevereine vorm is), en een standaardrecept voor "er is niets bíjgekomen" dat geen Dart-toolchain vraagt.Getoetst
make checkgroen.make check-webop een echt gebouwde bundel: 134 bestanden, hardening OK, artefacten OK.shasum -a 256 -c SHA256SUMSleest de lijst en wordt rood zodra er één byte wijzigt.diff-recept dat de documentatie geeft levert niets op een schone bundel en wijst een gepland extra bestand aan.test/pack_web_release_test.dart, elke klacht apart rood gezien.Niet gedraaid:
make check-secretsenmake sast— gitleaks, trufflehog en semgrep staan geen van drieën op deze machine (make check-secretsbreekt af op "gitleaks not found"). DAST evenmin. Deze wijziging voegt geen sleutel, geen netwerkpad en geen afhankelijkheid toe, maar de eis is daarmee niet gehaald en dat hoort hier te staan.Buiten scope
version.jsonen de SBOM zeggen0.2.0+1terwijl de nieuwe teksten over 0.1.0 gaan. Dat is #629 en blijft daar.Closes #520