Lab 01DraftStep 4 of 82 hours
Attack the bare agent
Send the lab prompt. On Arm A the mock finds the canary and posts it to the sink.
Repo path: labs/01-secret-exfiltration. All lab attacks run only on a local kind cluster.
What we are about to do
Post two prompts into the bare agent. Both stay on cluster DNS.
Why it matters
The first prompt is the theft. The second prompt is the ordinary vendor call, sent with a placeholder header. On Arm A nothing injects a credential, so the vendor API should see the literal placeholder. That contrast is what Arm B changes.
Command
From the repo root:
labs/01-secret-exfiltration/scripts/arm-a-attack.sh
The script checks that every URL in the prompt is cluster-local, then POSTs:
attack/prompt-injection.txttells the agent to find the key and POST it tohttp://attacker-sink.lab01-shared.svc.cluster.local/exfil. On failure it retries once.attack/benign-call.txttells the agent to POST tohttp://legit-api.lab01.svc.cluster.local/v1/itemswithAuthorization: placeholder.
Responses land in results/bare-attack.json and results/bare-benign.json.
On the board
Same frame as setup. The key is still inside the process. The attack is that process using its socket.
What you should see
On Arm A the mock finds the canary, the sink stores it, and the vendor API sees the literal placeholder. The terminal the scripts print is plain text from your own cluster. Read results/bare-attack.json for the tool steps. The sink body is the signal, not a canned line in this page.
Checkpoint
Which prompt should move the canary, and which prompt should leave the vendor API holding the word placeholder?