https-proxy-agent is a module that provides an http.Agent implementation that connects to a specified HTTP or HTTPS proxy server, and can be used with the built-in https module.
Affected versions of this package are vulnerable to Man-in-the-Middle (MitM).
When targeting a HTTP proxy,
https-proxy-agent opens a socket to the proxy, and sends the proxy server a
CONNECT request. If the proxy server responds with something other than a HTTP response
https-proxy-agent incorrectly returns the socket without any TLS upgrade. This request data may contain basic auth credentials or other secrets, is sent over an unencrypted connection. A suitably positioned attacker could steal these secrets and impersonate the client.
PoC by Kris Adler
var url = require('url'); var https = require('https'); var HttpsProxyAgent = require('https-proxy-agent'); var proxyOpts = url.parse('http://127.0.0.1:80'); var opts = url.parse('https://www.google.com'); var agent = new HttpsProxyAgent(proxyOpts); opts.agent = agent; opts.auth = 'username:password'; https.get(opts);
https-proxy-agent to version 2.2.3 or higher.
Snyk patch available for versions:
Exploit maturityProof of Concept
- Kris Adler
- Snyk ID
- 25 Sep, 2019
- 02 Oct, 2019