OPS-06: fix — verify-supply-chain-gate.sh unterscheidet jetzt echten Fund von Werkzeugfehler (pruefte vorher nur exit-code, 'command not found' galt faelschlich als bestanden)

This commit is contained in:
sysops
2026-08-28 23:03:05 +02:00
parent ab7a03386c
commit 77ecf42365
2 changed files with 49 additions and 15 deletions
+12
View File
@@ -44,3 +44,15 @@ Keine Commits in dieser Session.
Keine Änderungen ermittelbar. 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 +++++--
---
+35 -13
View File
@@ -1,40 +1,62 @@
#!/usr/bin/env bash #!/usr/bin/env bash
# OPS-06 Pruefung 1: beweist, dass govulncheck und npm audit eine absichtlich # OPS-06 Pruefung 1: beweist, dass govulncheck und npm audit eine absichtlich
# verwundbare Testabhaengigkeit tatsaechlich erkennen und mit Exit-Code != 0 # verwundbare Testabhaengigkeit tatsaechlich ERKENNEN (nicht nur irgendeinen
# enden (= wuerden den Merge blockieren). Laeuft auf dem Testhost (Go/npm # Fehler werfen) und mit Exit-Code != 0 enden (= wuerden den Merge blockieren).
# noetig), nicht auf der Entwicklungsmaschine. # 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 set -uo pipefail
fail=0 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 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 fi
( cd testdata/vulnfixture-go && go mod tidy && govulncheck ./... )
go_exit=$? if command -v govulncheck >/dev/null 2>&1; then
if [ "$go_exit" -eq 0 ]; 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)" echo "FEHLER: govulncheck hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)"
fail=1 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 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 fi
echo echo
echo "=== npm-Fixture: lodash 4.17.4 (mehrere bekannte kritische CVEs) ===" 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_output=$(cd testdata/vulnfixture-npm && npm install --package-lock-only --no-audit --no-fund 2>&1 \
&& npm audit --audit-level=high ) && npm audit --audit-level=high 2>&1)
npm_exit=$? npm_exit=$?
echo "$npm_output"
if [ "$npm_exit" -eq 0 ]; then if [ "$npm_exit" -eq 0 ]; then
echo "FEHLER: npm audit hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)" echo "FEHLER: npm audit hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)"
fail=1 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 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 fi
echo echo
if [ "$fail" -eq 0 ]; then 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 else
echo "PRUEFUNG 1 FEHLGESCHLAGEN: siehe FEHLER oben." echo "PRUEFUNG 1 FEHLGESCHLAGEN: siehe FEHLER oben."
fi fi