
En este blog, analizamos la vulnerabilidad CVE-2024-36401, detectada en GeoServer, un servidor de código abierto basado en Java muy utilizado para la manipulación y el intercambio de datos geoespaciales. Esta vulnerabilidad, que podría permitir la ejecución remota de código (RCE) por parte de usuarios no autenticados, pone de relieve la importancia fundamental de aplicar los parches a las instalaciones de GeoServer lo antes posible.
En nuestro último análisis de seguridad, dos becarios OPSWAT investigan esta amenaza mediante:
- Análisis en profundidad de los vectores de ataque de la CVE
- Identificación de las vulnerabilidades de seguridad que los atacantes podrían aprovechar para atacar GeoServer
- Simulación de cómo los atacantes pueden comprometer las implementaciones de GeoServer
También explicaremos cómo la tecnología OPSWAT puede detectar esta vulnerabilidad y ofreceremos medidas prácticas para que los equipos protejan su infraestructura geoespacial antes de que los atacantes actúen.

Descripción general de GeoServer
GeoServer es un servidor de código abierto basado en Java diseñado para visualizar, editar y compartir datos geoespaciales. Lanzado inicialmente en 2001 por TOPP (The Open Planning Project), GeoServer se desarrolló con el fin de mejorar la participación ciudadana en la administración pública y la planificación urbana mediante el intercambio abierto de datos espaciales. Más de dos décadas después, GeoServer se ha consolidado como una plataforma robusta capaz de gestionar diversos formatos de datos espaciales e integrarse con diferentes fuentes de datos.
GeoServer ofrece servicios basados en los estándares del OGC (Open Geospatial Consortium), entre los que se incluyen:
- WFS (Servicio de elementos web): permite crear, modificar e intercambiar información geográfica en formato vectorial mediante HTTP.
- WCS (Servicio de cobertura web): facilita el acceso a datos ráster (por ejemplo, imágenes de satélite) para la realización de modelos y análisis complejos.
- WMS (Servicio de mapas web): ofrece una interfaz HTTP sencilla para solicitar imágenes de mapas.
Antecedentes sobre CVE-2024-36401
La vulnerabilidad CVE-2024-36401 afecta a las versiones de GeoServer anteriores a la 2.25.2, la 2.24.4 y la 2.23.6. Se debe a una evaluación insegura de los nombres de propiedades como expresiones XPath en varios parámetros de solicitud de OGC. Los atacantes pueden aprovechar esta vulnerabilidad para provocar la ejecución remota de código (RCE) inyectando entradas manipuladas en una instalación predeterminada de GeoServer.
Según los avisos de seguridad de GitHub, esta vulnerabilidad tiene una puntuación CVSS v3.1 de 9,8 (crítica).

Funciones sencillas frente a funciones complejas de GeoServer
GeoServer admite tanto tipos de entidades simples como complejos para adaptarse a diferentes estructuras de datos geoespaciales, desde conjuntos de datos planos hasta otros más intrincados y anidados. Sin embargo, el tratamiento defectuoso de las expresiones XPath en estos tipos de datos es lo que hace que la vulnerabilidad CVE-2024-36401 sea explotable.
Funciones básicas
Los tipos de entidades simples representan datos geoespaciales básicos en un formato plano, en el que cada fila de una base de datos corresponde a una entidad geoespacial, y cada atributo se asigna directamente a un elemento XML.
Por ejemplo, una tabla que recoge datos de empresas, con columnas como «id», «nombre» y «ubicación», se puede convertir fácilmente en elementos XML sencillos.
| id | nombre | ubicación |
| 1 | OPSWAT | PUNTO (10.769829, 106.685248) |

Características complejas
Por el contrario, los tipos de entidades complejas gestionan datos más complejos. Este tipo de entidad admite propiedades anidadas y relaciones entre diferentes conjuntos de datos. Estos esquemas complejos no se generan automáticamente, sino que se definen siguiendo los estándares de la comunidad, tal y como se describe en la extensión «Application Schema» de GeoServer.
Ejemplo:
Debajo de la tabla de empresas anterior, añadimos una clave externa gu_id para describir la relación entre una empresa y su unidad geológica equivalente:
| id | nombre | ubicación | gu_id |
| 1 | OPSWAT | PUNTO (10.769829, 106.685248) | 12 |
La información sobre las unidades geológicas se almacena por separado en la tabla unidad geológica:
| gu_id | urna | descripción |
| 12 | urn:x-demo:característica:UnidadGeológica:12 | Gneis metamórfico |
Al utilizar estas tablas, podemos asignar la empresa a un sa:Empresa de muestreo, que contiene un gsml:UnidadGeológica. Esta configuración da lugar a una estructura compleja, ya que implica tipos anidados y relaciones definidas por especificaciones de la comunidad, en lugar de esquemas generados automáticamente.

Esa flexibilidad es esencial para modelar situaciones complejas del mundo real, pero también genera vulnerabilidades debido a que depende de técnicas de procesamiento avanzadas, como la evaluación de JXPath, para gestionar eficazmente las estructuras anidadas.
Cómo surge la vulnerabilidad
GeoServer está diseñado para utilizar la evaluación XPath con el fin de procesar tipos de entidades complejos (como los que se encuentran en los almacenes de datos de Application Schema). Sin embargo, debido a un manejo inadecuado, aplica erróneamente la evaluación XPath también a tipos de entidades simples. Esto crea un vector de ataque porque:
- GeoServer utiliza la biblioteca GeoTools para evaluar los nombres de las propiedades durante la recuperación de datos.
- El
commons-jxpathLa biblioteca, utilizada para procesar expresiones XPath, carece de una validación adecuada, lo que puede dar lugar a la ejecución de código arbitrario al procesar dichas expresiones. - Esta vulnerabilidad expone a todas las instancias de GeoServer a posibles vulnerabilidades de ejecución remota de código (RCE), ya que un atacante puede crear una solicitud maliciosa que aproveche esta ejecución insegura de XPath para tomar el control del servidor.
Resumen del flujo de trabajo de explotación
- A
PUBLICARLa solicitud se envía alObtener valor de propiedadoperación. A continuación, GeoServer intenta recuperar la propiedad (ovalor de referencia) para una característica determinada. - Si la propiedad solicitada existe en la tabla «Detalles del tipo de entidad», GeoServer la procesa con normalidad.

- Sin embargo, si la propiedad no aparece en la lista, GeoServer recurre a la
commons-jxpathbiblioteca para interpretar el parámetro de la solicitud como una expresión XPath. - Dado que
commons-jxpathpermite ejecutar código Java directamente desde XPath; este mecanismo de reserva podría permitir que los parámetros de solicitud proporcionados por el usuario se utilizaran para la ejecución remota de código. En pocas palabras, un atacante puede inyectar código malicioso para lograr la ejecución remota de código (RCE).

Análisis y explotación de vulnerabilidades
JXPath y el puente de ejecución de Java

El commons-jxpath Esta biblioteca, conocida comúnmente como JXPath, permite navegar por grafos de objetos Java (JavaBeans, objetos DOM, etc.) utilizando la sintaxis XPath. Por ejemplo, si tienes un objeto «Employee» sencillo con propiedades como «name» y «address», JXPath te permite consultar esas propiedades como si fueran nodos de un documento XML.

Aprovechamiento de las funciones de extensión
Además de las funciones estándar, JXPath también admite funciones de extensión que actúan como puente hacia Java. Este «puente hacia Java» es fundamental, ya que permite invocar funciones de Java directamente dentro de consultas XPath, por ejemplo:

Debido a las escasas restricciones sobre los métodos de Java a los que se puede acceder a través de este puente, un atacante puede aprovechar la exec() función (o métodos similares) para ejecutar comandos arbitrarios en el servidor.

WFS GetPropertyValue
El WFS de GeoServer permite a los usuarios consultar y manipular elementos geoespaciales. En condiciones normales, el WFS Obtener valor de propiedad La operación simplemente devolvería la propiedad solicitada en un formato XML.


Análisis del flujo de trabajo
- Un atacante envía una solicitud POST a /geoserver/wfs.
- GeoServer examina la etiqueta XML más externa—
wfs:GetPropertyValue—para determinar qué operación se debe ejecutar. - A continuación, GeoServer delega los parámetros de la solicitud al método correspondiente de la clase WFS. En este caso, el Dispatcher dirige la solicitud al
Obtener valor de propiedadmétodo.

- Dentro de la clase DefaultWebFeatureService20 (WFS), esto
Obtener valor de propiedadEl método reenvía los parámetros del usuario a un controlador del mismo nombre. - El adiestrador
ejecutar()El método recibe la solicitud, incluyendo los datos críticosvalor de referenciaparámetro controlado por el usuario.

- Durante el
ejecutar()método, GeoServer recupera elvalor de referenciae invoca suevaluar()función.

- Si
valor de referenciano coincide con las propiedades predefinidas de GeoServer, este lo establece por defecto en elAccesor de propiedades, que interpretavalor de referenciacomo una expresión XPath.

- El
get()El método de FeaturePropertyAccessor utilizacommons-jxpathpara ejecutar la consulta XPath. En este caso, el usuariovalor de referenciase pasa directamente al parámetro xpath sin validar. A través deJXPathContext.newContext(), GeoServer inicializa un entorno para consultas XPath y, a continuación, las ejecuta medianteiteratePointers().

Dado que JXPath admite funciones de extensión, los atacantes pueden inyectar código malicioso en la expresión XPath, lo que provoca la ejecución de código arbitrario en la instancia de GeoServer.

Esta sucesión de acontecimientos pone de manifiesto lo peligroso que resulta manejar el valor de referencia Este parámetro puede dar lugar a una ejecución remota de código (RCE), lo que supone una grave amenaza para la seguridad de las implementaciones vulnerables de GeoServer.
Simulación del ataque
Para simular este ataque en un escenario real, nuestros becarios OPSWAT instalaron GeoServer en un equipo local con Windows. Al acceder a GeoServer, apareció la siguiente interfaz.

Una vez que el servidor está en funcionamiento, un atacante puede aprovechar la vulnerabilidad enviando una solicitud POST con una expresión XPath maliciosa a través de valor de referencia al punto final /geoserver/wfs.

Resultado: Una vez enviada la solicitud, la expresión XPath maliciosa ejecuta un comando del sistema y activa la apertura de la aplicación «Calculadora».

Medidas de mitigación y recomendaciones
Una simple vulnerabilidad puede derivar en un ataque a la cadena de suministro de software, especialmente en proyectos que utilizan software de código abierto como GeoServer. La tecnologíaOPSWAT (Software de componentesSoftware )OPSWAT ayuda a identificar vulnerabilidades como la CVE-2024-36401 en su código fuente.
Este ejemplo muestra cómo funciona OPSWAT :
- Detecta los componentes de software afectados por vulnerabilidades.
- Evalúa y clasifica la gravedad de la vulnerabilidad de seguridad; en este caso, los CVE de GeoServer se han marcado como «críticos».
- Indica la versión afectada.
- Recomienda la versión corregida para que los equipos de desarrollo puedan aplicar parches o adoptar medidas correctivas con prontitud.

Otras medidas recomendadas
- Actualización de GeoServer: Actualice a las versiones 2.25.2, 2.24.4 o 2.23.6 (o posteriores) de GeoServer, en las que se ha corregido la vulnerabilidad.
- Dependencias de auditoría: Utiliza con regularidad herramientas como OPSWAT para identificar bibliotecas obsoletas (por ejemplo,
commons-jxpath) en tu entorno. - Restringir el acceso: Implemente GeoServer detrás de cortafuegos o capas de autenticación para minimizar la superficie de ataque.
- Esté atento a los avisos de seguridad: consulte las notas oficiales de las versiones de GeoServer y las bases de datos CVE para mantenerse al día de los nuevos parches.
Acerca de OPSWAT
OPSWAT es compatible con los lenguajes de programación más populares y ofrece a los equipos de desarrollo de software visibilidad sobre las bibliotecas de código abierto de terceros, sus dependencias asociadas y las últimas versiones disponibles para actualizar. Los desarrolladores pueden integrar OPSWAT en su código fuente y en servicios de contenedores como GitHub, BitBucket, GitLab, Amazon ECR, DockerHub y muchos más. Más información sobre SBOM.
Habla hoy mismo con un experto para descubrir cómo integrar OPSWAT y soluciones OPSWAT en tu infraestructura y flujos de trabajo actuales:
