Appearance
Why It Matters
SEC366 flags committed Claude settings that allow dangerous host literals in allowedHttpHookUrls.
This is useful because:
- shared Claude settings should not quietly normalize metadata-service or private-network hook targets
- dangerous host literals create a clear SSRF or uncontrolled exfiltration policy smell in team-facing config
- the signal is structural and easy for maintainers to reason about during review
What Triggers
This rule applies only to committed Claude settings surfaces:
.claude/settings.jsonclaude/settings.json
It triggers when allowedHttpHookUrls contains a URL with a dangerous host literal such as:
169.254.169.254metadata.google.internal- private IPv4 ranges
It does not trigger on:
- ordinary public hosts
- fixture-like test/example paths
- prose references outside real Claude settings JSON
Examples
Bad:
json
{
"allowedHttpHookUrls": [
"https://169.254.169.254/latest/meta-data"
]
}Better:
json
{
"allowedHttpHookUrls": [
"https://hooks.example.test/notify"
]
}Remediation
- remove metadata or private-network host literals from
allowedHttpHookUrls - replace them with reviewed public endpoints when shared hook callbacks are actually required
- keep local lab or fixture examples out of committed team-facing Claude settings