XXE: entidade externa XML

imagem
Neste artigo, explicaremos o que é a injeção de entidades XML externas, descreveremos alguns exemplos comuns, explicaremos como encontrar e usar diferentes tipos de injeções de XXE e também generalizaremos como evitar ataques com a ajuda deles.

O que é uma injeção de entidades XML externas?


A injeção de entidades XML externas (também conhecida como XXE) é uma vulnerabilidade de segurança da Web que pode permitir que um invasor interfira no processamento de dados XML por um aplicativo. Geralmente, ele permite que um invasor exiba arquivos no sistema de arquivos do servidor de aplicativos e interaja com qualquer servidor ou sistema externo que o próprio aplicativo possa acessar.

Em algumas situações, um invasor pode alavancar um ataque XXE para comprometer um servidor principal ou outra infraestrutura interna, explorando a vulnerabilidade XXE para executar ataques de falsificação de solicitação (SSRFs) no servidor.

Como surgem as vulnerabilidades do XXE?


Alguns aplicativos usam o formato XML para transferir dados entre o navegador e o servidor. Os aplicativos que fazem isso quase sempre usam as APIs de biblioteca ou plataforma padrão para processar dados XML no servidor. As vulnerabilidades do XXE surgem porque a especificação XML contém várias funções potencialmente perigosas, e os analisadores padrão suportam essas funções, mesmo que elas não sejam normalmente usadas pelo aplicativo.

Entidades externas XML são um tipo de entidade XML personalizada cujos valores específicos são carregados a partir dos arquivos DTD nos quais eles são gravados. Entidades externas são particularmente interessantes do ponto de vista de segurança, porque permitem definir uma entidade com base no conteúdo de um caminho ou URL de arquivo.

Que tipos de ataques XXE existem?


  • Usando XXE para extrair arquivos, em que uma entidade externa, incluindo o conteúdo do arquivo, é determinada e retornada na resposta do aplicativo.
  • Usando o XXE para executar ataques SSRF, em que uma entidade externa é determinada com base na URL do sistema interno.
  • Usando a extração cega de informações XXE no canal de controle, onde dados confidenciais são transferidos do servidor de aplicativos para o sistema controlado pelo invasor.
  • Usando XXE cego para retornar dados de mensagens de erro quando um invasor pode disparar uma mensagem de erro contendo as informações necessárias.
  • Usando XXE para extrair arquivos

Para executar um ataque da injeção XXE do formulário, que extrai um arquivo arbitrário do sistema de arquivos do servidor, você deve modificar o XML apresentado de uma das duas maneiras:

  • Digite (ou modifique) o elemento DOCTYPE que define a entidade externa que contém o caminho do arquivo.
  • Altere o valor dos dados em XML retornados na resposta do aplicativo para usar uma entidade externa específica.

Por exemplo, suponha que um aplicativo de compras verifique a quantidade de estoques de produtos enviando o seguinte XML ao servidor:

<?xml version="1.0" encoding="UTF-8"?> <stockCheck><productId>381</productId></stockCheck>      XXE,     XXE    /etc/passwd,    XXE: <?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "file:///etc/passwd"> ]> <stockCheck><productId>&xxe;</productId></stockCheck> 

Essa estrutura XXE define uma entidade externa & xxe, cujo valor é o conteúdo do arquivo / etc / passwd, e usa uma entidade com o valor productId. Isso faz com que a resposta do aplicativo inclua o conteúdo do arquivo:

 Invalid product ID: root:x:0:0:root:/root:/bin/bash daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin ... 

No caso de vulnerabilidades reais do XXE, geralmente haverá um grande número de valores de dados no XML enviado, qualquer um dos quais pode ser usado na resposta do aplicativo. Para testes sistemáticos de vulnerabilidades do XXE, como regra, será necessário verificar cada nó de dados em XML individualmente, usando uma entidade específica e ver o status da resposta.

Além de extrair dados confidenciais, outra maneira de usar ataques XXE é usá-los para falsificar solicitações do lado do servidor (SSRF).

Essa é uma vulnerabilidade potencialmente séria; com sua ajuda, o aplicativo do servidor pode ser usado para executar solicitações HTTP para qualquer URL que o servidor possa acessar.

Para usar a vulnerabilidade XXE para executar um ataque SSRF, você deve definir uma entidade XML externa usando a URL que deseja acessar e usar uma entidade específica com um valor de dados. Se você pode usar uma entidade específica com o valor dos dados retornados na resposta do aplicativo, é possível visualizar a resposta do URL na resposta do aplicativo e, assim, obter interação bidirecional com o sistema do servidor. Caso contrário, você poderá executar apenas ataques cegos do SSRF (que também podem ter consequências críticas).

No exemplo a seguir, usando XXE, uma entidade externa força o servidor a executar uma solicitação HTTP interna para o sistema interno na infraestrutura do sistema:

 <!DOCTYPE foo [ <!ENTITY xxe SYSTEM "http://internal.vulnerable-website.com/"> ]> 

Usando o XXE para executar ataques SSRF:


Muitos tipos de vulnerabilidades do XXE são cegas. Isso significa que o aplicativo não retorna o valor de nenhuma entidade externa específica em suas respostas e, portanto, a pesquisa direta de arquivos no lado do servidor é impossível.

As vulnerabilidades cegas do XXE ainda podem ser detectadas e exploradas, mas são necessários métodos mais avançados. Às vezes, você pode usar métodos externos para procurar vulnerabilidades e usá-los para exfiltrar dados. Às vezes, também pode causar erros de análise XML que resultam na divulgação de dados confidenciais em mensagens de erro.

Pesquisa e uso de vulnerabilidades cegas XXE:


A capacidade de atacar com uma injeção XXE é óbvia em muitos casos, pois o tráfego HTTP normal do aplicativo inclui solicitações que contêm dados XML. Em outros casos, a capacidade de atacar é menos perceptível. No entanto, se você procurar nos lugares certos, encontrará a oportunidade de um ataque XXE em consultas que não contêm XML.

XInclude Ataques


Alguns aplicativos recebem dados enviados pelo cliente, insere-os no lado do servidor em um documento XML e os analisa. Um exemplo disso é quando os dados do cliente são colocados em uma solicitação de back-end SOAP, que é processada pelo serviço de back-end SOAP.

Nesse caso, você não pode executar o ataque XXE clássico porque não está no controle de todo o documento XML e, portanto, não pode determinar ou modificar o elemento DOCTYPE. No entanto, você pode usar o XInclude. XInclude faz parte da especificação XML, que permite criar um documento XML a partir de documentos aninhados. Você pode colocar um ataque XInclude em qualquer valor de dados em um documento XML, para que o ataque possa ser realizado em situações em que você esteja gerenciando apenas um elemento de dados colocado em um documento XML no lado do servidor.

Para executar um ataque do XInclude, você deve fazer referência ao espaço para nome do XInclude e especificar o caminho para o arquivo que deseja envolver. Por exemplo:

 <foo xmlns:xi="http://www.w3.org/2001/XInclude"> <xi:include parse="text" href="file:///etc/passwd"/></foo> 

Alguns aplicativos permitem que os usuários carreguem arquivos, que são processados ​​no lado do servidor. Alguns formatos de arquivo comuns usam XML ou contêm subcomponentes XML. Exemplos de formatos XML são os formatos de documento do Office, como DOCX, e os formatos de imagem, como SVG.

Por exemplo, um aplicativo pode permitir que os usuários carreguem imagens e processem ou as verifiquem no servidor após o download. Mesmo que o aplicativo espere receber o formato PNG ou JPEG, a biblioteca de processamento de imagens usada pode suportar imagens SVG. Como o formato SVG usa XML, um invasor pode enviar uma imagem SVG mal-intencionada e, assim, ser capaz de atacar vulnerabilidades do XXE.

Usando XXE, fazendo upload de arquivos de imagem:


A maioria das solicitações POST usa o tipo de conteúdo padrão criado por formulários HTML, como application / x-www-form-urlencoded. Alguns sites esperam receber solicitações nesse formato, mas permitem outros tipos de conteúdo, incluindo XML.

Por exemplo, se uma solicitação regular contiver o seguinte:

 POST /action HTTP/1.0 Content-Type: application/x-www-form-urlencoded Content-Length: 7 foo=bar         : POST /action HTTP/1.0 Content-Type: text/xml Content-Length: 52 <?xml version="1.0" encoding="UTF-8"?><foo>bar</foo> 

Se um aplicativo aceita solicitações que contêm XML no corpo da mensagem e analisa o conteúdo como XML, você pode ter a oportunidade de atacar o XXE simplesmente reformatando as solicitações para usar o formato XML.

Como encontrar e verificar vulnerabilidades do XXE


A grande maioria das vulnerabilidades do XXE pode ser encontrada de maneira rápida e confiável usando o scanner de vulnerabilidades da Web Burp Suite.

  • O teste manual de vulnerabilidades do XXE normalmente inclui:
  • Testando a extração de arquivo, definindo uma entidade externa com base em um arquivo conhecido do sistema operacional e usando esse objeto nos dados retornados na resposta do aplicativo.
  • Testando vulnerabilidades cegas do XXE, definindo uma entidade externa com base na URL do sistema que você está gerenciando e monitorando a interação com este sistema. O cliente Burp Collaborator é ideal para esse fim.
  • Testando a inclusão vulnerável de dados do usuário não XML em um documento do servidor XML usando um ataque XInclude para tentar obter um arquivo conhecido do sistema operacional.

Como evitar vulnerabilidades do XXE


Quase todas as vulnerabilidades do XXE surgem devido ao fato de a biblioteca de análise de aplicativos XML suportar funções XML potencialmente perigosas que o aplicativo não precisa ou não se destina a usar. A maneira mais fácil e eficaz de impedir ataques XXE é desativar esses recursos.

Como regra, basta desabilitar a resolução de entidades externas e desabilitar o suporte ao XInclude. Isso geralmente pode ser feito usando opções de configuração ou substituindo programaticamente o comportamento padrão. Para obter mais informações sobre como desativar recursos desnecessários, consulte a documentação da biblioteca de análise de XML ou API.



Você pode usar laboratórios especializados como campo de treinamento para testar as habilidades de exploração de tais vulnerabilidades.



As configurações mais recentes de dois processadores de servidores dedicados com os processadores Intel Scalable 2019 estão disponíveis no DEDIC.SH :
  • 2x Xeon Silver 4214 - um total de 24 núcleos
  • 2x Xeon Gold 5218 - um total de 32 núcleos
  • 2x Xeon Gold 6240 - configuração com 36 núcleos.

O custo de um servidor com dois Xeon Silver 4214 - a partir de 15210 rublos / mês
Também estamos prontos para coletar qualquer configuração para você - escreva-nos !

Se não são necessárias grandes potências de um servidor dedicado - é necessário o VDS de 150 rublos / mês !

Source: https://habr.com/ru/post/pt454614/


All Articles