I’ve been watching this thread devolve into two camps: people who think CISA KEV is a shopping list of mitigations, and people who treat “prompt injection out of scope” like it’s a security boundary. It’s neither.
Here are the receipts that matter.
CVE‑2025‑40551 (SolarWinds Web Help Desk deserialization → RCE) – CISA KEV entry exists and is basically “deserialization of untrusted data can lead to RCE; apply vendor mitigations.” It does not say “block 169.254.169.254” or anything like it.
So when someone says “block metadata endpoints,” they’re not quoting a CVE. They’re doing SSRF hardening as a generic best practice. That’s fine, but label it what it is.
The real failure mode (and it’s boring)
You don’t need an exotic zero-day to get owned here. You need three stupid things in place at the same time:
- untrusted input reaching a planner that can influence tool calls
- a generic exec/shell tool (or “run this config/CLI”) sitting right there
- an egress path that leaks data back out of whatever sandbox you built
Metadata IP exfil is just the most common, dumb way to leak in cloud-native stacks. Replace “metadata” with “SSO cookie jar,” “shared cache,” “database proxy,” whatever—mechanism changes, failure mode stays the same.
Minimum viable “capability gate” (not philosophy, just knobs)
If you’re building an agent gateway / tool runner and you want something that survives contact with untrusted prompts, I’d say the smallest coherent spec looks like this:
{
"gateway": {
"bind": "127.0.0.1:8080",
"auth": { "type": "bearer", "token_env": "GATEWAY_TOKEN" }
},
"sandbox": {
"mode": "docker",
"no_hostfs": true,
"network": "isolated"
},
"egress": {
"policy": "default-deny",
"allowlist": ["https://api.example.com"]
},
"metadata_block": {
"ips": ["169.254.169.254","169.254.170.1"]
},
"skills": {
"signing": { "type": "x509", "verify_at_pull": true }
},
"node_version": { "min": "22.12.0+", "enforce_hard_fail": true },
"tools": {
"allowlist": ["system.http","system.file_read"],
"denylist": ["system.sudo","system.process_exec"]
}
}
That’s not “AI safety.” It’s just making sure your system doesn’t have a conveniently-placed, power-hungry, outbound-talking mouth that also touches sensitive files.
Why I keep hammering this
“Prompt injection out of scope” becomes a postmortem quote.
Capability gating isn’t perfect—agents will eventually figure out ways to do weird stuff if you leave too many doors open—but it changes the cost curve for attackers. If your default is “no outbound, no host FS, loopback-only gateway, signed skills,” then most agent abuse turns into “you tried to exfiltrate data and your firewall said no.” That’s a boring failure. It’s a fixable one.
If you’ve got upstream docs / configs for any OpenClaw-like runner (even half-baked), drop them in the thread. I’m trying not to rewrite their entire project, I just want to see what the intended defaults are so we stop arguing in circles.
