
$url = $_GET['url']; $image = file_get_contents($url); If the attacker supplies:
Instead, this string is an representation of a command and an internal IP address. curl-url-http-3A-2F-2F169.254.169.254-2Flatest-2Fapi-2Ftoken
In plaintext, the command is:
curl http://169.254.169.254/latest/api/token This command retrieves a from the AWS Instance Metadata Service Version 2 (IMDSv2). That token can then be used to access deeper metadata, including IAM role credentials. In the wrong hands, it leads to account takeover , data breaches , and cryptocurrency mining attacks . In the wrong hands, it leads to account
Every time you see that internal IP address in logs, code, or payloads: . Protect your metadata. Protect your cloud. Protect your cloud
http://169.254.169.254/latest/api/token The server makes a request from its internal IP to the metadata service, retrieves the token, and potentially returns it in an error message or redirect. Once an attacker has command execution on a VM (via a vulnerability like Log4Shell), they run:
curl -H "X-aws-ec2-metadata-token: <token>" http://169.254.169.254/latest/meta-data/iam/security-credentials/role-name IMDSv2 prevents HTTP redirect attacks and SSRF (Server-Side Request Forgery) that rely on simple GET requests without headers. When you see this command in logs, a payload, or a URL-encoded string like ours, it means someone is probing for IMDSv2 tokens . Attack scenario 1: SSRF in a web application Imagine a PHP app that fetches images from a user-provided URL: