O rápido crescimento da tecnologia criou uma grande procura de programadores qualificados. O software de fonte aberta (OSS) tornou-se uma ferramenta vital para esta força de trabalho em crescimento. Atualmente, existem centenas de milhares de pacotes OSS bem estabelecidos em várias linguagens de programação. Mais de 90% dos programadores utilizam estes componentes de fonte aberta nas suas aplicações proprietárias, o que realça a eficiência e a proposta de valor do OSS. Para realçar ainda mais a sua importância, prevê-se que o mercado global de software de fonte aberta atinja 80,7 mil milhões de dólares até 2030, reflectindo uma taxa de crescimento projectada de 16,7% ao ano.
Software é parte integrante das operações comerciais em todo o mundo e, portanto, é frequentemente alvo de ameaças. Em 2023, os gastos com segurança de aplicativos foram de aproximadamente US $ 5,76 bilhões, com projeções atingindo US $ 6,67 bilhões em 2024. Dentro da AppSec, a segurança da cadeia de suprimentos de software ganhou destaque nos últimos três anos, representando a categoria de ataque de crescimento mais rápido, com grandes violações e explorações fazendo manchetes regularmente.
As organizações partem muitas vezes do princípio de que a maioria dos riscos tem origem em aplicações Web viradas para o público. No entanto, esta perspetiva mudou nos últimos anos. Com dezenas de pequenos componentes em cada aplicação, os riscos podem agora surgir de qualquer parte da base de código. É mais importante do que nunca que as organizações se familiarizem com as falhas de segurança existentes e emergentes no ciclo de vida do desenvolvimento de software. Nesta publicação do blogue, os nossos Graduate Fellows apresentam uma análise mais detalhada do CVE-2023-23924, uma falha de segurança crítica descoberta na biblioteca dompdf amplamente utilizada - uma poderosa ferramenta PHP que permite a geração dinâmica de documentos PDF a partir de HTML e CSS.
Através de uma análise abrangente, iremos explorar os pormenores técnicos desta vulnerabilidade, as tecnologias relacionadas que desempenham um papel crucial e uma simulação do processo de exploração. Também examinaremos como o OPSWAT MetaDefender Coredo OPSWAT, particularmente o seu Software Bill of Materials (SBOM) pode ser utilizado para detetar e atenuar esta vulnerabilidade, permitindo que os programadores de software e as equipas de segurança se mantenham um passo à frente das potenciais ameaças.
Antecedentes do CVE-2023-23924
Uma vulnerabilidade de segurança foi descoberta na versão 2.0.1 do dompdf e tornada pública no início de 2023:
- A validação de URI no dompdf 2.0.1 pode ser contornada na análise de SVG passando
<image>
com letras maiúsculas. Isto permite que um atacante chame URLs arbitrários com protocolos arbitrários, levando à desserialização arbitrária de objectos em versões do PHP anteriores à 8.0.0. Através do invólucro de URL PHAR, esta vulnerabilidade pode causar a eliminação arbitrária de ficheiros e até a execução remota de código, dependendo das classes disponíveis. - Os analistas da NVD atribuíram uma pontuação CVSS de 9,8 CRITICAL ao CVE-2023-23924.
Compreender a vulnerabilidade do Dompdf
Para entender completamente a vulnerabilidade CVE-2023-23924 no dompdf, é essencial familiarizarmo-nos com duas tecnologias intimamente relacionadas: Scalable Vetor Graphics (SVG) e ficheiros PHAR.
O SVG (Scalable Vetor Graphics) é um formato de imagem versátil que ganhou grande popularidade devido à sua capacidade de apresentar gráficos de alta qualidade na Web, mantendo-se leve e escalável. Ao contrário das imagens rasterizadas, os SVGs baseiam-se na marcação XML, permitindo um controlo preciso de elementos como linhas, formas e texto. Uma das principais vantagens dos SVGs é a sua capacidade de escalar sem problemas, sem perder a qualidade da imagem, o que os torna ideais para um web design reativo e ecrãs de alta resolução.
O PHAR (PHP Archive) é análogo ao conceito de ficheiro JAR, mas para PHP. Permite uma implementação fácil, agrupando todo o código PHP e o ficheiro de recursos num único ficheiro de arquivo.
Um ficheiro PHAR é composto por 4 secções:
- Stubs: contém o código para arrancar o arquivo.
- Manifesto: contém os metadados do arquivo. Os metadados são armazenados em formato serializado, que pode ser utilizado para desencadear um ataque PHP desserializado num ficheiro PHAR malicioso.
- Conteúdo do ficheiro: contém o conteúdo do arquivo, incluindo o código PHP e os ficheiros de recursos.
- Assinatura (opcional): contém dados para verificar a integridade do ficheiro.
Devido ao facto de os metadados serem armazenados em formato serializado, a combinação do invólucro PHAR e dos metadados do ficheiro PHAR poderia potencialmente desencadear um ataque de desserialização quando utilizado como entrada em funções PHP como file_get_contents(), fopen(), file(), file_exists(), md5_file(), filemtime(),
ou tamanho do ficheiro()
. Esta falha de segurança pode permitir que os atacantes executem código remoto através de um ficheiro PHAR.
Como o Dompdf gera um ficheiro PDF
Através da análise, os bolseiros de pós-graduação do OPSWAT identificaram três fases durante o processo de conversão no dompdf. Para converter um ficheiro HTML para o formato PDF, a biblioteca dompdf começa por analisar o ficheiro de entrada numa árvore DOM e armazena as informações de posicionamento e disposição de cada objeto. Em seguida, o estilo CSS é analisado e aplicado a cada objeto. Finalmente, os objectos são reorganizados para caberem na página e renderizados no ficheiro PDF final.
Para aumentar a segurança, o dompdf implementa uma validação para garantir a segurança das entradas URI antes de avançar para o passo seguinte. Este processo de validação é evidente durante o processamento do ficheiro SVG dentro do valor de xlink:href
atributo.
Se o ficheiro SVG de entrada contiver o <image>
sob a etiqueta <svg>
é implementada uma condição para permitir apenas determinados protocolos, tais como http://
, https://
e file://
, para o xlink:href
domínio.
O resolve_url()
validará o URI antes de o processar com a função drawImage()
função. Se o esquema no URI não estiver entre os protocolos permitidos, a função resolve_url()
devolverá uma exceção à aplicação.
Se o URI passar na validação, ele será então passado para o drawImage()
que utiliza a função file_get_contents()
para tratar o valor URI dentro do xlink:href
atributo. A vulnerabilidade de segurança surge neste ponto: um ataque de desserialização PHAR poderia ser desencadeado se um atacante pudesse contornar a validação e passar um invólucro PHAR para o URI.
Após a análise, descobriu-se que a validação só é aplicada a etiquetas com o nome exato da imagem.
Consequentemente, pode ser facilmente contornada através da capitalização de um ou mais caracteres no nome da etiqueta, como por exemplo Imagem. Como resultado, um ficheiro SVG especialmente criado utilizando Image em vez de imagem poderia escapar a esta validação.
Na etapa seguinte, o drawImage()
é invocada, passando o URI do ficheiro SVG para a função file_get_contents()
função. Por conseguinte, a combinação do desvio da validação e de um ataque de desserialização num ficheiro PHAR permite a um atacante efetuar a Execução Remota de Código. Esta vulnerabilidade abre a porta a um atacante malicioso para comprometer o servidor de aplicações através de um ficheiro SVG se este for tratado por uma versão vulnerável do dompdf.
Simulação de exploração do Dompdf
Para simular esta exploração como um cenário do mundo real, os bolseiros de pós-graduação do OPSWAT desenvolveram uma aplicação Web com conversão de HTML para PDF utilizando a biblioteca dompdf versão 2.0.1. Esta aplicação permite aos utilizadores carregar tipos de ficheiros, como HTML, XML ou SVG, e depois convertê-los em ficheiros PDF.
Um atacante seguirá estes passos para explorar esta vulnerabilidade numa aplicação que utilize uma versão vulnerável do dompdf (versão 2.0.1):
Em primeiro lugar, um atacante gera um objeto malicioso que cria uma shell inversa quando o destruidor é chamado.
Em segundo lugar, o atacante cria um ficheiro PHAR que contém o objeto de metadados malicioso. Quando o ficheiro PHAR é invocado pelo PHAR wrapper no ficheiro file_get_content()
os metadados são desserializados e o objeto especificado é processado. Durante esse processo de desserialização, ele aciona os destrutores e executa o shell reverso.
Em última análise, o atacante incorpora a ligação URI que contém o invólucro PHAR no valor de xlink:href
na etiqueta Image para contornar a validação, executar código malicioso e carregar este ficheiro malicioso para a aplicação.
Durante o processamento do ficheiro SVG malicioso carregado, a aplicação estabelece uma ligação inversa com o atacante, permitindo-lhe comprometer o servidor da aplicação.
Protegendo componentes de código aberto com OPSWAT MetaDefender Core
Para detetar e mitigar a vulnerabilidade CVE-2023-23924 no dompdf, os nossos Graduate Fellows utilizaram OPSWAT MetaDefender Core , um produto de cibersegurança multicamadas que oferece tecnologias avançadas de prevenção e deteção de malware, incluindo o SBOM.
OPSWAT A SBOM protege a cadeia de fornecimento de software fornecendo um inventário abrangente de componentes para código-fonte e contentores. Ao analisar a biblioteca dompdf e as suas dependências, o OPSWAT SBOM pode identificar rapidamente a presença da versão vulnerável 2.0.1 e alertar os utilizadores para o risco potencial.
Além disso, o OPSWAT SBOM pode detetar tecnologias relacionadas, tais como ficheiros SVG e PHAR, que são essenciais para compreender e atenuar a vulnerabilidade CVE-2023-23924. Esta visão holística dos componentes de software da aplicação permite que as equipas de segurança tomem decisões informadas e tomem as medidas adequadas para resolver os riscos identificados.
Além de detetar a versão vulnerável do dompdf, o OPSWAT SBOM também fornece informações valiosas sobre os componentes afetados, suas versões e quaisquer atualizações ou patches disponíveis. Estas informações permitem às equipas de segurança dar prioridade aos seus esforços de correção e garantir que a aplicação é actualizada para uma versão segura do dompdf, resolvendo eficazmente a vulnerabilidade CVE-2023-23924.
Ao tirar partido do motor SBOM em MetaDefender Core , as organizações podem monitorizar proactivamente a sua cadeia de fornecimento de software, identificar potenciais vulnerabilidades em componentes de código aberto e implementar estratégias de mitigação atempadas, garantindo a segurança e integridade gerais das suas aplicações.
Reflexões finais
A descoberta do CVE-2023-23924 na biblioteca dompdf sublinha a necessidade crítica de vigilância no cenário dinâmico da segurança das aplicações. Ao tirar partido das informações e estratégias descritas nesta publicação do blogue, as equipas de segurança podem detetar, atenuar e proteger eficazmente as suas aplicações contra essas vulnerabilidades, garantindo a segurança e a integridade gerais do seu ecossistema de software.