AI Hacking - Como os hackers utilizam a inteligência artificial nos ciberataques

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.

SVG revelado: Compreender as vulnerabilidades XXE e defender a sua base de código

por Luan Pham, Testador de penetração associado
Partilhar esta publicação

Os ficheiros de imagem são normalmente considerados ficheiros seguros e são muitas vezes tratados sem consciência dos potenciais problemas de segurança. Estes ficheiros de imagem, em especial os ficheiros SVG, são vectores de ataque comuns para lançar ataques perigosos, como o Cross-Site Scripting (XSS) ou a injeção de Entidade Externa XML (XXE). Em contraste com os ataques XSS, os ataques de injeção XXE não afectam o lado do cliente, mas podem afetar significativamente o lado do servidor, conduzindo a vários impactos graves. Nesta publicação do blogue, vamos explorar a natureza dos ataques XXE especificamente através do vetor de ataque SVG (Scalable V etor Graphics), discutir um exemplo real e fornecer estratégias de mitigação com os produtos OPSWAT . 

Informações de base

Antes de nos debruçarmos sobre a vulnerabilidade, começaremos por examinar o formato de ficheiro XML e SVG e a causa principal da técnica de injeção XXE. 

Formato de ficheiro XML

XML (eXtensible Markup Language) é um formato de ficheiro independente de plataforma para armazenar e trocar dados estruturados. O XML suporta uma estrutura hierárquica, o que o torna ideal para representar relações de dados complexas. Os dados em formato XML são organizados em etiquetas, atributos e conteúdo, da mesma forma que o HTML. No entanto, a XML é altamente personalizável e extensível, permitindo aos utilizadores definir as suas etiquetas e atributos de acordo com as suas necessidades. A figura abaixo mostra os dados do departamento IT em formato XML. 

Trecho de código XML que apresenta detalhes de empregados numa estrutura de departamento IT

Entidades XML

Em XML, as entidades são marcadores de posição para dados que lhe permitem incorporar texto ou documentos inteiros no documento atual. Sintaticamente, uma entidade em XML é delimitada por um E comercial (&) e um ponto e vírgula (;). No exemplo abaixo, duas entidades são definidas na Definição do Tipo de Documento e referem-se ao conteúdo do ficheiro XML. A diferença entre as duas entidades é que a entidade interna é definida e referenciada no documento atual, enquanto o conteúdo da entidade externa provém de um documento externo. Após a análise e a resolução das entidades, estas são substituídas pelos dados correspondentes. 

Exemplo de código de um documento XML com entidades internas e externas, incluindo uma saudação
Exemplo de código XML simplificado que destaca a estrutura e a utilização de entidades e conteúdos

Formato de ficheiro SVG

O SVG (Scalable Vetor Graphics) é um formato de ficheiro versátil utilizado extensivamente no desenvolvimento Web, no design gráfico e na visualização de dados. Ao contrário dos formatos de imagem tradicionais, como JPEG ou PNG, o SVG utiliza o formato XML para descrever gráficos vectoriais bidimensionais. Especificamente, as imagens SVG são compostas por formas geométricas como linhas, curvas e polígonos, definidas por equações matemáticas em vez de pixéis individuais. Como resultado, os gráficos SVG podem ser redimensionados infinitamente sem perder qualidade, o que os torna ideais para a conceção de sítios Web com capacidade de resposta e ecrãs de alta resolução. Devido à natureza XML do formato SVG, este também fornece potenciais vectores de ataque para explorações relacionadas com XML. 

Imagem de amostra que mostra uma estrutura básica de ficheiro SVG com conteúdo de texto

Técnica de injeção XXE e impactos

A técnica de injeção XXE abusa do mecanismo de resolução de entidades externas. Especificamente, quando o analisador encontra uma entidade externa, vai buscar o conteúdo correspondente com base no tipo do ficheiro de recurso.  

Se o ficheiro de recurso for local, o analisador recuperará o conteúdo do ficheiro e substituirá a entidade pelos dados correspondentes. Isto permitiria a um atacante mostrar dados sensíveis, como a configuração do servidor, credenciais, etc. Para explorar com êxito a vulnerabilidade, o atacante declara uma entidade externa referente ao conteúdo de ficheiros sensíveis, por exemplo, /etc./password. 

No entanto, se o recurso for remoto ou um serviço interno, o analisador tentará obter os dados solicitando o URL definido. Isto pode ser explorado para efetuar falsificação de pedidos do lado do servidor (SSRF). Neste caso, em vez de se referir a um ficheiro local, o atacante alterará o payload para o URL do serviço vulnerável para pedir em nome do servidor. 

Ataque XXE através do tratamento incorreto de ficheiros SVG: Um estudo de caso 

Vamos investigar um XXE para um caso do mundo real, a biblioteca SVGLIB até à versão 0.9.3. A vulnerabilidade foi descoberta em 2020 e atribuída ao CVE-2020-10799. Começaremos por examinar o fluxo da biblioteca, analisaremos o fragmento de código vulnerável e, por fim, provaremos a exploração através de um serviço de conversão de SVG para PNG. O alvo são aplicações Web auto-implementadas que utilizam versões vulneráveis da SVGLIB para a conversão. 

Pacote svglib

A svglib é uma biblioteca Python pura concebida para converter o formato SVG noutros formatos, como PNG, JPG, PDF, etc., utilizando o kit de ferramentas de código aberto Report Lab. Uma vez que os ficheiros SVG utilizam o formato XML, a análise e o tratamento do XML são também uma parte importante do fluxo principal da biblioteca. As três etapas principais da biblioteca são as seguintes 

Diagrama de fluxo de processo que ilustra os passos desde a análise de um ficheiro SVG até à sua conversão para outro formato

Exploração 

A vulnerabilidade reside no processo de análise do ficheiro SVG que, se for mal configurado, pode provocar a fuga de dados sensíveis no servidor e, potencialmente, causar vulnerabilidades SSRF. Após uma análise mais aprofundada do código-fonte do pacote svglib, a vulnerabilidade XXE é causada pela utilização da configuração predefinida para a análise e o tratamento do formato XML ao carregar o ficheiro SVG. O pacote utilizou o pacote lxml, no qual o valor predefinido para os atributos resolve_ entities da classe XMLParser é True.  

Diferença de código que mostra alterações numa função Python para carregar um ficheiro SVG com opções de resolução de entidades
Diagrama de fluxo de um processo de ataque XXE utilizando ficheiros SVG num contexto de segurança

Remediação

A causa principal do problema é a análise insegura de XML, que é implementada incorretamente na biblioteca svglib e faz parte da dependência lxml. Como resultado, a utilização de uma versão vulnerável desta biblioteca pode resultar na divulgação de informações sensíveis, na falsificação de pedidos do lado do servidor ou mesmo na potencial execução remota de código, dependendo do ambiente implementado e da funcionalidade da aplicação. A vulnerabilidade introduzida por bibliotecas de terceiros é um problema grave para a segurança das grandes aplicações, uma vez que as suas dependências podem ser complexas e não transparentes.  

MetaDefender Software Supply Chain

OPSWAT MetaDefender Software Supply Chain fornece uma visibilidade alargada e uma defesa robusta contra os riscos da cadeia de fornecimento com uma combinação de várias tecnologias. OPSWAT Software Bill of Materials (SBOM) ajuda a obter visibilidade dos pacotes de software de terceiros de código aberto e a identificar dependências de software, vulnerabilidades ou outros riscos potenciais existentes sob cada camada de uma imagem de contentor. Com a integração de mais de 30 mecanismos antivírus combinados, a taxa de deteção de malware da tecnologiaMultiscanning atinge mais de 99,99%. Além disso, a tecnologiaProactive DLP (Data Loss Prevention) identifica credenciais como palavras-passe, segredos, tokens, chaves API ou outras informações sensíveis deixadas no código-fonte. Com as nossas tecnologias de deteção e prevenção de ameaças de confiança zero, o seu ciclo de vida de desenvolvimento de software (SDLC) está protegido contra malware e vulnerabilidades, reforçando a segurança das aplicações e a adesão à conformidade.  

Painel de controloSupply Chain Software MetaDefender  da OPSWAT  que mostra os resultados do scan do repositório de vulnerabilidades e ameaças
Relatório de segurança OPSWAT MetaDefender Software Supply Chain para um ficheiro requirements.txt que não mostra ameaças ou segredos detectados

O MDSSC detecta o CVE encontrado no svglib. Também assinala o nível de gravidade do CVE no relatório SBOM e identifica a versão do software vulnerável.

MetaDefender Core - Deep CDR

Outra razão que torna possível a exploração é o facto de a aplicação processar um ficheiro SVG injetado com um payload malicioso. Consequentemente, se o ficheiro de imagem for sanitizado antes de ser introduzido no serviço de conversão, o payload será eliminado, impedindo assim a ocorrência do ataque. A tecnologia Deep Content Disarm and Reconstruction (CDR) em MetaDefender Core protege contra ameaças conhecidas e desconhecidas transmitidas por ficheiros, higienizando e reconstruindo ficheiros. Com suporte para mais de 160 tipos de ficheiros comuns e centenas de opções de reconstrução de ficheiros, o OPSWAT's Deep CDR neutraliza quaisquer potenciais ameaças incorporadas, assegurando que o ficheiro higienizado mantém a total usabilidade com conteúdo seguro. 

Código XML editável em formato SVG com vulnerabilidade XXE descrita no elemento DOCTYPE
O ficheiro SVG malicioso
Versão limpa do código XML em formato SVG sem vulnerabilidade XXE
O ficheiro SVG depois de ter sido higienizado com MetaDefender Core - Deep CDR 
Relatório de segurança que mostra o ficheiro SVG marcado como permitido e higienizado após a avaliação da vulnerabilidade
MetaDefender Core - Deep CDR resultado higienizado

Biografia do autor

Luan Pham participou no Programa de Bolsas de Estudo para Graduados em Cibersegurança de Infra-estruturas Críticas da OPSWAT e é atualmente um Associate Penetration Tester na OPSWAT. É apaixonado por proteger os produtos da OPSWAT contra potenciais ameaças e por partilhar os seus conhecimentos. 

Luan Pham
Testador de penetração associado

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.