OPS-06: automatisiertes-schwachstellen-scanning-supply-chain (govulncheck+npm-audit CI-Gates, verwundbare Fixtures + Verifikationsskript fuer Pruefung 1)
Supply-Chain-Scan (Go) / govulncheck (push) Has been cancelled
Supply-Chain-Scan (Go) / govulncheck (push) Has been cancelled
This commit is contained in:
@@ -0,0 +1,34 @@
|
|||||||
|
name: Supply-Chain-Scan (Go)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- "**/*.go"
|
||||||
|
- "go.mod"
|
||||||
|
- "go.sum"
|
||||||
|
pull_request: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
govulncheck:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-go@v5
|
||||||
|
with:
|
||||||
|
go-version: "1.22"
|
||||||
|
- name: govulncheck installieren
|
||||||
|
run: go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||||
|
- name: Go-Module auf bekannte Schwachstellen pruefen
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
# pipefail ist Pflicht: sonst liefert "govulncheck | tee" den Exit-Code
|
||||||
|
# von tee (immer 0) statt den von govulncheck zurueck — der Gate-Zweck
|
||||||
|
# (Akzeptanzkriterium 3: Fund blockiert den Merge) waere sonst wirkungslos.
|
||||||
|
set -o pipefail
|
||||||
|
govulncheck ./... | tee govulncheck-report.txt
|
||||||
|
- name: Scan-Bericht als Artefakt ablegen
|
||||||
|
if: always()
|
||||||
|
uses: actions/upload-artifact@v4
|
||||||
|
with:
|
||||||
|
name: govulncheck-report
|
||||||
|
path: govulncheck-report.txt
|
||||||
@@ -0,0 +1,32 @@
|
|||||||
|
name: Supply-Chain-Scan (npm)
|
||||||
|
|
||||||
|
on:
|
||||||
|
push:
|
||||||
|
paths:
|
||||||
|
- "web/**/package.json"
|
||||||
|
- "web/**/package-lock.json"
|
||||||
|
pull_request: {}
|
||||||
|
|
||||||
|
jobs:
|
||||||
|
npm-audit:
|
||||||
|
runs-on: ubuntu-latest
|
||||||
|
steps:
|
||||||
|
- uses: actions/checkout@v4
|
||||||
|
- uses: actions/setup-node@v4
|
||||||
|
with:
|
||||||
|
node-version: "22"
|
||||||
|
- name: Alle Next.js-Frontends auf bekannte Schwachstellen pruefen
|
||||||
|
shell: bash
|
||||||
|
run: |
|
||||||
|
set -o pipefail
|
||||||
|
status=0
|
||||||
|
for pkg in $(find web -maxdepth 2 -name package.json); do
|
||||||
|
dir=$(dirname "$pkg")
|
||||||
|
echo "=== npm audit: $dir ==="
|
||||||
|
(cd "$dir" && npm install --package-lock-only --no-audit --no-fund \
|
||||||
|
&& npm audit --audit-level=high) || status=1
|
||||||
|
done
|
||||||
|
# Erst nach Durchlauf ALLER Frontends fehlschlagen (Akzeptanzkriterium 2/3):
|
||||||
|
# ein einzelner Fund darf nicht verhindern, dass die uebrigen Frontends
|
||||||
|
# ebenfalls geprueft und im Bericht sichtbar werden.
|
||||||
|
exit $status
|
||||||
Executable
+41
@@ -0,0 +1,41 @@
|
|||||||
|
#!/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.
|
||||||
|
set -uo pipefail
|
||||||
|
|
||||||
|
fail=0
|
||||||
|
|
||||||
|
echo "=== Go-Fixture: golang.org/x/text v0.3.7 (GO-2022-0635 / CVE-2022-32149) ==="
|
||||||
|
if ! command -v govulncheck >/dev/null 2>&1; then
|
||||||
|
go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||||
|
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
|
||||||
|
else
|
||||||
|
echo "OK: govulncheck hat die Schwachstelle erkannt, exit code $go_exit (!= 0, Gate wuerde blockieren)"
|
||||||
|
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_exit=$?
|
||||||
|
if [ "$npm_exit" -eq 0 ]; then
|
||||||
|
echo "FEHLER: npm audit hat die bekannte Schwachstelle NICHT erkannt (exit 0 erwartet != 0)"
|
||||||
|
fail=1
|
||||||
|
else
|
||||||
|
echo "OK: npm audit hat die Schwachstelle erkannt, 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."
|
||||||
|
else
|
||||||
|
echo "PRUEFUNG 1 FEHLGESCHLAGEN: siehe FEHLER oben."
|
||||||
|
fi
|
||||||
|
exit $fail
|
||||||
Vendored
+12
@@ -0,0 +1,12 @@
|
|||||||
|
// Absichtlich verwundbares Fixture-Modul fuer OPS-06 Pruefung 1: beweist, dass
|
||||||
|
// der govulncheck-CI-Schritt eine bekannte Schwachstelle tatsaechlich erkennt
|
||||||
|
// und den Lauf mit Exit-Code != 0 beendet. Eigenes go.mod, damit die
|
||||||
|
// veraltete, verwundbare Abhaengigkeit NICHT im Hauptmodul landet.
|
||||||
|
module gitea.perlbach24.de/scripte/nexarch/testdata/vulnfixture-go
|
||||||
|
|
||||||
|
go 1.22
|
||||||
|
|
||||||
|
// golang.org/x/text v0.3.7: GO-2022-0635 / CVE-2022-32149 — Denial of Service
|
||||||
|
// durch uebermaessigen Ressourcenverbrauch beim Parsen von BCP-47-Sprach-Tags.
|
||||||
|
// Bewusst auf dieser verwundbaren Version gepinnt, siehe scripts/verify-supply-chain-gate.sh.
|
||||||
|
require golang.org/x/text v0.3.7
|
||||||
Vendored
+19
@@ -0,0 +1,19 @@
|
|||||||
|
// Fixture fuer OPS-06 Pruefung 1 — ruft tatsaechlich in die verwundbare
|
||||||
|
// Funktion hinein, damit govulncheck den Aufrufpfad (nicht nur die
|
||||||
|
// Modul-Abhaengigkeit) als erreichbar erkennt.
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"fmt"
|
||||||
|
|
||||||
|
"golang.org/x/text/language"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
tag, err := language.Parse("de-DE")
|
||||||
|
if err != nil {
|
||||||
|
fmt.Println(err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
fmt.Println(tag)
|
||||||
|
}
|
||||||
+8
@@ -0,0 +1,8 @@
|
|||||||
|
{
|
||||||
|
"name": "nexarch-vulnfixture-npm",
|
||||||
|
"private": true,
|
||||||
|
"description": "Absichtlich verwundbares Fixture-Paket fuer OPS-06 Pruefung 1 — beweist, dass npm audit eine bekannte Schwachstelle erkennt und den Lauf blockiert. Nicht Teil eines echten NEXARCH-Frontends.",
|
||||||
|
"dependencies": {
|
||||||
|
"lodash": "4.17.4"
|
||||||
|
}
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user