Ciberataques com IA: Como detetar, prevenir e defender-se contra ameaças inteligentes

Ler agora
Utilizamos inteligência artificial para as traduções dos sítios e, embora nos esforcemos por garantir a exatidão, estas podem nem sempre ser 100% precisas. Agradecemos a sua compreensão.

CVE-2024-36401 no GeoServer de código aberto expõe os sistemas à execução remota de código

por OPSWAT
Partilhar esta publicação
Fotografias dos participantes no programa de bolsas de estudo OPSWAT
Participantes do programa de bolsas de estudo OPSWAT

Neste blogue, exploramos a CVE-2024-36401 - uma vulnerabilidade de segurança encontrada no GeoServer, um servidor de código aberto baseado em Java amplamente utilizado para a manipulação e partilha de dados geoespaciais. Esta vulnerabilidade, que pode permitir a execução remota de código (RCE) por utilizadores não autenticados, sublinha a importância crucial de corrigir as implementações do GeoServer o mais rapidamente possível. 

Na nossa mais recente análise de segurança, dois bolseiros de pós-graduação OPSWAT investigam esta ameaça:

Também partilharemos a forma como a tecnologia SBOM OPSWAT pode detetar esta vulnerabilidade e forneceremos passos práticos para as equipas protegerem a sua infraestrutura geoespacial antes que os atacantes ataquem.

Ilustração da análise de vulnerabilidade do GeoServer

Visão geral do GeoServer

O GeoServer é um servidor de código aberto baseado em Java concebido para visualizar, editar e partilhar dados geoespaciais. Inicialmente lançado em 2001 pelo TOPP (The Open Planning Project), o GeoServer foi desenvolvido para melhorar a participação pública no governo e no planeamento urbano através do intercâmbio de dados espaciais abertos. Mais de duas décadas depois, o GeoServer amadureceu e tornou-se numa plataforma robusta capaz de lidar com vários formatos de dados espaciais e de se integrar com diferentes fontes de dados.

O GeoServer fornece serviços baseados nas normas OGC (Open Geospatial Consortium), incluindo:

  • WFS (Web Feature Service) - Permite criar, modificar e trocar informações geográficas em formato vetorial utilizando HTTP
  • WCS (Web Coverage Service) - Facilita o acesso a dados raster (por exemplo, imagens de satélite) para modelação e análise complexas.
  • WMS (Web Map Service) - Fornece uma interface HTTP simples para solicitar imagens de mapas.

Antecedentes do CVE-2024-36401

O CVE-2024-36401 afecta as versões do GeoServer anteriores à 2.25.2, 2.24.4 e 2.23.6. Esta falha resulta da avaliação insegura de nomes de propriedades como expressões XPath em vários parâmetros de pedidos OGC. Os atacantes podem explorar esta falha para criar RCE (execução remota de código) através da injeção de entradas criadas numa instalação predefinida do GeoServer.

 De acordo com os Avisos de Segurança do GitHub, esta vulnerabilidade tem uma pontuação CVSS v3.1 de 9,8 (Crítica). 

Captura de ecrã da métrica de pontuação de base CVSS utilizada para avaliar as vulnerabilidades do software

Caraterísticas Simples vs. Complexas do GeoServer

O GeoServer suporta tipos de recursos simples e complexos para acomodar diferentes estruturas de dados geoespaciais, desde conjuntos de dados planos até conjuntos de dados aninhados e complexos. No entanto, a falha no tratamento de expressões XPath nesses tipos de dados é o que torna o CVE-2024-36401 explorável.

Caraterísticas simples

Os tipos de elementos geográficos simples representam dados geoespaciais diretos num formato plano, em que cada linha de uma base de dados corresponde a um elemento geoespacial e cada atributo corresponde diretamente a um elemento XML. 

Por exemplo, uma tabela que represente empresas com colunas como id, nome e localização pode ser facilmente convertida em caraterísticas XML simples.

idnomelocalização
1OPSWATPONTO (10.769829, 106.685248)
Mapeamento simples de elementos geográficos do GeoServer a partir de linhas da base de dados para elementos XML

Caraterísticas do complexo

Em contrapartida, os tipos de elementos geográficos complexos tratam dados mais complexos. Este tipo de elemento geográfico suporta propriedades aninhadas e relações entre diferentes conjuntos de dados. Estes esquemas complexos não são gerados automaticamente, mas são definidos utilizando as normas da comunidade, tal como descrito na extensão Application Schema do GeoServer.

Exemplo: 

Na tabela de empresas anterior, adicionamos uma chave estrangeira gu_id para descrever a relação entre uma empresa e a sua unidade geológica equivalente:

idnomelocalizaçãogu_id
1OPSWATPONTO (10.769829, 106.685248)12

A informação sobre a unidade geológica é armazenada separadamente na tabela unidade geológica:

gu_idurnadescrição
12urn:x-demo:caraterística:GeologicUnit:12Gnaisse metamórfico

Utilizando estas tabelas, podemos mapear a empresa para um sa:AmostragemEmpresaque contém um gsml:Unidade Geológica. Esta configuração cria uma caraterística complexa, uma vez que envolve tipos aninhados e relações definidas por especificações da comunidade em vez de esquemas gerados automaticamente.

Relações entre unidades geológicas aninhadas em elementos complexos do GeoServer

Esta flexibilidade é essencial para modelar cenários complexos do mundo real, mas também introduz vulnerabilidades devido à sua dependência de técnicas de processamento avançadas, como a avaliação JXPath, para gerir eficazmente as estruturas aninhadas.

Como surge a vulnerabilidade

O GeoServer foi concebido para utilizar a avaliação XPath para processar tipos de caraterísticas complexos (como os que se encontram nos armazenamentos de dados Application Schema). Mas, devido a um tratamento incorreto, aplica erradamente a avaliação XPath também a tipos de caraterísticas simples. Isto cria um vetor de ataque porque:

  1. O GeoServer conta com a biblioteca GeoTools para avaliar os nomes das propriedades durante a recuperação de dados.
  2. O commons-jxpath utilizada para processar expressões XPath, carece de validação adequada, o que pode executar código arbitrário ao processar expressões XPath.
  3. Esta falha expõe todas as instâncias do GeoServer a potenciais vulnerabilidades RCE, uma vez que um atacante pode criar um pedido malicioso que explora esta execução XPath insegura para controlar o servidor.

Visão geral do fluxo de trabalho de exploração

  • A POST é enviado para o GetPropertyValue operação. Em seguida, o GeoServer tenta recuperar a propriedade (ou valorReferência) para uma determinada caraterística.  
  • Se a propriedade solicitada existir na tabela de detalhes do tipo de caraterística, o GeoServer processa-a normalmente.
O GeoServer recorre ao commons-jxpath para avaliação XPath numa tabela
  • No entanto, se a propriedade não estiver listada, o GeoServer recorre ao commons-jxpath para interpretar o parâmetro do pedido como uma expressão XPath.
  • Desde commons-jxpath permite executar código Java diretamente a partir do XPath, este mecanismo de recurso permite potencialmente que os parâmetros de pedido fornecidos pelo utilizador sejam explorados para execução remota de código. Em termos simples, um atacante pode injetar código malicioso para obter RCE.
Diagrama de fluxo de trabalho que ilustra a operação GeoServer GetPropertyValue e o fluxo de ataque

Exploração e análise de vulnerabilidades

JXPath e o Java Execution Bridge

Processamento Commons-jxpath de expressões XPath maliciosas no GeoServer

O commons-jxpath A biblioteca JXPath, normalmente designada por JXPath, permite a navegação através de gráficos de objectos Java (JavaBeans, objectos DOM, etc.) utilizando a sintaxe XPath. Por exemplo, se tiver um simples objeto Employee com propriedades como nome e endereço, o JXPath permite-lhe consultar essas propriedades como se fossem nós num documento XML.

Navegação JXPath de gráficos de objectos Java utilizando a sintaxe XPath

Exploração de funções de extensão

Para além das funções padrão, o JXPath também suporta funções de extensão que funcionam como uma ponte para Java. Esta "ponte para Java" é crucial porque permite que as funções Java sejam invocadas diretamente nas consultas XPath, por exemplo:

Propriedades de consulta JXPath de um objeto Java Employee

Devido às poucas limitações sobre os métodos Java que podem ser chamados através desta ponte, um atacante pode explorar o exec() (ou métodos semelhantes) para executar comandos arbitrários no servidor.

Invocação de função de extensão que faz a ponte entre XPath e métodos Java

WFS GetPropertyValue

O WFS do GeoServer permite aos utilizadores consultar e manipular caraterísticas geoespaciais. Em condições normais, o WFS GetPropertyValue devolveria simplesmente a propriedade pedida numa estrutura XML.

Operação GetPropertyValue do WFS que devolve uma propriedade XML
Estrutura de resposta XML do WFS GetPropertyValue

Análise do fluxo de trabalho

  1. Um atacante envia um pedido POST para /geoserver/wfs.
  2. O GeoServer examina a etiqueta XML mais externa-wfs:GetPropertyValue-para determinar a operação a executar.
  3. O GeoServer delega então os parâmetros do pedido ao método correspondente na classe WFS. Neste cenário, o Dispatcher dirige o pedido para o método GetPropertyValue método.
GeoServer Dispatcher que direciona o pedido para o método GetPropertyValue
  1. Na classe DefaultWebFeatureService20 (WFS), este GetPropertyValue encaminha os parâmetros do utilizador para um manipulador com o mesmo nome.
  2. O identificador executar() recebe o pedido, incluindo o elemento crítico valorReferência parâmetro controlado pelo utilizador.
Método handler run() que recebe o pedido do utilizador com o parâmetro valueReference
  1. Durante o executar() o GeoServer recupera o ficheiro valor de referência e invoca o seu avaliar() função.
GeoServer a recuperar referenceValue e a invocar a função evaluate()
  1. Se valorReferência não corresponder às propriedades predefinidas do GeoServer, o GeoServer define como padrão o FeaturePropertyAccessor, que interpreta valorReferência como uma expressão XPath.
FeaturePropertyAccessor interpretando valueReference como expressão XPath
  1. O get() em FeaturePropertyAccessor utiliza o método commons-jxpath para executar a consulta XPath. Aqui, o valorReferência é passada diretamente para o parâmetro xpath sem validação. Através de JXPathContext.newContext()O GeoServer inicializa um ambiente para consultas XPath e, em seguida, executa-as através de iterarPontos().
Commons-jxpath executa uma consulta XPath com valueReference fornecido pelo utilizador

Uma vez que o JXPath suporta funções de extensão, os atacantes podem injetar código malicioso na expressão XPath, desencadeando a execução arbitrária de código na instância do GeoServer.

Atacante que injecta código malicioso através de uma expressão XPath para RCE

Esta cadeia de acontecimentos demonstra como a manipulação insegura do valorReferência pode levar a RCE, representando uma grave ameaça de segurança para implantações vulneráveis do GeoServer.

Simulando o ataque

Para simular esta exploração num cenário real, os nossos bolseiros de pós-graduação OPSWAT instalaram o GeoServer numa máquina Windows local. A seguinte interface foi exibida ao aceder ao GeoServer.

Captura de ecrã da interface do GeoServer na máquina Windows para simulação de vulnerabilidade

Quando o servidor estiver a funcionar, um atacante pode explorar a vulnerabilidade enviando um pedido POST com uma expressão XPath maliciosa através de valorReferência para o ponto de extremidade /geoserver/wfs.

Trecho de código XML que demonstra um pedido POST malicioso que explora valueReference no GeoServer

Resultado: Depois de o pedido ser enviado, a expressão XPath maliciosa executa um comando do sistema e desencadeia o lançamento da aplicação Calculadora.

Captura de ecrã que ilustra o lançamento da aplicação Calculator após uma exploração RCE bem sucedida

Mitigação e recomendações

Uma simples exploração pode transformar-se num ataque à cadeia de fornecimento de software, particularmente em projectos que dependem de software de código aberto, como o GeoServer. A tecnologiaOPSWAT SBOM (Software Bill of Materials) ajuda a identificar vulnerabilidades como a CVE-2024-36401 na sua base de código.

Este exemplo demonstra como OPSWAT SBOM:

  1. Detecta os componentes de software afectados por vulnerabilidades.
  2. Avalia e classifica a gravidade da falha de segurança - aqui, os CVEs do GeoServer são marcados como "Críticos".
  3. Identifica a versão afetada.
  4. Recomenda a versão corrigida para que as equipas de desenvolvimento possam aplicar patches ou tomar medidas de correção rapidamente.
Captura de ecrã do painel de controlo do OPSWAT SBOM que detecta pacotes GeoServer com vulnerabilidades críticas
A tecnologia OPSWAT SBOMSoftware Bill of Materials) detecta pacotes GeoServer com vulnerabilidades críticas.

Outras medidas recomendadas

  1. Atualizar o GeoServer: Actualize para as versões 2.25.2, 2.24.4 ou 2.23.6 (ou posterior) do GeoServer, onde a vulnerabilidade é corrigida.
  2. Dependências de auditoria: Utilizar regularmente ferramentas como o OPSWAT SBOM para identificar bibliotecas desactualizadas (por exemplo, commons-jxpath) no seu ambiente.
  3. Restringir o acesso: Implantar o GeoServer atrás de firewalls ou camadas de autenticação para minimizar a superfície de ataque.
  4. Monitore os avisos de segurança: Fique de olho nas notas de versão oficiais do GeoServer e nos bancos de dados CVE para se manter atualizado sobre novos patches.

Sobre a OPSWAT SBOM

OPSWAT SBOM suporta as linguagens de programação mais populares, fornecendo às equipas de desenvolvimento de software visibilidade das bibliotecas de código aberto de terceiros, das suas dependências associadas e das últimas versões disponíveis para atualização. Os programadores podem integrar OPSWAT SBOM no seu código-fonte e nos serviços de contentores, como o GitHub, BitBucket, GitLab, Amazon ECR, DockerHub e muito mais. Saiba mais sobre o SBOM.

Fale hoje com um especialista para saber como integrar as ferramentas e soluções OPSWAT na sua infraestrutura e fluxos de trabalho existentes:

Mantenha-se atualizado com OPSWAT!

Inscreva-se hoje para receber as últimas actualizações da empresa, histórias, informações sobre eventos e muito mais.