Skip to content

ci: malware scan, OWASP ZAP baseline, OpenSSF Scorecard; pin all actions - #46

Merged
carbon-evolution merged 3 commits into
mainfrom
ci/security-scans
Oct 18, 2026
Merged

carbon-evolution merged 3 commits into
mainfrom
ci/security-scans

Conversation

@carbon-evolution

Copy link
Copy Markdown
Owner

Summary

Three new security workflows, plus SHA-pinning for every action.

Workflow What it does When Gate?
malware.yml ClamAV scan of the source tree and installed npm dependencies (npm ci --ignore-scripts, so install scripts never run). Fresh signatures each run; DB cached per ISO week so only daily diffs are fetched. An infected file fails the job. PRs, push to main, weekly, manual can be made required
zap.yml OWASP ZAP baseline (passive DAST) against a production build started in CI. Findings rated High / Medium / Low / Informational; HTML/JSON/MD report in the zap_scan artifact. allow_issue_writing: false, so no auto-opened issues. push to main, weekly, manual no
scorecard.yml OpenSSF Scorecard: rates repo security practices 0–10, publishes for the README badge, uploads findings to code scanning. push to main, weekly, branch-protection changes no

Pinning: actions/checkout, actions/setup-node and github/codeql-action are now pinned to commit SHAs (with # vX.Y.Z) in all workflows. Every action in the repo is now SHA-pinned (Scorecard's Pinned-Dependencies check), and the github-actions Dependabot config keeps them current.

README: Scorecard, CI, CodeQL and Malware-scan badges.

Verification

  • All 6 workflow files parse; no floating tags remain.
  • ClamAV commands tested locally with the same self-contained config: clean tree → exit 0; the EICAR test file → Eicar-Test-Signature FOUND, exit 1 (fails the job).
  • Confirmed zaproxy/action-baseline runs ZAP with --network=host, so it can reach the app on localhost:3000.
  • malware runs on this PR. zap and scorecard first run after merge: workflow_dispatch / push need the workflow on the default branch.

A separate PR will add an OWASP Top 10:2025 assessment (SECURITY.md), using ZAP and Scorecard results.

🤖 Generated with Claude Code

carbon-evolution and others added 3 commits October 18, 2026 11:09
- malware.yml: ClamAV scan of the source tree plus installed npm deps
  (installed with --ignore-scripts) on PRs, pushes to main and weekly.
  Signatures cached per ISO week; an infected file fails the job.
- zap.yml: OWASP ZAP baseline (passive DAST) against a production build
  started in CI, on pushes to main and weekly; findings rated
  High/Medium/Low/Informational in the zap_scan artifact. No GitHub
  issues are opened, and it is not a merge gate.
- scorecard.yml: OpenSSF Scorecard, published for the README badge and
  uploaded to code scanning.
- Pin actions/checkout, actions/setup-node and github/codeql-action to
  commit SHAs in all workflows (Scorecard Pinned-Dependencies);
  Dependabot keeps them current.
- README: Scorecard, CI, CodeQL and malware-scan badges.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The runner's AppArmor profile for freshclam only allows
/etc/clamav/freshclam.conf and /var/lib/clamav, so the custom config in
$RUNNER_TEMP failed ("Can't open/parse the config file"). Stop the
packaged updater service, run `sudo freshclam` with the system config,
scan /var/lib/clamav, and mirror the DB to ~/clamav-db for the weekly
cache. Verified as a non-root sudo user in ubuntu:24.04: cache round
trip is up to date, clean tree exits 0, EICAR is FOUND and exits 1.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
From an OpenSSF Scorecard run (6.2/10 on main):
- Token-Permissions (0): release.yml granted packages/id-token write at
  the top level. Top level is now contents: read, with the write scopes
  only on the publishing job.
- Pinned-Dependencies: node:22-alpine pinned to its multi-arch index
  digest in Dockerfile and intel/Dockerfile; a docker entry in
  dependabot.yml keeps the digest current. Both images build (arm64
  local check: node v22.23.3).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@carbon-evolution
carbon-evolution merged commit e27f328 into main Oct 18, 2026
9 checks passed
@carbon-evolution
carbon-evolution deleted the ci/security-scans branch October 18, 2026 04:05
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant