Resumen ejecutivo
Hemos detectado una campaña destinada a obtener acceso a los equipos de las víctimas y monetizar el acceso a su ancho de banda. Funciona al aprovechar la vulnerabilidad CVE-2024-36401 de la base de datos geoespacial GeoServer. Esta vulnerabilidad de ejecución remota de código con gravedad crítica tiene una puntuación CVSS de 9,8.
Los delincuentes han aprovechado esta vulnerabilidad para implementar kits de desarrollo de software (SDK) legítimos o aplicaciones modificadas con el fin de obtener ingresos pasivos a través del uso compartido de redes o proxies residenciales.
Este método de generar ingresos pasivos es especialmente sigiloso. Imita una estrategia de monetización utilizada por algunos desarrolladores de aplicaciones legítimos que optan por SDK en lugar de mostrar anuncios tradicionales. Esta puede ser una elección bienintencionada que protege la experiencia del usuario y mejora la retención de la aplicación.
Las aplicaciones que encontramos en esta actividad malintencionada son prácticamente silenciosas cuando están en funcionamiento. Consumen recursos mínimos mientras monetizan el ancho de banda de Internet de las víctimas, y sin crear ni distribuir malware. Esta integración permite a los desarrolladores de aplicaciones recibir pagos, mientras que los delincuentes se benefician de los recursos del servidor no utilizados, minimizando el riesgo de que los detecten.
Desde marzo de 2025, los atacantes han estado tanteando las instancias de GeoServer expuestas a Internet. Cortex Xpanse informó de la existencia de 3706 GeoServers accesibles públicamente durante la primera semana de mayo de 2025, lo que indica una superficie de ataque potencialmente grande para los adversarios que tengan como objetivo CVE-2024-36401.
Los clientes de Palo Alto Networks están mejor protegidos frente a las amenazas descritas gracias a los siguientes productos y servicios:
Si cree que puede haber resultado vulnerado o tiene un problema urgente, póngase en contacto con el equipo de respuesta ante incidentes de Unit 42.
Temas relacionados con Unit 42 | Vulnerabilities |
Análisis de la campaña
Hemos seguido de cerca una campaña que surgió por primera vez a principios de marzo de 2025. Los atacantes han cambiado tanto la infraestructura como las tácticas, técnicas y procedimientos (TTP) para mantener la persistencia.
Detectamos que los atacantes hicieron un uso indebido de un SDK y una aplicación durante su campaña:
- El SDK permitía a los desarrolladores monetizar otras aplicaciones a través de la recopilación de datos de los usuarios para obtener ingresos pasivos.
- La aplicación permitía a los usuarios obtener ingresos pasivos por el hecho de compartir su conexión a Internet.
En la siguiente cronología se muestra cómo ha evolucionado esta amenaza.
Fase 1: incursión inicial (principios de marzo de 2025)
La campaña comenzó con intentos de explotación dirigidos a CVE-2024-36401, y luego distribuyó la aplicación mal utilizada y las cargas útiles del SDK mal utilizado.
- 8 de marzo de 2025: la campaña comenzó con intentos de explotación originados desde la dirección IP de origen 108.251.152[.]209. El atacante utilizó un exploit dirigido a CVE-2024-36401.
- Distribución ejecutable personalizada: observamos que estos primeros exploits obtenían ejecutables personalizados alojados en 37.187.74[.]75.
- Desde este host se distribuyeron dos ejecutables principales:
- La aplicación mal utilizada: detectamos variantes de una aplicación, incluidas tres que hemos designado como a193, d193 y e193.
- El SDK mal utilizado: detectamos variantes de un SDK, incluidas cinco que hemos designado como a593, c593, d593, s593 y z593.
Fase 2: cambio de tácticas (finales de marzo - principios de abril de 2025)
Los atacantes cambiaron de táctica durante esta fase de la campaña.
- 24 de marzo de 2025: algunos proveedores de VirusTotal marcaron la dirección IP de distribución 37.187.74[.]75 como maliciosa. Este cambio indica que la comunidad de seguridad comenzó a reconocer la actividad malintencionada originada en esa dirección IP. Creemos que este es un factor clave que llevó al actor de amenazas a trasladar su infraestructura a una dirección IP diferente.
- 26 de marzo de 2025: los atacantes parecieron dejar de distribuir nuevas muestras de aplicaciones mal utilizadas. El foco de atención pareció desplazarse por completo hacia el SDK mal utilizado.
- 1 de abril de 2025: los actores de amenazas cambiaron su infraestructura principal de distribución de exploits a una nueva dirección IP de origen, 185.246.84[.]189. Probablemente se trataba de un intento de eludir las listas de bloqueo y continuar con sus operaciones sin obstáculos.
Fase 3: expansión y persistencia de la infraestructura (mediados de abril de 2025 - en curso)
Los atacantes ampliaron su infraestructura durante esta fase de la campaña.
- 17 de abril de 2025: los atacantes ampliaron aún más su infraestructura de backend. Pusieron en línea una nueva dirección IP de distribución ejecutable personalizada, 64.226.112[.]52.
- La dirección IP de distribución original 37.187.74[.]75 seguía activa a mediados de junio.
En el momento de redactar este artículo, continúan los intentos de explotación desde 185.246.84[.]189, y los servidores de distribución de ejecutables personalizados siguen en línea.
Análisis del exploit CVE-2024-36401
El núcleo de esta vulnerabilidad reside en la capacidad de un atacante para inyectar código arbitrario en las sentencias de consulta JXPath. JXPath es una biblioteca del proyecto Apache Commons que ofrece una implementación de XPath.
XPath es un estándar ampliamente adoptado para consultar y convertir documentos XML. JXPath amplía de forma transparente el uso de expresiones XPath a diversas estructuras de datos Java más allá de XML, como por ejemplo JavaBeans y colecciones de varios tipos. Desde el punto de vista de la seguridad, esta flexibilidad adicional también plantea importantes preocupaciones.
JXPath admite funcionalidad de extensión, que un atacante puede explotar si obtiene control sobre la instrucción de consulta, lo que le permite ejecutar código arbitrario. Esto supone un riesgo mayor que las vulnerabilidades típicas de inyección de consultas.
Por ejemplo, los atacantes han utilizado funciones de extensión estándar para invocar métodos como getRuntime().exec().
En la Figura 1 se muestra un ejemplo de código malintencionado que se aprovecha de la capacidad de JXPath para evaluar expresiones, lo que permite a un atacante inyectar y ejecutar comandos arbitrarios del sistema a través del marcador de posición #{cmd}. Al hacer referencia a exec(java.lang.Runtime.getRuntime() dentro de context.getValue, un atacante activa el mecanismo de ejecución en tiempo de ejecución de Java, lo que da lugar a la ejecución remota de código en el sistema de destino.

En la Figura 2 se muestra la carga útil de este ataque. Hemos suprimido la parte clave de la carga útil en la Figura 2. La parte suprimida obliga a la víctima a ejecutar un comando del sistema para descargar un archivo desde las direcciones IP de distribución del host del atacante.

Según el NVD:
Se ha confirmado que esta vulnerabilidad puede explotarse a través de diversas solicitudes de servicios web (WFS), servicios de mapas web (WMS) y servicios de procesamiento web (WPS), incluidas las solicitudes GetFeature, GetPropertyValue, GetMap, GetFeatureInfo, GetLegendGraphic y Execute.
Mientras analizábamos un exploit utilizado en este ataque, configuramos una instancia de GeoServer y recurrimos a una carga útil de exploit real para analizar cómo funciona el exploit. Podemos ver lo que ocurre dentro de GeoServer siguiendo el flujo de su código.
Después de simular el envío de una carga útil de ataque, nuestro comando se pasó a la función GetPropertyValue. Como se muestra en la parte inferior de la Figura 3, la línea resaltada toma el objeto de solicitud entrante y lo transfiere a un método de ejecución. El comando se ejecuta mediante request.valueReference.

Al entrar en esta función, se observa que la carga útil de la Figura 2 se pasó a la propiedad del objeto nameNoIndexes, como se muestra en el código de explotación de la Figura 4. Más adelante, este objeto invoca el método evaluate de Geotools.

Tenga en cuenta que hemos entrado en el código base de GeoTools. El método evaluate recupera el valor del atributo Geotools del objeto dado. En este método, se utiliza un objeto PropertyAccessor para leer la propiedad. En la Figura 5 se muestra que PropertyAccessor es una interfaz central que define operaciones para leer y escribir valores de propiedad de un objeto. GeoTools intentará encontrar un accesor basado en los parámetros proporcionados.

Una vez que se ha encontrado correctamente un accesor, utilizará el método get del objeto para recuperar el valor de la propiedad. En la Figura 6 se muestra que nuestra carga útil se ha transferido a ese método a través del parámetro attPath.

El método get del objeto invoca la función iteratePointers. de la biblioteca JXPath. Como se muestra en la Figura 7, se inyecta una carga útil en la variable xpath, que luego se transfiere al método context.iteratePointers.

La función ExtensionFunction se ha manipulado y utiliza computeValue para evaluar la expresión. Como se muestra en la Figura 8, la variable de función ahora apunta directamente a javax.lang.Runtime.exec, que es el método estándar de Java para ejecutar comandos del sistema operativo. Los parámetros que se transfieren a esta función incluyen el comando del atacante, y la línea resaltada ejecuta el comando.

Servidores vulnerables expuestos
Según los datos de telemetría de Cortex Xpanse de marzo y abril de 2025, se detectaron 7126 instancias de GeoServer expuestas públicamente en 99 países. En la Figura 9 se muestran los cinco países donde se alojan la mayoría de estas instancias. La mayoría de los servidores expuestos se alojan en China.

Análisis de la cadena de ataques
Hemos detectado varias estrategias de explotación distintas en esta campaña. Todas las estrategias tienen como objetivo implementar y ejecutar un SDK en el sistema de la víctima. Este análisis revisa una variante del SDK que hemos designado como z593. En la Figura 10 se muestra que la primera etapa se aprovecha de CVE-2024-36401 para descargar la carga útil de la segunda etapa z593 desde un host malintencionado bajo el control del atacante.

Durante la segunda etapa, el atacante vuelve a utilizar CVE-2024-36401 para ejecutar la carga útil de segunda etapa z593, como se muestra en la Figura 11.

En lugar de utilizar un servidor web HTTP estándar, los atacantes implementaron instancias privadas de un servidor para compartir archivos mediante transfer.sh para distribuir sus cargas útiles. Como se muestra en la Figura 12, la instancia de transfer.sh está alojada en una de las direcciones IP de distribución del atacante.
- 64.226.112[.]52
- 37.187.74[.]75
Si el exploit inicial tiene éxito, el script actúa como un stager, obteniendo dos archivos adicionales, como se muestra en la Figura 13.
Los archivos ejecutables de estos intentos de explotación están diseñados para interactuar con dos servicios legítimos: la aplicación mal utilizada y el SDK mal utilizado. Ambos servicios ofrecen legítimamente a los usuarios una forma de generar ingresos pasivos compartiendo los recursos de red de los dispositivos inactivos.
En este contexto, los atacantes se apropian de la funcionalidad de la aplicación o del SDK. De forma similar a como los mineros de criptomonedas se apropian de los recursos del sistema para obtener ingresos, estas aplicaciones explotadas también utilizan los recursos del dispositivo para obtener beneficios económicos. Sin embargo, a diferencia de los mineros malintencionados de criptomonedas, este tipo de uso indebido de aplicaciones o SDK suele ser menos visible. Esto atrae menos atención y genera menores beneficios para el actor de amenazas, lo que puede contribuir a que las operaciones se prolonguen y pasen desapercibidas.
Análisis de aplicaciones mal utilizadas
Si profundizamos en el análisis del binario que los atacantes instalaron en el servidor de la víctima, vemos que usaron Dart, como se muestra en la Figura 16. Dart es un lenguaje de programación de código abierto. Dos razones clave probablemente motivaron esta elección:
- Monetización a través del SDK: los atacantes utilizaron Dart para integrar el SDK de ingresos pasivos e interactuar con su servicio. Esta interacción está diseñada para garantizar la generación y recaudación de fuentes de ingresos pasivos para el actor de amenazas.
- Capacidad multiplataforma para Linux: los atacantes también aprovecharon la portabilidad inherente de Dart. Aprovecharon esta característica para compilar el ejecutable específicamente para arquitecturas de sistemas Linux con el fin de ampliar sus posibles entornos objetivo.
La adopción de Dart para estos fines es digna de admiración, ya que puede representar un intento de evadir potencialmente las firmas de detección centradas principalmente en lenguajes más comúnmente asociados con el malware.

Análisis del SDK mal utilizado
Para verificar la naturaleza del componente SDK utilizado en esta campaña, comparamos el binario SDK mal utilizado empleado por el ataque de la amenaza y la versión oficial del SDK del sitio web del proveedor. Nuestro análisis confirmó que los dos archivos son idénticos. Esto sugiere que los atacantes están utilizando un SDK legítimo y sin modificar, que podría eludir la detección de los endpoints.
Conclusión
Esta campaña en curso muestra una evolución significativa en la forma en que los adversarios monetizan los sistemas vulnerados. La estrategia principal de los atacantes se centra en la monetización sigilosa y persistente, en lugar de la explotación agresiva de recursos. Lo consiguen mediante la implementación de ejecutables que explotan servicios legítimos de ingresos pasivos, y utilizan discretamente los recursos del dispositivo para actividades como compartir ancho de banda. Este enfoque favorece la generación de ingresos a largo plazo y de bajo perfil frente a técnicas de fácil detección.
Para combatir esta amenaza, recomendamos encarecidamente aplicar los parches y actualizaciones siempre que sea posible.
Los clientes de Palo Alto Networks están mejor protegidos contra vulnerabilidades y malware gracias a los siguientes productos y servicios:
- La prevención avanzada de amenazas (ATP) puede bloquear los ataques con las mejores prácticas mediante las firmas de prevención de amenazas 95463. Además, la ATP incluye protección basada en el aprendizaje automático que puede detectar el tráfico de exploits en tiempo real.
- El WildFire avanzado puede impedir que se transfiera el ejecutable personalizado.
- El filtrado de URL avanzado y la seguridad de DNS avanzada pueden bloquear las URL personalizadas de alojamiento de ejecutables del dominio C2.
Si cree que puede haber resultado vulnerado o tiene un problema urgente, póngase en contacto con el equipo de respuesta ante incidentes de Unit 42 o llame al:
- Norteamérica: llamada gratuita: +1 (866) 486-4842 (866.4.UNIT42)
- Reino Unido: +44.20.3743.3660
- Europa y Oriente Medio: +31.20.299.3130
- Asia: +65.6983.8730
- Japón: +81.50.1790.0200
- Australia: +61.2.4062.7950
- India: 00 800 050 45107
Palo Alto Networks ha compartido estos resultados con nuestros compañeros de Cyber Threat Alliance (CTA). Los miembros de CTA utilizan esta inteligencia para implementar rápidamente medidas de protección para sus clientes y desarticular sistemáticamente a los ciberdelincuentes. Obtenga más información sobre Cyber Threat Alliance.
Indicadores de vulneración
Direcciones IP y puertos TCP utilizados para la infraestructura de la campaña
- 37.187.74[.]75:8080
- 64.226.112[.]52:8080
Artefactos de campaña
Hash SHA256 del archivo | URL contactada por el archivo |
89f5e7d66098ae736c39eb36123adcf55851268973e6614c67e3589e73451b24 | hxxp://37.187.74[.]75:8080/w1wOYGVLEX/a101 |
6db4b685f413a3e02113677eee10a29c7406414f7f4da611f31d13e3f595f85d | hxxp://37.187.74[.]75:8080/IyxzymKCp2/a102 |
4e4a467abe1478240cd34a1deaef019172b7834ad57d46f89a7c6c357f066fdb | hxxp://37.187.74[.]75:8080/cE58oqrYGO/a193 |
4e40a0df8f4ba4a87ab8fc64950c67f6725a7e8f14a0a84a4ed79b3a8924ba19 | hxxp://37.187.74[.]75:8080/YDjV1ocro3/a401 |
663970530e764f91b0be43936331e6c0a93610db6b86c6c4b64de270ae4d4630 | hxxp://37.187.74[.]75:8080/3g5eBN8nqv/a402 |
7c18fe9da63c86f696f9ad7b5fcc8292cac9d49973ba12050c0a3a18b7bd1cc9 | hxxp://37.187.74[.]75:8080/JadF0ucQNf/a593 |
84ee11f40da3538e4601456912c3efa0e92a903948812fd17fe650c5f7ac33ad | hxxp://37.187.74[.]75:8080/Do4YwzvAJN/alog |
0971264967ba8d461ce98f86b90810493c5e22fc80bf61f0d0eb7a2599a7f77a | hxxp://37.187.74[.]75:8080/DQ5ydzkPnK/c401 |
491f5af9d29f52a6df026159a8ebd27ee6e27151ea78c4782eb05b2c5d39bfc3 | hxxp://37.187.74[.]75:8080/a8HejAHngH/c402 |
a852133ff7f24b14e4224e7052f6d309353b4838fe5f17d25c712d7a1dd6e80a | hxxp://37.187.74[.]75:8080/vLs5vxpDgV/c593 |
b66c64ccd7b9c96fad53f6d3aa0441e46eca899ad8d97964573e41c94fccddba | hxxp://37.187.74[.]75:8080/KaMJw2fsDW/d101 |
f340abe5689e51cf78b10165cb93ab8a2988d0fedd0e74c74fc23ac2dca93a13 | hxxp://37.187.74[.]75:8080/TMuAS1wp8m/d102 |
fc28f97f818d07fd8824333de26e5a0ca0d3fe7233d86f7e227e4838cfea0ca4 | hxxp://37.187.74[.]75:8080/iKA3jGXk6x/d193 |
7c0c69aa0dcfc937c1fef8d42c74f7e46d128898c1d99d3362f2d18397be36ae | hxxp://37.187.74[.]75:8080/fK4SCflkNg/d401 |
33aad585d6280d1921b5f46f8894ee05d426c7751c2133ed5484bf65af587576 | hxxp://37.187.74[.]75:8080/Y1WT747MRP/d402 |
2c5581572ec4877df8ec3e5d2b30bfff5718ecd27d8b3dbe2f393aa5821e7ddd | hxxp://37.187.74[.]75:8080/H0cwXMzCrJ/d593 |
0e2b92991186bc8a817e0187a9b58928969350bc8d8ad7e6b6cd91c185a7e03c | hxxp://37.187.74[.]75:8080/XA8Dkr1CJ4/dlog |
5bc5dfeaeb43fb1e967cad028f8d2c48f5db17ee6c23c383faee74455c2f1f33 | hxxp://37.187.74[.]75:8080/52F6SqfuuS/e101 |
8b25144ad17d023f67477be4791db45d9197d7cfb666b3a5ccc1b1c0e4bae3af | hxxp://37.187.74[.]75:8080/7kS5qiHwg8/e102 |
8aafb9965e946e5d4be085a1373abc750a1488ff78e6e082cc36ff20ff328465 | hxxp://37.187.74[.]75:8080/ei0Ul7l75J/e193 |
a13a07d15d94c996d8b7e8ed633073f6a3e2268a8d14363f16ad48160b85df08 | hxxp://37.187.74[.]75:8080/kGQtGhOpCP/elog |
cdae958629383c4dba22a115615d8a63211bbccb06335cd1c4b5e2c2aa3fee77 | hxxp://37.187.74[.]75:8080/wHNOFLazdK/glog (from d401) |
bbdda70f0c4a3de4ec955e134ad46895ac931e21b930837a85633277128ab7d2 | hxxp://37.187.74[.]75:8080/wlLiXFNtjU/hlog (from c401) |
4fd789a19db35e054a5135466d610452bea607a11b7ec765b5474847c22e637c | hxxp://37.187.74[.]75:8080/gmhm4lmSLO/plog (from z401) |
43b49294b778d4489c69922ff3aca27964a04e0f08bcc830108dc83261a0b205 | hxxp://37.187.74[.]75:8080/QF8plwpY8Y/s401 |
ae706c149497c2fc809682e8827996ea3ceb7bcecddd87be7543d1dca4853470 | hxxp://37.187.74[.]75:8080/zJ03zmSrz6/s402 |
3fd7794be80782b11a09f51ac8cbf2147e9d79303923f279d610ee45e12506eb | hxxp://37.187.74[.]75:8080/22mINruojN/s593 |
e25d6134c6a0573ded1d340f609dd71d15934ca165ea79d47898aa37a5185415 | hxxp://37.187.74[.]75:8080/3pHrSu54Pf/slog (from s401) |
085da541d7555ac6afcacd5899027c3fa4132c1eccfb3d8223794c4e0e3eb361 | hxxp://37.187.74[.]75:8080/vPN5rgRMTz/wlog (from a401) |
2aa6f95dbe8d17e8e70db677808c96ee956c36b7cc8f274435173cfed0b1f5af | hxxp://37.187.74[.]75:8080/T8VevroEJT/z401 |
2b176eb8afa0b089ee8fb072c68c6fdcfe4b2f034c776cc32064f26c0e6c69a3 | hxxp://37.187.74[.]75:8080/uCX4Nl2Pwu/z402 |
915d1bb1000a8726df87e0b15bea77c5476e3ec13c8765b43781d5935f1d2609 | hxxp://37.187.74[.]75:8080/3twwHaJzxo/z593 |
fa2687f94955fbdc2c41f1cff8c7df24937aeb942e4d7856bf2ff52ebf2e61aa | hxxp://64.226.112[.]52:8080/MFTYFuqKGU/a401 |
663970530e764f91b0be43936331e6c0a93610db6b86c6c4b64de270ae4d4630 | hxxp://64.226.112[.]52:8080/cxtpjeM3KU/a402 |
e0b886a39cf098a3c7daa021c7af022b0ceb6edcf3fa49e3c3b8f70b843423c2 | hxxp://64.226.112[.]52:8080/XEQS3MTzdS/a593 |
9515df36a6d16c0a9fcca680d6b181539d80efd4cda85dacbfb30127a7f11736 | hxxp://64.226.112[.]52:8080/fAFUQgw7Py/c401 |
491f5af9d29f52a6df026159a8ebd27ee6e27151ea78c4782eb05b2c5d39bfc3 | hxxp://64.226.112[.]52:8080/0rX20C97S6/c402 |
b381e8355cf3a432e63064897cc7719e8b9c38e91c6151cd1e7aed4cd219a75b | hxxp://64.226.112[.]52:8080/LuoHgydq6F/c593 |
dec84a568b6393ccd863bb38851a76f54de6f59193660e4b88aa1f941b744469 | hxxp://64.226.112[.]52:8080/g1Gl1JWEUw/d401 |
33aad585d6280d1921b5f46f8894ee05d426c7751c2133ed5484bf65af587576 | hxxp://64.226.112[.]52:8080/AORGz7zIzn/d402 |
7620f22a5ed1a8ac2a1da732e55e14a13197b631e5abba6431f88e5cfa3ae2de | hxxp://64.226.112[.]52:8080/rKS64mUmF7/d593 |
3d7ac752bb0d54802f2def38f44e10854f70ab5a9a001b5c39ab0531b9ed74bf | hxxp://64.226.112[.]52:8080/vbbdG8dpAw/s401 |
ae706c149497c2fc809682e8827996ea3ceb7bcecddd87be7543d1dca4853470 | hxxp://64.226.112[.]52:8080/W7lJoMcuOu/s402 |
6dd6751bae92dfa504f0ad5558ab8adfdfba3df5a7f218245627574bfac39f11 | hxxp://64.226.112[.]52:8080/6mXfFz7ltE/s593 |
357ca4ad31132ad4bd605e3217968819b04d577884a4e9dd760ed0182c4609ed | hxxp://64.226.112[.]52:8080/YbEYCqCFVl/z401 |
2b176eb8afa0b089ee8fb072c68c6fdcfe4b2f034c776cc32064f26c0e6c69a3 | hxxp://64.226.112[.]52:8080/1Vt9KBLEFr/z402 |
97c8ec63766ce63b8ace283928922cfceb7c8f3bc72edcbd255e157a1afb15fe | hxxp://64.226.112[.]52:8080/09KvYAUSHm/z593 |
Recursos adicionales
- El componente JXPath - Apache Commons