Posteado por JP el 07/01/2019
Un CAPTCHA (test de Turing público y automático para distinguir a los ordenadores de los humanos, del inglés "Completely Automated Public Turing test to tell Computers and Humans Apart") es un tipo de medida de seguridad conocido como autenticación pregunta-respuesta. Un CAPTCHA te ayuda a protegerte del spam y del descifrado de contraseñas pidiéndote que completes una simple prueba que demuestre que eres humano y no un ordenador que intenta acceder a una cuenta protegida con contraseña.
La prueba de un CAPTCHA consta de dos partes simples: una secuencia de letras o de números generada aleatoriamente que aparece como una imagen distorsionada y un cuadro de texto. Para superar la prueba y probar que eres un ser humano, simplemente tienes que escribir los caracteres que veas en la imagen del cuadro de texto. (https://support.google.com/a/answer/1217728?hl=es)
Como ya cité en el texto anterior, un CAPTCHA sirve para detectar si eres un humano o no, entonces, la vulnerabilidad conocida como "CAPTCHA Bypass" consiste en saltarse esta protección.
Documento:
Caja Tacna - CAPTCHA Bypass
Fecha de lanzamiento:
21 de Diciembre del 2018
Clase de vulnerabilidad:
CAPTCHA Bypass
Producto e Introducción del Servicio :
Sistema Web de CMAC TACNA (Caja Municipal de Ahorro y Crédito de Tacna S.A) - http://www.cmactacna.com.pe/
La Caja Municipal de Ahorro y Crédito de Tacna S.A. (CMAC TACNA), es una institución de intermediación financiera, clasificada en el Sistema no Bancario del Sistema Financiero Peruano; que actúa bajo la forma de Sociedad Anónima, con autonomía económica, administrativa y financiera.Ampara su funcionamiento en la Resolución Nro. 505-92-SBS del 21 de mayo de 1992, de la Superintendencia de Banca y Seguros y la Resolución Nro. 322-98 – SBS, que autoriza su conversión a Sociedad Anónima. Asimismo mantiene relación con la ley de creación del Sistema de Cajas Municipales y la Ley General del Sistema Financiero y del Sistema de Seguros y Orgánica de la Superintendencia de Banca y Seguros. Inicia sus actividades el 01 de Junio de 1992, las mismas que son reguladas y controladas por los organismos del Estado Peruano: Superintendencia de Banca y Seguros, Banco Central de Reserva, sujetándose a las disposiciones sobre Encaje y otras normas obligatorias; asimismo la Caja Tacna es miembro del Fondo de Seguros de Depósitos. (http://www.cmactacna.com.pe/Nosotros/quienessomos)
Resumen de Asesoramiento:
El equipo de investigación de vulnerabilidades de RedSec descubrió una vulnerabilidad remota "CAPTCHA Bypass" en el sistema web de Caja Tacna el cual permite saltarse la verificación contra robots conocida como captcha.
Producto(s) Afectado(s):
Consulta de Código de cuenta Interbancario CCI (http://www.cmactacna.com.pe/Formulario/ConsultaCCI)
Técnica de Explotación:
Remota
Nivel de Severidad:
Medio/Alto
Tipo de Divulgación:
Divulgación Coordinada
Detalles Técnicos y Descripción:
La vulnerabilidad **CAPTCHA Bypass **permite a atacantes remotos saltarse la verificación de si el usuario es un humano o un robot. En este caso, debido a la mala implementación del mismo, hace que su efectividad se reduzca a cero.
El problema consiste en que el valor del CAPTCHA es enviado al cliente y se incluye dentro del formulario como un <input> pero con el atributo hidden activado, éste campo posee el nombre CapImageText, cuyo valor es el mismo que el de la imagen mostrada.
Bajo la lógica anterior, se deduce que si se envía una petición del tipo POST, con el campo CaptchaCodeText y el campo CapImageText con el mismo valor, la petición sería aceptada válida por el backend, ya que compara que los valores de dichos inputs sean iguales.
Exploit:
POST /Formulario/ConsultaCCI/Campanas HTTP/1.1
User-Agent: RedSec
Content-Type: application/x-www-form-urlencoded; charset=utf-8
Host: www.cmactacna.com.pe
Connection: close
Content-Length: 62
num_cuenta=12345678&CaptchaCodeText=RedSec&CapImageText=RedSec
En este ejemplo podemos ver que la petición POST contiene los campos CaptchaCodeText y CapImageText cuyo valor en este caso sería RedSec.
PoC:
curl -d "num_cuenta=12345678&CaptchaCodeText=RedSec&CapImageText=RedSec" -X POST http://www.cmactacna.com.pe/Formulario/ConsultaCCI/Campanas
Bingo! La petición es aceptada y validada por el filtro del captcha, pero al no ingresar un número de cuenta válido en el campo num_cuenta obtenemos el mensaje "Número de cuenta no válido":
sin embargo, si realizamos la misma petición con valores distintos en los campos CaptchaCodeText y CapImageText obtendríamos el siguiente mensaje:
Validando así nuestra teoría de que el backend tan sólo verifica que los campos CaptchaCodeText y CapImageText contengan valores iguales para validar que el captcha se ingresó correctamente. Incluso en la respuesta de las peticiones (2 screenshots anteriores) se ve claramente cómo es que el backend le envía al cliente en texto plano la respuesta del captcha que se tiene que ingresar.
Timeline:
- Descubrimiento del bug: 21 de Diciembre del 2018
- Reporte del bug: 02 de Enero del 2019
Créditos y Autores:
Jorge Pacora [[email protected]]