diff --git a/DEVLOG.md b/DEVLOG.md index 7178fe5..2556863 100644 --- a/DEVLOG.md +++ b/DEVLOG.md @@ -44,3 +44,15 @@ Keine Commits in dieser Session. Keine Änderungen ermittelbar. --- +## 2026-08-28 23:00 – 23:01 (0m) +**Beschreibung:** Claude Code Session +**Projekt:** nexarch + +### Commits +- ab7a033 OPS-06: fix — fixture ruft tatsaechlich verwundbaren symbolpfad auf (ParseAcceptLanguage statt Parse, GO-2022-1059 statt falscher advisory-id) + +### Geänderte Dateien +- testdata/vulnfixture-go/go.mod | 8 +++++--- +- testdata/vulnfixture-go/main.go | 7 +++++-- + +--- diff --git a/scripts/verify-supply-chain-gate.sh b/scripts/verify-supply-chain-gate.sh index ed2d155..8db1baf 100755 --- a/scripts/verify-supply-chain-gate.sh +++ b/scripts/verify-supply-chain-gate.sh @@ -1,40 +1,62 @@ #!/usr/bin/env bash # OPS-06 Pruefung 1: beweist, dass govulncheck und npm audit eine absichtlich -# verwundbare Testabhaengigkeit tatsaechlich erkennen und mit Exit-Code != 0 -# enden (= wuerden den Merge blockieren). Laeuft auf dem Testhost (Go/npm -# noetig), nicht auf der Entwicklungsmaschine. +# verwundbare Testabhaengigkeit tatsaechlich ERKENNEN (nicht nur irgendeinen +# Fehler werfen) und mit Exit-Code != 0 enden (= wuerden den Merge blockieren). +# Laeuft auf dem Testhost (Go/npm noetig), nicht auf der Entwicklungsmaschine. +# +# Wichtig: ein Exit-Code != 0 allein ist KEIN Beweis — ein fehlendes Tool +# ("command not found", exit 127) sieht fuer ein reines Exit-Code-Gate genauso +# aus wie ein echter Fund. Deshalb prueft dieses Skript zusaetzlich, dass die +# erwartete Advisory-Kennung tatsaechlich in der Ausgabe steht. set -uo pipefail fail=0 -echo "=== Go-Fixture: golang.org/x/text v0.3.7 (GO-2022-0635 / CVE-2022-32149) ===" +echo "=== Go-Fixture: golang.org/x/text v0.3.7, GO-2022-1059 (Symbolpfad language.ParseAcceptLanguage) ===" if ! command -v govulncheck >/dev/null 2>&1; then - go install golang.org/x/vuln/cmd/govulncheck@latest + echo "govulncheck fehlt, installiere..." + if ! go install golang.org/x/vuln/cmd/govulncheck@latest; then + echo "FEHLER: govulncheck konnte nicht installiert werden — Pruefung nicht durchfuehrbar, kein Ersatz-'OK'." + fail=1 + fi fi -( cd testdata/vulnfixture-go && go mod tidy && govulncheck ./... ) -go_exit=$? -if [ "$go_exit" -eq 0 ]; then - echo "FEHLER: govulncheck hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)" - fail=1 + +if command -v govulncheck >/dev/null 2>&1; then + go_output=$(cd testdata/vulnfixture-go && go mod tidy && govulncheck ./... 2>&1) + go_exit=$? + echo "$go_output" + if [ "$go_exit" -eq 0 ]; then + echo "FEHLER: govulncheck hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)" + fail=1 + elif ! grep -q "GO-2022-1059" <<<"$go_output"; then + echo "FEHLER: exit code $go_exit ist != 0, aber die erwartete Advisory GO-2022-1059 steht NICHT in der Ausgabe — das ist vermutlich ein Werkzeugfehler (z. B. fehlendes govulncheck, Netzwerkproblem), kein echter Fund. Kein 'OK'." + fail=1 + else + echo "OK: govulncheck hat GO-2022-1059 tatsaechlich als Fund gemeldet, exit code $go_exit (!= 0, Gate wuerde blockieren)" + fi else - echo "OK: govulncheck hat die Schwachstelle erkannt, exit code $go_exit (!= 0, Gate wuerde blockieren)" + echo "govulncheck weiterhin nicht verfuegbar — Go-Teil der Pruefung uebersprungen, zaehlt als Fehlschlag." fi echo echo "=== npm-Fixture: lodash 4.17.4 (mehrere bekannte kritische CVEs) ===" -( cd testdata/vulnfixture-npm && npm install --package-lock-only --no-audit --no-fund \ - && npm audit --audit-level=high ) +npm_output=$(cd testdata/vulnfixture-npm && npm install --package-lock-only --no-audit --no-fund 2>&1 \ + && npm audit --audit-level=high 2>&1) npm_exit=$? +echo "$npm_output" if [ "$npm_exit" -eq 0 ]; then echo "FEHLER: npm audit hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)" fail=1 +elif ! grep -qiE "severity|vulnerabilit" <<<"$npm_output"; then + echo "FEHLER: exit code $npm_exit ist != 0, aber die Ausgabe enthaelt keinen erkennbaren Schwachstellen-Hinweis — vermutlich ein Werkzeugfehler (z. B. fehlendes npm, Netzwerkproblem), kein echter Fund. Kein 'OK'." + fail=1 else - echo "OK: npm audit hat die Schwachstelle erkannt, exit code $npm_exit (!= 0, Gate wuerde blockieren)" + echo "OK: npm audit hat die Schwachstelle tatsaechlich gemeldet, exit code $npm_exit (!= 0, Gate wuerde blockieren)" fi echo if [ "$fail" -eq 0 ]; then - echo "PRUEFUNG 1 BESTANDEN: beide Gates erkennen eine absichtlich verwundbare Testabhaengigkeit und blockieren." + echo "PRUEFUNG 1 BESTANDEN: beide Gates erkennen eine absichtlich verwundbare Testabhaengigkeit inhaltlich (nicht nur per Exit-Code) und wuerden blockieren." else echo "PRUEFUNG 1 FEHLGESCHLAGEN: siehe FEHLER oben." fi