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
627ea9f
tasks 1,2,3 done
Jun 9, 2026
1f2b71b
fixed smoke workflow
Jun 9, 2026
37ac905
change curl params in workflow
Jun 9, 2026
43ebcb9
completed bonus task
Jun 9, 2026
d58a54a
feat(lab1): juice shop deploy + PR template + triage report
Jun 9, 2026
7eaf7b6
Merge pull request #1 from AskoRBINKAs/feature/lab1
AskoRBINKAs Jun 10, 2026
7f39827
feat(lab2): Threagile threat model + secure variant + auth flow
Jun 11, 2026
2ede82d
Merge pull request #2 from AskoRBINKAs/feature/lab2
AskoRBINKAs Jun 18, 2026
ea0bfeb
test: first signed commit
AskoRBINKAs Jun 18, 2026
2476aac
feat(lab3): SSH signing + gitleaks pre-commit + history rewrite practice
AskoRBINKAs Jun 18, 2026
dde6da8
Merge pull request #3 from AskoRBINKAs/feature/lab3
AskoRBINKAs Jun 18, 2026
7afa957
feat(lab4): juice-shop SBOM + Grype/Trivy comparison
AskoRBINKAs Jun 19, 2026
164abbf
Merge pull request #4 from AskoRBINKAs/feature/lab4
AskoRBINKAs Jun 25, 2026
f65245a
Merge remote-tracking branch 'upstream/main'
AskoRBINKAs Jun 25, 2026
ffe33bc
feat(lab5): ZAP baseline + auth + Semgrep + correlation
AskoRBINKAs Jun 26, 2026
0c5b001
Merge pull request #5 from AskoRBINKAs/feature/lab5
AskoRBINKAs Jun 26, 2026
7d16992
feat(lab6): Checkov + KICS scans + custom policy
AskoRBINKAs Jun 26, 2026
0a565e2
Merge pull request #6 from AskoRBINKAs/feature/lab6
AskoRBINKAs Jul 3, 2026
480f4a4
feat(lab7): trivy + PSS restricted + conftest gate
AskoRBINKAs Jul 3, 2026
0ee1e07
Merge pull request #7 from AskoRBINKAs/feature/lab7
AskoRBINKAs Jul 3, 2026
c395f56
feat(lab8): cosign sign + SBOM/provenance attestations + blob signing
AskoRBINKAs Jul 3, 2026
1d3f6cc
Merge pull request #8 from AskoRBINKAs/feature/lab8
AskoRBINKAs Jul 10, 2026
ce3808a
feat(lab9): falco custom rules + conftest hardening policies
AskoRBINKAs Jul 10, 2026
a07b5f2
Merge pull request #9 from AskoRBINKAs/feature/lab9
AskoRBINKAs Jul 10, 2026
6e00fac
feat(lab10): defectdojo governance report + capstone walkthrough
AskoRBINKAs Jul 10, 2026
652edb1
Merge pull request #10 from AskoRBINKAs/feature/lab10
AskoRBINKAs Jul 17, 2026
1c7387a
feat(lab11): hardened nginx + WAF sidecar
AskoRBINKAs Jul 17, 2026
656a6f2
Merge pull request #11 from AskoRBINKAs/feature/lab11
AskoRBINKAs Jul 17, 2026
c66a4a6
feat(lab12): kata vs runc isolation + perf + escape PoC
AskoRBINKAs Jul 17, 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
32 changes: 32 additions & 0 deletions .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
## Goal
<!-- One sentence: what this PR delivers -->

## Changes
<!-- Bullet list of artifacts added or modified -->

-

## Testing
<!-- Commands run and observed output -->

```bash
# paste commands here
```

**Observed output:**

```
# paste output here
```

## Artifacts & Screenshots
<!-- Links to files in this PR; embed screenshots where useful -->

-

---

## Checklist
- [ ] Title is clear (`feat(labN): <topic>` style)
- [ ] No secrets/large temp files committed
- [ ] Submission file at `submissions/labN.md` exists
35 changes: 35 additions & 0 deletions .github/workflows/lab1-smoke.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,35 @@
# .github/workflows/lab1-smoke.yml
name: Smoke Test Juice Shop
on:
pull_request:
branches: [main]

permissions:
contents: read

jobs:
smoke-test:
runs-on: ubuntu-latest
services:
juice-shop:
image: bkimminich/juice-shop:v20.0.0
ports:
- 3000:3000
steps:
- name: Wait for Juice Shop to be ready
run: |
for i in $(seq 1 30); do
if curl --silent --fail http://localhost:3000/rest/admin/application-version >/dev/null; then
echo "Juice Shop is ready!"
exit 0
fi
echo "Waiting for Juice Shop... (attempt $i/30)"
sleep 2
done
echo "Error: Juice Shop failed to start within 60 seconds"
exit 1

- name: Verify homepage returns 200
run: |
curl -v http://localhost:3000/rest/admin/application-version
echo "smoke test passed"
11 changes: 11 additions & 0 deletions .pre-commit-config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
repos:
- repo: https://github.com/gitleaks/gitleaks
rev: v8.30.1
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
29 changes: 19 additions & 10 deletions labs/lab11/reverse-proxy/nginx.conf
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,7 @@ http {
# ~10 req/min per IP, burst of 5
limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;
limit_req_status 429;
limit_conn_zone $binary_remote_addr zone=conn:10m;

map $http_upgrade $connection_upgrade { default upgrade; '' close; }

Expand Down Expand Up @@ -60,9 +61,13 @@ http {

# HTTP server (redirect to HTTPS)
server {
listen 8080;
listen [::]:8080;
listen 80;
listen [::]:80;
server_name _;
limit_conn conn 50;

client_body_timeout 10s;
client_header_timeout 10s;

# Core headers (also on redirects)
add_header X-Frame-Options "DENY" always;
Expand All @@ -73,23 +78,27 @@ http {
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;

return 308 https://$host:8443$request_uri;
return 308 https://$host:443$request_uri;
}

# HTTPS server
server {
listen 8443 ssl;
listen [::]:8443 ssl;
listen 443 ssl;
listen [::]:443 ssl;
http2 on;
server_name _;
limit_conn conn 50;

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_ciphers HIGH:!aNULL:!MD5;
ssl_conf_command Ciphersuites TLS_AES_128_GCM_SHA256:TLS_AES_256_GCM_SHA384:TLS_CHACHA20_POLY1305_SHA256;
ssl_ecdh_curve X25519:secp384r1;
ssl_prefer_server_ciphers off;
ssl_stapling off;
# If using a publicly-trusted certificate, you may enable OCSP stapling:
# ssl_stapling on;
Expand All @@ -105,7 +114,7 @@ http {
send_timeout 10s;

# 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;
Expand Down
Loading