14 julio 2006

RealVNC Remote Authentication Bypass Vulnerability

Versiones de VNC vulnerables:

RealVNC RealVNC Personal Edition 4.2.2

RealVNC RealVNC Personal Edition 4.2

RealVNC RealVNC Personal Edition 4.1

RealVNC RealVNC Personal Edition 4.0

RealVNC RealVNC Free Edition 4.1.1

RealVNC RealVNC Free Edition 4.1

RealVNC RealVNC Free Edition 4.0

RealVNC RealVNC Enterprise Edition 4.2.2

RealVNC RealVNC Enterprise Edition 4.2

RealVNC RealVNC Enterprise Edition 4.1

RealVNC RealVNC Enterprise Edition 4.0

Información Técnica:

Como se realiza la conexión del Server con el Cliente?

1- El Server envía su versión al Cliente "RFB 003.008\n"

2- El Cliente responde con su versión "RFB 003.008\n"

3- El Server envía 1 byte que es el equivalente al numero de tipos de seguridad que ofrece

3(a)- El Server envía un vector de bytes, el cual indica el tipo de seguridad ofrecida

4- El Cliente responde 1 byte, ese byte es elegido del vector en 3(a) para seleccionar el tipo de seguridad

5- Se conectan

EL BUG:

En el RealVNC v4.1.1 y algunas versiones anteriores implementan el RFB 003.008, el Server no realiza un chequeo para determinar si el byte enviado por el Cliente (en el paso 4) en realidad esta ofrecido por el Server en el paso 3(a).

En efecto, la autenticación es transferida del Server al Cliente.

Es posible forzar al Cliente simplemente pidiendo como tipo de seguridad: "Type 1 - None", obteniendo así acceso al Server sin poseer la clave del mismo.

Packet dump:

Server -> Clientee: 52 46 42 20 30 30 33 2e 30 30 38 0a <- Versión del Sever

Cliente -> Server: 52 46 42 20 30 30 33 2e 30 30 38 0a <- Versión del Cliente

Server -> Cliente: 01 02 <- 02 (DES Challenge)

Cliente -> Server: 01 <- Aca esta el exploit de 1 byte

Server -> Cliente: 00 00 00 00 <-- Autenticado!

Soluciones:

1- Actualizar el VNC, porque ya fue parcheado

2- Se debería correr el servicio del VNC detrás de firewalls y a través de túneles SSH

Vulnerabilidad descubierta por: Steve Wiseman

Bugtraq ID de SecurityFocus: 17978


KerneLinux

KerneLinux