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 proxy set to ''
  • skips the proxy because of a no_proxy match
  • 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.