
Inyección SQL en GeoServer y GeoTools (CVE-2023-25157 y CVE-2023-25158)
Este repositorio contiene una descripción detallada y los pasos de replicación de las vulnerabilidades de inyección SQL encontradas en la plataforma GeoServer y en la librería GeoTools. A la vulnerabilidad se le han asignado los identificadores CVE-2023-25157 para GeoServer y CVE-2023-25158 para GeoTools.
GeoServer es un servidor de software de código abierto escrito en Java que ofrece la capacidad de ver, editar y compartir datos geoespaciales. Está diseñado para ser una solución flexible y eficiente para distribuir datos geoespaciales desde una variedad de fuentes, como bases de datos de Sistemas de Información Geográfica (SIG), datos basados en web y conjuntos de datos personales.
GeoServer se adhiere a los estándares del Open Geospatial Consortium (OGC) para el intercambio de datos, incluidos el Web Feature Service (WFS), el Web Map Service (WMS) y el Web Coverage Service (WCS). Esta adhesión a los estándares significa que los datos de GeoServer pueden utilizarse en una amplia variedad de aplicaciones, desde software SIG personalizado hasta soluciones comerciales listas para usar.
GeoServer está construido principalmente sobre Spring Framework; sin embargo, también utiliza una serie de otras librerías y frameworks, entre los que se incluyen:
GeoTools: Una librería Java de código abierto que proporciona herramientas para datos geoespaciales. GeoServer utiliza GeoTools para muchas de sus funcionalidades principales, como la lectura, escritura y transformación de datos.Las vulnerabilidades en cuestión están profundamente integradas en las expresiones de filtros y funciones definidas por los estándares del Open Geospatial Consortium (OGC). Estas expresiones constituyen la base de la consulta y manipulación de datos geoespaciales, desempeñando un papel fundamental en la funcionalidad de sistemas como GeoServer y GeoTools.
Cuando estas vulnerabilidades son explotadas, pueden dar lugar a graves violaciones de seguridad. La divulgación no autorizada de información es una de las principales preocupaciones, ya que los atacantes podrían acceder a datos sensibles almacenados en la base de datos. La modificación no autorizada es otro resultado potencial, ya que los atacantes pueden manipular los datos en su beneficio. Además, estas vulnerabilidades también pueden facilitar la interrupción del servicio, ya que una explotación exitosa podría llevar a la indisponibilidad del servicio.
A continuación se ofrece un análisis en profundidad de cada vulnerabilidad identificada. Cada vulnerabilidad se examina en detalle, discutiendo sus características específicas, las condiciones que dan lugar a su manifestación y los posibles efectos de su explotación. A continuación se desglosan detalladamente las vulnerabilidades encontradas en GeoServer:
PropertyIsLike: esta vulnerabilidad está presente cuando el filtro PropertyIsLike se utiliza con un campo String junto con cualquier Store basado en bases de datos relacionales, un PostGIS DataStore con las funciones encode habilitadas, o cualquier mosaico de imágenes con un índice almacenado en una base de datos relacional.strEndsWith: esta vulnerabilidad surge cuando la función strEndsWith se utiliza con un PostGIS DataStore con las funciones encode habilitadas.strStartsWith: esta vulnerabilidad se encuentra cuando la función strStartsWith se utiliza con un PostGIS DataStore con las funciones encode habilitadas.FeatureId: esta vulnerabilidad está presente cuando el filtro FeatureId se utiliza con cualquier tabla de base de datos que tenga una columna de clave primaria String y cuando las sentencias preparadas están deshabilitadas.jsonArrayContains: esta vulnerabilidad se encuentra cuando la función jsonArrayContains se utiliza con un campo String o JSON y con un PostGIS u Oracle DataStore (solo en GeoServer 2.22.0 y versiones posteriores).DWithin: esta vulnerabilidad se descubre cuando el filtro DWithin se utiliza con un Oracle DataStore.Y a continuación se desglosan detalladamente las vulnerabilidades encontradas en GeoTools:
PropertyIsLike:
String (sin mitigación)strEndsWith:
strStartsWith:
FeatureId:
String (Oracle no se ve afectado; SQL Server y MySQL no tienen configuraciones para habilitar sentencias preparadas, PostGIS sí)jsonArrayContains:
String o JSONDWithin:
CVE-2023-25157 Inyección SQL en GeoServer.CVE-2023-25158 Inyección SQL en GeoTools.