Kimi Code FetchURL SSRF protection bypass via DNS-resolving hostnames and redirects
Kimi Code (@moonshot-ai/kimi-code) before 0.27.0 implements FetchURL SSRF hardening as a static hostname and IP-literal denylist in assertSafeFetchTarget, without resolving DNS or re-validating hosts after HTTP redirects. An attacker who can influence a FetchURL call (for example via prompt injection) can supply a crafted public hostname that resolves to loopback or another internal address, or a public URL that redirects to such a target, and thereby reach internal network services that the denylist was intended to block. FetchURL is included in the default auto-approve tool set, so the call does not require interactive user confirmation in manual mode.
Kimi Code FetchURL SSRF protection bypass via DNS-resolving hostnames and redirects
Kimi Code (@moonshot-ai/kimi-code) before 0.27.0 implements FetchURL SSRF hardening as a static hostname and IP-literal denylist in assertSafeFetchTarget, without resolving DNS or re-validating hosts after HTTP redirects. An attacker who can influence a FetchURL call (for example via prompt injection) can supply a crafted public hostname that resolves to loopback or another internal address, or a public URL that redirects to such a target, and thereby reach internal network services that the denylist was intended to block. FetchURL is included in the default auto-approve tool set, so the call does not require interactive user confirmation in manual mode.
Description: CAPEC-664 Server Side Request Forgery
Solutions
Upgrade to Kimi Code 0.27.0 or later. The fix resolves hostnames via DNS and rejects addresses in loopback, RFC1918, link-local, CGNAT, and ULA ranges; follows redirects manually with per-hop revalidation; and pins connections to the validated resolved addresses to reduce DNS-rebinding (TOCTOU) races.
Configurations
Affects Kimi Code CLI/desktop agent installations before 0.27.0 when FetchURL uses the local fetch provider (including as a fallback). FetchURL is in the default auto-approve tool set. Exploitation requires the ability to influence a FetchURL invocation (for example via prompt injection) and user interaction with the agent session. Impact depends on which loopback or internal services are reachable from the host running Kimi Code.
Workarounds
Exploits
Credits
finder
Natan Nehorai
coordinator
JFrog Security Research
Timeline
Event
Date
Fix merged in MoonshotAI/kimi-code#1791 (FetchURL SSRF hardening)
2026-07-17 03:21:00
Fix released in @moonshot-ai/kimi-code@0.27.0
2026-07-17 12:48:00
Issue reported to Moonshot AI
2026-07-16 08:15:00
Event: Fix merged in MoonshotAI/kimi-code#1791 (FetchURL SSRF hardening)
Date:2026-07-17 03:21:00
Event: Fix released in @moonshot-ai/kimi-code@0.27.0
Kimi Code (@moonshot-ai/kimi-code) before 0.27.0 implements FetchURL SSRF hardening as a static hostname and IP-literal denylist in assertSafeFetchTarget, without resolving DNS or re-validating hosts after HTTP redirects. An attacker who can influence a FetchURL call (for example via prompt injection) can supply a crafted public hostname that resolves to loopback or another internal address, or a public URL that redirects to such a target, and thereby reach internal network services that the denylist was intended to block. FetchURL is included in the default auto-approve tool set, so the call does not require interactive user confirmation in manual mode.