- Attacker hosts
malicious_server.pyreturning config withproxy_url: http://internal/ - Victim loads config via
gr.load()→proxy_urladded to trustedproxy_urls - Attacker requests
http://victim/gradio_api/proxy=http://internal/ - Victim proxies request to internal service → credentials exfiltrated
./run_poc.shmalicious_server.py- Returns poisoned Gradio configinternal_service.py- Simulates AWS metadata (169.254.169.254)victim_app.py- Loads malicious config, exposes proxyexploit.py- Fetches internal data through victim