1000-ft view: this page shows what happens when a server blindly fetches user-provided URLs: internal services exposed, metadata theft, port scans, and weird schemes being parsed as files. Each attack calls a deliberately vulnerable endpoint.
Why it’s bad: the server can reach addresses end-users can’t, like
127.0.0.1 or 169.254.169.254 (cloud metadata). Fetching these leaks secrets.
Why it’s bad: if code validates only the hostname string and never checks the resolved IP, an attacker can point a friendly name at a private address.
http://localhost/… (resolves to 127.0.0.1).Why it’s bad: even if the first hop is public, a 302 to a private address will be followed by default with typical HTTP clients.
127.0.0.1.Why it’s bad: exposing a “reachability test” gives attackers a port scanner from your network. They can probe SSH (22), SMTP (25), DB ports, etc.
127.0.0.1:22).
Why it’s bad: naive parsing treats file:// paths or IPv6 localhost
as valid targets; userinfo like https://user:pass@host hides destination in logs.