Guzzle could send your proxy password, the Proxy-Authorization header, to the website you're requesting instead of only to the proxy. If an attacker runs that website, they can record the credential and use your proxy, or reach places the proxy is trusted to reach.
Who is affected
Apps on guzzlehttp/guzzle before 7.14.2 that set a Proxy-Authorization header on requests, client defaults or middleware. The Guzzle advisory says the header could reach the destination when a request:
- goes direct, including with
proxyset to'' - skips the proxy because of a
no_proxymatch - goes through a SOCKS proxy
- follows a redirect into one of those routes
Older libcurl builds (before 7.37.0) and Guzzle's stream handler had related leaks. Apps that never set a Proxy-Authorization header aren't affected, and neither is CURLOPT_PROXYUSERPWD.
What to do
Update to 7.14.2 or later. The fix keeps the header away from the destination. Until you can update, stop setting Proxy-Authorization as a header and pass proxy credentials in the proxy URL, such as http://user:[email protected]:8080, or through CURLOPT_PROXYUSERPWD. If the credential may have leaked, change it.
Reported by GrahamCampbell.