Envío de registros, alertas y datos de telemetría a través de un diodo de datos

Descubre cómo
Utilizamos inteligencia artificial para traducir el sitio web y, aunque nos esforzamos por garantizar la precisión, es posible que las traducciones no sean siempre 100 % exactas. Agradecemos tu comprensión.

La vulnerabilidad CVE-2024-36401 en el software de código abierto GeoServer expone a los sistemas a la ejecución remota de código

Por OPSWAT
Comparte esta publicación
Fotografías de los participantes en el programa OPSWAT
Participantes en el Programa OPSWAT

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.

Ilustración que representa el análisis de vulnerabilidades de GeoServer

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). 

Captura de pantalla de las métricas de la puntuación base CVSS utilizadas para evaluar las vulnerabilidades de software

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.

idnombreubicación
1OPSWATPUNTO (10.769829, 106.685248)
Asignación de entidades simples en GeoServer: de filas de una base de datos a elementos XML

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:

idnombreubicacióngu_id
1OPSWATPUNTO (10.769829, 106.685248)12

La información sobre las unidades geológicas se almacena por separado en la tabla unidad geológica:

gu_idurnadescripción
12urn:x-demo:característica:UnidadGeológica:12Gneis 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.

Relaciones anidadas entre unidades geológicas en elementos complejos de GeoServer

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:

  1. GeoServer utiliza la biblioteca GeoTools para evaluar los nombres de las propiedades durante la recuperación de datos.
  2. El commons-jxpath La 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.
  3. 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 PUBLICAR La solicitud se envía al Obtener valor de propiedad operación. A continuación, GeoServer intenta recuperar la propiedad (o valor 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.
GeoServer recurre a commons-jxpath para la evaluación de XPath en una tabla
  • Sin embargo, si la propiedad no aparece en la lista, GeoServer recurre a la commons-jxpath biblioteca para interpretar el parámetro de la solicitud como una expresión XPath.
  • Dado que commons-jxpath permite 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).
Diagrama de flujo que ilustra la operación GetPropertyValue de GeoServer y el flujo del ataque

Análisis y explotación de vulnerabilidades

JXPath y el puente de ejecución de Java

Procesamiento de expresiones XPath maliciosas mediante Commons-jxpath en GeoServer

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.

Navegación JXPath por grafos de objetos Java mediante la sintaxis XPath

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:

Consulta JXPath de las propiedades de un objeto «Employee» de Java

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.

Llamada a funciones de extensión que conectan XPath con métodos Java

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.

La operación GetPropertyValue de WFS devuelve una propiedad XML
Estructura de la respuesta XML de WFS GetPropertyValue

Análisis del flujo de trabajo

  1. Un atacante envía una solicitud POST a /geoserver/wfs.
  2. GeoServer examina la etiqueta XML más externa—wfs:GetPropertyValue—para determinar qué operación se debe ejecutar.
  3. 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 propiedad método.
El distribuidor de GeoServer redirige la solicitud al método GetPropertyValue
  1. Dentro de la clase DefaultWebFeatureService20 (WFS), esto Obtener valor de propiedad El método reenvía los parámetros del usuario a un controlador del mismo nombre.
  2. El adiestrador ejecutar() El método recibe la solicitud, incluyendo los datos críticos valor de referencia parámetro controlado por el usuario.
El método `run()` del controlador recibe una solicitud del usuario con el parámetro `valueReference`
  1. Durante el ejecutar() método, GeoServer recupera el valor de referencia e invoca su evaluar() función.
GeoServer recupera el valor de referencia y ejecuta la función evaluate()
  1. Si valor de referencia no coincide con las propiedades predefinidas de GeoServer, este lo establece por defecto en el Accesor de propiedades, que interpreta valor de referencia como una expresión XPath.
El accesor de propiedades interpreta «valueReference» como una expresión XPath
  1. El get() El método de FeaturePropertyAccessor utiliza commons-jxpath para ejecutar la consulta XPath. En este caso, el usuario valor de referencia se pasa directamente al parámetro xpath sin validar. A través de JXPathContext.newContext(), GeoServer inicializa un entorno para consultas XPath y, a continuación, las ejecuta mediante iteratePointers().
Commons-jxpath ejecuta una consulta XPath con un valor de referencia proporcionado por el usuario

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.

Un atacante inyecta código malicioso mediante una expresión XPath para obtener ejecución remota de código

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.

Captura de pantalla de la interfaz de GeoServer en un equipo con Windows para simular una vulnerabilidad

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.

Fragmento de código XML que muestra una solicitud POST maliciosa que aprovecha la vulnerabilidad «valueReference» en GeoServer

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».

Captura de pantalla que muestra la apertura de la aplicación «Calculadora» tras un ataque RCE exitoso

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 :

  1. Detecta los componentes de software afectados por vulnerabilidades.
  2. Evalúa y clasifica la gravedad de la vulnerabilidad de seguridad; en este caso, los CVE de GeoServer se han marcado como «críticos».
  3. Indica la versión afectada.
  4. Recomienda la versión corregida para que los equipos de desarrollo puedan aplicar parches o adoptar medidas correctivas con prontitud.
Captura de pantalla del panel de control de OPSWAT en la que se detectan paquetes de GeoServer con vulnerabilidades críticas
La tecnología OPSWAT (Software de componentesSoftware ) detecta paquetes de GeoServer que presentan vulnerabilidades críticas.

Otras medidas recomendadas

  1. 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.
  2. Dependencias de auditoría: Utiliza con regularidad herramientas como OPSWAT para identificar bibliotecas obsoletas (por ejemplo, commons-jxpath) en tu entorno.
  3. Restringir el acceso: Implemente GeoServer detrás de cortafuegos o capas de autenticación para minimizar la superficie de ataque.
  4. 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:

¡Mantente al día con OPSWAT!

Regístrate hoy mismo para recibir las últimas novedades de la empresa, historias, información sobre eventos y mucho más.