Man-in-the-Middle (MitM)

Affecting https-proxy-agent package, versions <2.2.3

Do your applications use this vulnerable package? Test your applications

Overview

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 200, 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);

Remediation

Upgrade https-proxy-agent to version 2.2.3 or higher.

References

Snyk patch available for versions:

CVSS Score

6.1
medium severity

Exploit: POC
  • Attack Vector
    Adjacent
  • Attack Complexity
    High
  • Privileges Required
    None
  • User Interaction
    None
  • Scope
    Changed
  • Confidentiality
    High
  • Integrity
    None
  • Availability
    None
  • Exploit maturity
    Proof of Concept
  • Remediation Level
    Unavailable
CVSS:3.0/AV:A/AC:H/PR:N/UI:N/S:C/C:H/I:N/A:N/E:P/RL:U/RC:C
Credit
Kris Adler
CWE
CWE-300
Snyk ID
SNYK-JS-HTTPSPROXYAGENT-469131
Disclosed
25 Sep, 2019
Published
02 Oct, 2019