Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
29 commits
Select commit Hold shift + click to select a range
89ca86a
feat(lab1): juice shop deploy + PR template + triage report
err0r522 Jun 19, 2026
3981230
test: first signed commit
err0r522 Jun 26, 2026
4bcfbc8
feat(lab3): SSH signing + gitleaks pre-commit + history rewrite practice
err0r522 Jun 26, 2026
7728175
Merge remote-tracking branch 'upstream/main'
err0r522 Jul 3, 2026
ea223f6
feat(lab2): Threagile threat model
err0r522 Jul 3, 2026
87fef6c
Merge pull request #1 from err0r522/feature/lab2
err0r522 Jul 3, 2026
9174044
git commit -m "feat(lab4): juice-shop SBOM"
err0r522 Jul 3, 2026
9fbbfec
fix(lab4): add the json files
err0r522 Jul 3, 2026
69a58e5
Merge pull request #2 from err0r522/feature/lab4
err0r522 Jul 3, 2026
cc1452a
Revert adding json files
err0r522 Jul 3, 2026
5882fb3
feat(lab5): ZAP baseline
err0r522 Jul 10, 2026
1b11548
Merge pull request #3 from err0r522/feature/lab5
err0r522 Jul 10, 2026
173297b
feat(lab6): Checkov
err0r522 Jul 10, 2026
8bed300
Merge pull request #4 from err0r522/feature/lab6
err0r522 Jul 10, 2026
d7423cc
feat(lab4): sign-ready attestation
err0r522 Jul 10, 2026
cc2dbaf
Merge pull request #5 from err0r522/feature/lab4
err0r522 Jul 10, 2026
b0434c0
feat(lab7): trivy
err0r522 Jul 10, 2026
00d65b9
feat(lab7): Config scan
err0r522 Jul 10, 2026
6be78a8
Merge pull request #6 from err0r522/feature/lab7
err0r522 Jul 10, 2026
461b671
feat(lab8): cosign sign + SBOM/provenance attestations
err0r522 Jul 10, 2026
86fc80c
Merge pull request #7 from err0r522/feature/lab8
err0r522 Jul 10, 2026
400f64b
feat(lab9): falco custom rules
err0r522 Jul 17, 2026
2b92270
Merge pull request #8 from err0r522/feature/lab9
err0r522 Jul 17, 2026
6e8d2cb
feat(lab10): defectdojo governance report
err0r522 Jul 17, 2026
041dcfe
feat(lab10): document falco log
err0r522 Jul 17, 2026
87384e3
Merge pull request #9 from err0r522/feature/lab10
err0r522 Jul 17, 2026
efe0da9
feat(lab11): hardened nginx
err0r522 Jul 17, 2026
c158127
Merge pull request #10 from err0r522/feature/lab11
err0r522 Jul 17, 2026
b0526c6
feat(lab12): kata vs runc isolation + perf + escape PoC
err0r522 Jul 19, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
31 changes: 31 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
## Goal

<!-- What this PR delivers (1 sentence) -->

## Changes

<!-- - Bullet list of artifacts added/modified -->

- Change 1
- Change 2
- Change 3

## Testing

<!-- How you verified it works (commands + observed output) -->

```
commands
```

## Artifacts & Screenshots

<!-- Links to files in this PR, image embeds where useful -->

---

### Checklist

- [ ] Title is clear (`feat(labN): <topic>` style)
- [ ] No secrets/large temp files committed
- [ ] Submission file at `submissions/labN.md` exists
10 changes: 10 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.24.2
hooks:
- id: gitleaks
- repo: https://github.com/pre-commit/pre-commit-hooks
rev: v6.0.0
hooks:
- id: detect-private-key
- id: check-added-large-files
18 changes: 11 additions & 7 deletions labs/lab11/reverse-proxy/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -29,6 +29,7 @@ http {
# Rate limit zone for login
# ~10 req/min per IP, burst of 5
limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;
limit_conn_zone $binary_remote_addr zone=conn:10m;
limit_req_status 429;

map $http_upgrade $connection_upgrade { default upgrade; '' close; }
Expand Down Expand Up @@ -71,7 +72,7 @@ http {
add_header Permissions-Policy "camera=(), geolocation=(), microphone=()" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self'; style-src 'self'; font-src 'self'; img-src 'self'; connect-src 'self'" always;

return 308 https://$host$request_uri;
}
Expand All @@ -85,11 +86,13 @@ http {

ssl_certificate /etc/nginx/certs/localhost.crt;
ssl_certificate_key /etc/nginx/certs/localhost.key;
ssl_session_timeout 10m;
ssl_session_timeout 1d;
ssl_session_cache shared:SSL:10m;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers "TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256:TLS_AES_128_GCM_SHA256:EECDH+AESGCM:EDH+AESGCM";
ssl_prefer_server_ciphers on;
ssl_session_tickets off;
ssl_protocols TLSv1.3;
ssl_ecdh_curve X25519:secp384r1;
ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_prefer_server_ciphers off;
ssl_stapling off;
# If using a publicly-trusted certificate, you may enable OCSP stapling:
# ssl_stapling on;
Expand All @@ -103,16 +106,17 @@ http {
client_header_timeout 10s;
keepalive_timeout 10s;
send_timeout 10s;
limit_conn conn 50;

# Security headers (include HSTS here only)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
add_header Strict-Transport-Security "max-age=63072000; includeSubDomains; preload" always;
add_header X-Frame-Options "DENY" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "strict-origin-when-cross-origin" always;
add_header Permissions-Policy "camera=(), geolocation=(), microphone=()" always;
add_header Cross-Origin-Opener-Policy "same-origin" always;
add_header Cross-Origin-Resource-Policy "same-origin" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; img-src 'self' data:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" always;
add_header Content-Security-Policy-Report-Only "default-src 'self'; script-src 'self'; style-src 'self'; font-src 'self'; img-src 'self'; connect-src 'self'" always;

location = /rest/user/login {
limit_req zone=login burst=5 nodelay;
Expand Down
Loading