fix(security): Trivy-Secrets + non-CVE-Vulns auswerten + Self-CI + Telegram/Matrix-Verbesserung #6

Merged
vr6syncro merged 2 commits from fix/security-scanner-secrets-noncve-selfci into main 2026-06-04 12:40:03 +02:00
Owner

Behebt die beiden in der Deep-Analyse (#5) gefundenen flotten-weiten Auswertungslücken im zentralen Security-Workflow (~50 Konsumenten-Repos) und ergänzt Self-CI + bessere Telegram/Matrix-Meldungen.

Was war kaputt (fleet-weit relevant)

  1. CRITICAL — committete Secrets unsichtbar: Trivy scannte mit --scanners vuln,secret, der Report las aber nur .Results[].Vulnerabilities[], nie .Results[].Secrets[]. Ein gefundenes Secret ergab findings=0 → kein Issue/Notify, und das Close-Gate (SCAN_OK==1 && SECURITY_FINDINGS!='1') konnte aktive Security-Issues fälschlich schließen.
  2. HIGH — non-CVE-Vulns verworfen: select(.VulnerabilityID | startswith("CVE")) verwarf alle GHSA/PYSEC/RUSTSEC/GO-IDs (npm/Go/Rust/Python). Solche HIGH/CRITICAL-Funde fielen komplett raus.

→ Konsequenz: „grüne" Security-Status mehrerer Repos waren potenziell falsch-negativ.

Änderungen

  • security.yml + security-hardened.yml (Report-Build):
    • Neuer Block wertet .Results[].Secrets[] aus → Section, findings=1, trivy-secret=-Summary, Fingerprint-Eintrag.
    • Vuln-Filter aufgeweitet: test("^(CVE|GHSA|PYSEC|RUSTSEC|GO|DLA|DSA|USN|ALAS|ELSA)-"; "i").
    • Committetes Secret hebt max_sev=CRITICAL und geht in den Notify-Fingerprint (re-ping bei NEUEM Secret, kein Spam bei unverändertem Stand).
    • Telegram + Matrix (gemeinsame COUNT_LINE): prominente Zeile 🔑 N committed SECRET(s) — SOFORT rotieren!; „CVE-Findings" → „Vuln-Findings (CVE/GHSA/…)".
  • Neu ci.yml (Self-CI, push/PR): YAML-Parse aller Workflows + yamllint + jq-Regressions-Fixtures für genau die drei historischen Fehlerfälle:
    1. GHSA-only-Vuln wird gezählt
    2. committetes Secret wird gezählt
    3. Clean-Scan ⇒ 0 Findings, Job bleibt grün (Regression zu 4586d50 pipefail/-e-Abort)

Validierung (lokal)

  • Alle 4 Workflows yaml.safe_load OK.
  • jq-Logik gegen synthetischen Trivy-Output bewiesen: GHSA-Vuln 1, Secret 1, Clean 0/0.

Empfehlung nach Merge

Security-Scan flottenweit einmal neu auslösen — bisher unsichtbare Secret-/non-CVE-Funde werden dann erstmals sichtbar.

Bewusst NICHT in diesem PR (Folge-Tickets/P2-P3): Basic/Hardened-Dedup, osv/hadolint-Checksum, Branch-Protection, eigenes Promotion-Gate erfüllen (LICENSE/SECURITY.md/CONTRIBUTING.md), Jitter-Event-Guard, Pinning-Vereinheitlichung.

🤖 Generated with Claude Code

Behebt die beiden in der Deep-Analyse (#5) gefundenen **flotten-weiten** Auswertungslücken im zentralen Security-Workflow (~50 Konsumenten-Repos) und ergänzt Self-CI + bessere Telegram/Matrix-Meldungen. ## Was war kaputt (fleet-weit relevant) 1. **CRITICAL — committete Secrets unsichtbar:** Trivy scannte mit `--scanners vuln,secret`, der Report las aber nur `.Results[].Vulnerabilities[]`, nie `.Results[].Secrets[]`. Ein gefundenes Secret ergab `findings=0` → kein Issue/Notify, und das Close-Gate (`SCAN_OK==1 && SECURITY_FINDINGS!='1'`) konnte aktive Security-Issues **fälschlich schließen**. 2. **HIGH — non-CVE-Vulns verworfen:** `select(.VulnerabilityID | startswith("CVE"))` verwarf alle GHSA/PYSEC/RUSTSEC/GO-IDs (npm/Go/Rust/Python). Solche HIGH/CRITICAL-Funde fielen komplett raus. → Konsequenz: „grüne" Security-Status mehrerer Repos waren potenziell **falsch-negativ**. ## Änderungen - `security.yml` + `security-hardened.yml` (Report-Build): - Neuer Block wertet `.Results[].Secrets[]` aus → Section, `findings=1`, `trivy-secret=`-Summary, Fingerprint-Eintrag. - Vuln-Filter aufgeweitet: `test("^(CVE|GHSA|PYSEC|RUSTSEC|GO|DLA|DSA|USN|ALAS|ELSA)-"; "i")`. - Committetes Secret hebt `max_sev=CRITICAL` und geht in den Notify-Fingerprint (re-ping bei NEUEM Secret, kein Spam bei unverändertem Stand). - **Telegram + Matrix** (gemeinsame `COUNT_LINE`): prominente Zeile `🔑 N committed SECRET(s) — SOFORT rotieren!`; „CVE-Findings" → „Vuln-Findings (CVE/GHSA/…)". - **Neu `ci.yml` (Self-CI, push/PR):** YAML-Parse aller Workflows + yamllint + jq-Regressions-Fixtures für genau die drei historischen Fehlerfälle: 1. GHSA-only-Vuln wird gezählt 2. committetes Secret wird gezählt 3. Clean-Scan ⇒ 0 Findings, Job bleibt grün (Regression zu `4586d50` pipefail/-e-Abort) ## Validierung (lokal) - Alle 4 Workflows `yaml.safe_load` OK. - jq-Logik gegen synthetischen Trivy-Output bewiesen: GHSA-Vuln **1**, Secret **1**, Clean **0/0**. ## Empfehlung nach Merge **Security-Scan flottenweit einmal neu auslösen** — bisher unsichtbare Secret-/non-CVE-Funde werden dann erstmals sichtbar. > Bewusst NICHT in diesem PR (Folge-Tickets/P2-P3): Basic/Hardened-Dedup, osv/hadolint-Checksum, Branch-Protection, eigenes Promotion-Gate erfüllen (LICENSE/SECURITY.md/CONTRIBUTING.md), Jitter-Event-Guard, Pinning-Vereinheitlichung. 🤖 Generated with [Claude Code](https://claude.com/claude-code)
fix(security): Trivy-Secrets + non-CVE-Vulns auswerten; Self-CI ergaenzen
Some checks failed
security-hardened.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten; Self-CI ergaenzen (push) Failing after 0s
security.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten; Self-CI ergaenzen (push) Failing after 0s
security-hardened.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten; Self-CI ergaenzen (pull_request) Failing after 0s
security.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten; Self-CI ergaenzen (pull_request) Failing after 0s
CI (self-validation) / validate (pull_request) Failing after 2s
4dad08319e
- security{,-hardened}.yml: Report liest jetzt .Results[].Secrets[]
  (committete Secrets waren unsichtbar -> findings=0 -> faelschliches Auto-Close)
- Vuln-Filter von startswith("CVE") auf CVE/GHSA/PYSEC/RUSTSEC/GO/... aufgeweitet
  (non-CVE HIGH/CRITICAL fielen heraus)
- Secret -> max_sev=CRITICAL + in Notify-Fingerprint (re-ping bei neuem Secret)
- Telegram/Matrix-Notify: prominente "committed SECRET(s)"-Zeile (beide Kanaele)
- neu ci.yml: YAML-Parse + yamllint + jq-Regressions-Fixtures
  (GHSA gezaehlt, Secret gezaehlt, Clean-Scan bleibt gruen = 4586d50-Regression)

Refs: Deep Analysis 2026-06-04 (#5)

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
ci: YAML-Parse runner-robust (PyYAML optional; jq-Regression bleibt hartes Gate)
Some checks failed
security-hardened.yml / ci: YAML-Parse runner-robust (PyYAML optional; jq-Regression bleibt hartes Gate) (push) Failing after 0s
security.yml / ci: YAML-Parse runner-robust (PyYAML optional; jq-Regression bleibt hartes Gate) (push) Failing after 0s
security-hardened.yml / ci: YAML-Parse runner-robust (PyYAML optional; jq-Regression bleibt hartes Gate) (pull_request) Failing after 0s
security.yml / ci: YAML-Parse runner-robust (PyYAML optional; jq-Regression bleibt hartes Gate) (pull_request) Failing after 0s
CI (self-validation) / validate (pull_request) Successful in 4s
security-hardened.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten + Self-CI (PR #6) (pull_request) Failing after 0s
security.yml / fix(security): Trivy-Secrets + non-CVE-Vulns auswerten + Self-CI (PR #6) (pull_request) Failing after 0s
1e4724b422
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
vr6syncro deleted branch fix/security-scanner-secrets-noncve-selfci 2026-06-04 12:40:04 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
vr6syncro/ci-workflows!6
No description provided.