Module 0: About This Class#
What the two days look like, and how the lab works — before any technical content. This is also your reference for the environment: come back to it whenever you’re unsure where something lives or how to reach it. (Deciding whether the class is for you? The homepage has the schedule and prerequisites.)
Slides#
What the deck covers#
- Introductions and the rules of the room
- The class arc — build, audit, break — and the day-by-day schedule
- Your lab environment: your VM, the inference proxy (
small/large), your Day-2 targets - Getting in: VPN, the student portal, spend caps and rate limits
- A live tour of this website, and how each day runs
The rest of this page is the written version of the environment tour, in more detail than the slides — the part worth bookmarking.
The shape of it#
Every student gets their own Linux VM. All AI inference flows through a class proxy (so it’s metered, rate-limited, and paid for centrally). The attack targets you’ll face on Day 2 run as your own dedicated instances on a shared class lab host. A small S3 bucket moves files around. That’s the whole world:
flowchart LR
subgraph you["You"]
L["Your laptop<br/>(Cisco network / VPN required)"]
end
subgraph vm["Your student VM"]
P["pi + python + your code<br/>labs in ~/labs"]
end
subgraph svc["Class lab host"]
M["Your SmartMail instances (Lab 4)"]
V["Your vulnbox (Lab 5)"]
C["CTFd leaderboard"]
end
PX["Class inference proxy<br/>models: small / large"]
B["AWS Bedrock<br/>(Claude models)"]
S3[("Class S3 bucket<br/>materials / portal / reports")]
L -- "SSH" --> P
L -- "browser" --> M & V & C
P -- "$CLASS_API_URL" --> PX --> B
P <--> S3
Containment is part of the design. Your VM has almost no internet egress: it can reach the proxy, AWS endpoints, the class lab host, and (late Day 1) other students’ VMs on one port. Several labs depend on this boundary — don’t fight it.
Getting in#
Be on the Cisco network or VPN — the lab only accepts connections from Cisco IP ranges.
Open the student portal and sign in to download your SSH key and see all your credentials (hostname, API key, Day 2 target URLs). Connect:
ssh -i <your-key.pem> ubuntu@<your-hostname>That’s the only login you need. No AWS console, no cloud knowledge.
What’s already on your VM#
| Thing | Where / how |
|---|---|
| Lab materials + checkers | ~/labs (one directory per lab) |
pi, preconfigured | just run pi — it talks to the class proxy, model small by default; switch with /model |
Python + openai library, semgrep, docker | on $PATH |
| Your API credentials | env vars, already exported: $CLASS_API_URL, $CLASS_API_KEY, $CLASS_STUDENT_ID, $CLASS_BUCKET |
| The Foundry spec + spec-kit (Lab 6.1) | ~/foundry-security-spec, specify |
The two models#
| Alias | What it is | Use it for |
|---|---|---|
small | fast, cheap | Day 1 labs, building ShareBox |
large | stronger reasoning | Day 2 auditing, exploitation, the capstone |
Your key has a hard spend cap and a rate limit. Hitting the rate limit (HTTP 429) is normal under heavy use — back off and retry; the instructor can adjust limits per lab block.
Where things run (especially on Day 2)#
When in doubt about where to do something:
| Activity | Where |
|---|---|
SSH sessions, pi, Python, semgrep, exploit curls, your Lab 6 Validator | your student VM |
| SmartMail web UI (Lab 4) | your laptop browser |
| CTFd leaderboard | your laptop browser |
| Student portal / your portal file | either — the same URLs work from both your laptop and your VM |
Every lab service is HTTPS on its own subdomain of the class domain —
your SmartMail instances, your vulnbox, and the CTFd leaderboard each have a
name like https://s07-mail1.class.…/ or https://ctf.class.…/. Your
portal file lists one URL per target; the same URLs work identically from
your laptop and your VM, so the URL you exploit with curl from the VM is
exactly the URL you open in the browser. No ports to remember, no
certificate warnings to click through.
Your credentials (Day 2 targets included)#
Day 2 targets are personal: your own SmartMail instances and your own vulnbox, with your own credentials and flags. Everything — URLs, usernames, passwords, the leaderboard link — is on your page in the student portal. From your VM you can also fetch the same content as text:
aws s3 cp "s3://$CLASS_BUCKET/portal/$CLASS_STUDENT_ID.md" -Only you can read yours.
The CTF#
A leaderboard (CTFd) runs through the whole class. Register once with any username, then submit every flag you capture — Lab 4’s injection ladder and Lab 5’s vulnbox vulns all score. Points follow difficulty. Attack only your own instances; flags are per-student, so a shared answer is instantly visible to the instructors.
When something breaks#
- Lab materials look stale or missing:
sudo /opt/class/fetch-materials.sh pimisbehaving: check~/.pi/agent/models.jsonpoints at$CLASS_API_URL- 429s everywhere: you’re rate-limited — slow down, chunk your prompts
- Anything else: flag an instructor; the fix is usually one command on our side