403 GET /.envpath blocked429 POST /loginrate limited200 POST /v1/agentbase64 body, no rule matched403 ?id=1' OR 1=1--SQL injection403 /../../etc/passwdpath traversal429 198.51.100.7600 requests a minute403 <script>alert(1)cross-site scripting403 sqlmap/1.8known scanner413 POST /uploadbody too large429 /v1/agenttoken bucket emptyci-runnerscope repo:readagent-7f3aexpires in 15 minoidc githubaud sts.amazonaws.comdeploy-botscope deploy:stagingreviewermfa webauthnghs_…9Kq2valid, replayed from a leaked logagent-2c91expired, deniedadmin:orgscope not grantedsessionbound to one deviceapi keystanding keys disabled--network=noneno egress/workspace rwscratch copy/home roread-only mount/etc roread-only mountuid 1000not rootcap-drop ALLno capabilitiesseccompdefault profilepids 256fork bombs cappedmem 4 GiBcpu 2ttl 30 minthen destroyedallow pytesttest runnerallow ruff checklinterallow git diffread-only gitdeny curl | shpiped installsdeny sshno remote shellspin numpy==2.1.3hash-lockednpm.acme.devinternal mirror only@acme/* internalno public look-alikesdeny write .envsecret filesnew dependencyneeds human reviewlease aws 10mscoped to one tasklease db-ro 15mread-only roleHSM signskey never exportedrotate 24 hdatabase passwordaudit onevery read loggedvault:db/creds/roa reference, not a valueno env secretsinjected at call timests ttl 900sassume-rolerevoke on exitlease ends with the taskKMS sealedunseal needs two peopleSix layers stand between an AI coding agent and your data. One disguised attack is about to try all of them.
Rate limits and a web application firewall drop the obvious junk. This payload is base64-wrapped, so no signature matches and it slips through.
allow POST /v1/agent
block ?id=1' OR 1=1--
pass base64 body, no rule matched
Every call needs a scoped token that expires in minutes. This one is valid. It was also lifted from a public CI log.
scope repo:read, ttl 15m
pass replayed ghs_…9Kq2
The agent works in a container with no network and read-only mounts. The disguise stops mattering: there is nowhere to send anything.
network none
mounts /home ro, /etc ro
payload contained
Commands and dependencies come from allow-lists. Piped installs are denied, and internal package names can’t be shadowed from public npm.
allow pytest, ruff check
deny curl | sh
scope @acme/* internal only
Keys never leave the vault. The agent gets credentials that expire in 10 minutes, scoped to one task.
lease aws, ttl 10m
sign inside the HSM
Cold and untouched. No single layer had to be perfect.
repo read-only
secrets sealed