Merge pull request 'chore(security): fail-closed scannerfel + resurstak for scannrarna' (#595) from chore/security-fail-closed-20261113 into main
CI (SIAX Cloud) / Component conformance (blocking) (push) Successful in 12s
masterplan-lock / check (push) Successful in 9s
CI (SIAX Cloud) / security (push) Successful in 21s
security / scan (push) Failing after 58s
Release chain (G17, ADR-W16-003) / Build, push, G17 (SBOM/scan/attest/verify/evidence) (push) Successful in 1m5s
CI (SIAX Cloud) / sonar (push) Successful in 1m19s
Deploy to Coolify / deploy (push) Successful in 1m41s
CI (SIAX Cloud) / quality (push) Successful in 2m1s
CI (SIAX Cloud) / integration (push) Successful in 3m43s

This commit was merged in pull request #595.
This commit is contained in:
2026-11-14 16:18:25 +00:00
+14 -32
View File
@@ -28,9 +28,8 @@ on:
- cron: "17 2 * * *"
workflow_dispatch: {}
permissions: { contents: read }
# N6 (server-config ci/jobbstorm-2026-11-10 §4): en ny commit på samma PR/gren avbryter den inaktuella körningen.
concurrency:
group: ${{ gitea.workflow }}-${{ gitea.ref }}
group: security-${{ github.ref }}
cancel-in-progress: true
jobs:
@@ -72,7 +71,7 @@ jobs:
tail -n 120 /tmp/scan.log
if [ $rc -eq 0 ]; then echo "gitleaks secret scan ren"; exit 0; fi
if [ $rc -eq 1 ]; then echo "::error::gitleaks secret scan hittade fynd"; exit 1; fi
echo "::warning::gitleaks secret scan kunde inte köras (rc=$rc) - verktygsfel, inte fynd"; exit 0
echo "::error::gitleaks secret scan kunde inte koras (rc=$rc) - scannerfel, inte fynd; grinden far inte bli tyst gron"; exit 1
# gitleaks over just de commits som PR:en eller pushen inför. Blockerar på
# hemligheter som introduceras i intervallet, även om de raderas senare i
@@ -128,7 +127,7 @@ jobs:
if [ $rc -eq 0 ]; then echo "gitleaks commit range ren"; exit 0; fi
if [ $rc -eq 1 ]; then echo "::error::gitleaks commit range hittade fynd i införda commits"; exit 1; fi
if [ $rc -eq 124 ]; then echo "::error::gitleaks commit range nådde tidsgränsen - intervallet är EJ skannat"; exit 1; fi
echo "::warning::gitleaks commit range kunde inte köras (rc=$rc) - verktygsfel, inte fynd"; exit 0
echo "::error::gitleaks commit range kunde inte koras (rc=$rc) - scannerfel, inte fynd; grinden far inte bli tyst gron"; exit 1
# Hela historiken scannas informativt, bara nattligt eller manuellt och
# med tidsbudget. Gamla hemligheter i tidigare commits kräver
@@ -154,14 +153,14 @@ jobs:
- name: Trivy filesystem scan
run: |
set +e
docker run --rm -v "$SCAN_VOLUME:/repo" -w /repo \
docker run --rm --cpus 2 --memory 4g -v "$SCAN_VOLUME:/repo" -w /repo \
aquasec/trivy:0.76.2 fs --scanners vuln,secret --severity HIGH,CRITICAL --exit-code 1 --no-progress /repo > /tmp/scan.log 2>&1
rc=$?
set -e
tail -n 120 /tmp/scan.log
if [ $rc -eq 0 ]; then echo "Trivy filesystem scan ren"; exit 0; fi
if [ $rc -eq 1 ]; then echo "::error::Trivy filesystem scan hittade fynd"; exit 1; fi
echo "::warning::Trivy filesystem scan kunde inte köras (rc=$rc) - verktygsfel, inte fynd"; exit 0
echo "::error::Trivy filesystem scan kunde inte koras (rc=$rc) - scannerfel, inte fynd; grinden far inte bli tyst gron"; exit 1
# Dockerfile- och IaC-misconfig är informativt: DS-0002 (root-USER)
# kräver ändrade runtime-användare och hanteras per repo, inte i grinden.
@@ -174,56 +173,39 @@ jobs:
# Kanda sarbarheter i lasfilen. osv-scanner 2.x hittar inte alltid
# osv-scanner.toml sjalv, sa den skickas explicit nar den finns.
# Lasfilsvakten och config-kollen kors i en container som monterar
# volymen (FALLA 3 ovan). Kan sjalva sokningen inte koras hoppas OSV
# INTE over - da avgor OSV:s egen exitkod, enligt samma policy som ovan.
- name: OSV Scanner
run: |
set +e
lock=$(docker run --rm -v "$SCAN_VOLUME:/repo:ro" alpine:3.20 \
find /repo -path /repo/.git -prune -o -type f \( \
-name 'pnpm-lock.yaml' -o -name 'package-lock.json' -o -name 'yarn.lock' \
-o -name 'bun.lock' -o -name 'poetry.lock' -o -name 'Pipfile.lock' \
-o -name 'uv.lock' -o -name 'pdm.lock' -o -name '*requirements*.txt' \
-o -name 'go.mod' -o -name 'Cargo.lock' -o -name 'composer.lock' \
-o -name 'Gemfile.lock' \) -print -quit)
frc=$?
set -e
if [ $frc -ne 0 ]; then
echo "::warning::lasfilsvakten kunde inte koras i scanvolymen (rc=$frc) - OSV kors anda"
elif [ -z "$lock" ]; then
if ! find /repo -maxdepth 3 \( -name 'pnpm-lock.yaml' -o -name 'package-lock.json' \
-o -name 'yarn.lock' -o -name 'poetry.lock' -o -name 'Pipfile.lock' \
-o -name 'requirements.txt' -o -name 'go.sum' -o -name 'Cargo.lock' \
-o -name 'composer.lock' -o -name 'Gemfile.lock' \) -print -quit | grep -q .; then
echo "Inga lasfiler i repot - OSV-Scanner har inget att scanna."
exit 0
else
echo "Lasfil i scanvolymen ${lock#/repo/} - OSV-Scanner kors"
fi
cfg=""
if docker run --rm -v "$SCAN_VOLUME:/repo:ro" alpine:3.20 test -f /repo/osv-scanner.toml; then
cfg="--config=/repo/osv-scanner.toml"
echo "Anvander /repo/osv-scanner.toml for hela repot"
fi
if [ -f "/repo/osv-scanner.toml" ]; then cfg="--config=/repo/osv-scanner.toml"; fi
set +e
docker run --rm -v "$SCAN_VOLUME:/repo" -w /repo \
docker run --rm --cpus 2 --memory 4g -v "$SCAN_VOLUME:/repo" -w /repo \
ghcr.io/google/osv-scanner:v2.7.1 scan source --recursive $cfg /repo > /tmp/scan.log 2>&1
rc=$?
set -e
tail -n 120 /tmp/scan.log
if [ $rc -eq 0 ]; then echo "OSV ren"; exit 0; fi
if [ $rc -eq 1 ]; then echo "::error::OSV Scanner hittade fynd"; exit 1; fi
echo "::warning::OSV Scanner kunde inte koras (rc=$rc) - verktygsfel, inte fynd"; exit 0
echo "::error::OSV Scanner kunde inte koras (rc=$rc) - scannerfel, inte fynd; grinden far inte bli tyst gron"; exit 1
# Statisk kodanalys, felallvarlighet bryter bygget. Semgrep kraver koden pa /src
- name: Semgrep code scan
run: |
set +e
docker run --rm -v "$SCAN_VOLUME:/src" -w /src \
docker run --rm --cpus 2 --memory 4g -v "$SCAN_VOLUME:/src" -w /src \
semgrep/semgrep:1.183.0 semgrep scan --config=p/ci --error --quiet > /tmp/scan.log 2>&1
rc=$?
set -e
tail -n 120 /tmp/scan.log
if [ $rc -eq 0 ]; then echo "Semgrep code scan ren"; exit 0; fi
if [ $rc -eq 1 ]; then echo "::error::Semgrep code scan hittade fynd"; exit 1; fi
echo "::warning::Semgrep code scan kunde inte köras (rc=$rc) - verktygsfel, inte fynd"; exit 0
echo "::error::Semgrep code scan kunde inte koras (rc=$rc) - scannerfel, inte fynd; grinden far inte bli tyst gron"; exit 1
- name: Remove scan volume
if: always()
run: |