LocxZ/SecureSDLC-Lab
SecureSDLC-Lab pairs a minimal Node.js/Express/SQLite app with a GitHub Actions pipeline running Gitleaks (secret scanning), Semgrep (SAST), and Trivy (dependency, Docker image, and Kubernetes manifest scanning) plus OWASP ZAP (DAST) on every push and PR. It documents concrete remediations applied during the exercise: bcrypt password hashing, parameterized SQL queries, session-based auth with post-login session regeneration and HttpOnly cookies, RBAC for an admin page, Helmet security headers, env-based secrets, and a hardened Kubernetes deployment (non-root, readOnlyRootFilesystem, dropped capabilities, seccomp, resource limits) alongside a STRIDE threat model.
What it is
SecureSDLC-Lab (LocxZ) is a learning project that wires security scanning into a GitHub Actions pipeline around a deliberately simple Node.js, Express and SQLite app. The author says the goal was to learn how to automate checks in CI/CD and fix issues before merge, not to build a product. The page states that every push and pull request runs six checks, and that a PR should pass all of them before merging:
- Gitleaks secret scan
- Semgrep SAST
- Trivy dependency scan
- Trivy Docker image scan
- Trivy Docker and Kubernetes config scan
- OWASP ZAP DAST
What to do
To run the app locally:
git clone https://github.com/LocxZ/SecureSDLC-Lab.git
npm install
export SESSION_SECRET=my-secret
node app.jsThe app then listens at http://localhost:3000. The session secret is read from the environment, so the app needs SESSION_SECRET set before it starts.
The README publishes two seeded accounts: admin / admin123 and user / user123. The admin account is the one for checking the RBAC-protected admin page.
Caveats
The author states the project is not production-ready. The list of things to add later shows what is missing from the current app:
- Rate limiting
- CSRF protection
- A Redis session store
- Persistent storage for Kubernetes
- Terraform
- Helm
The app therefore has no CSRF protection or login throttling, even though it uses session cookies and a password login. The seeded passwords are trivially guessable and appear in the README, and the example secret is a placeholder.
The page lists the tools and remediations but gives no workflow configuration, scan findings, severity thresholds or example results. It does not say whether any scanner is set to fail the build on a given severity.
Technologies named here
- Gitleaks
- Node.js application
- Semgrep
- Trivy
- OWASP Zap
- GitHub Actions
- Docker
- Kubernetes
- bcrypt
- Helmet
- express-session
- Node.js
Techniques named here
- STRIDE threat model
- Role-Based Access Control
- Parameterized queries
- HttpOnly cookies
Related in DevSecOps
JFrog: The Governance Gap Between Your Policy and Your Pipeline

Dev Machine Guard Now Supports Windows - StepSecurity

Socket: TanStack npm Packages Compromised
