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 OSS atinja 80,7 mil milhões de dólares até 2030, reflectindo uma taxa de crescimento projectada de 16,7% ao ano.
No entanto, a adoção generalizada de OSS introduz também um novo nível de complexidade: as vulnerabilidades de segurança. O grande número de componentes OSS interligados cria uma superfície de ataque mais ampla para ser explorada por agentes maliciosos. A gestão de dependências entre vários pacotes OSS pode ser complexa, dificultando a identificação e correção imediata de vulnerabilidades. Além disso, a segurança do OSS depende frequentemente da vigilância e das contribuições da comunidade de programadores. Isto pode levar a atrasos na correção de vulnerabilidades, especialmente em projectos menos populares.
Neste artigo, os bolseiros de pós-graduação OPSWAT examinam a CVE-2023-33733, uma falha de segurança descoberta na popular biblioteca de código aberto ReportLab. A sua análise é acompanhada por um ataque simulado que utiliza o MetaDefender Core com o seu Software Bill of Materials (SBOM) para identificar vulnerabilidades nas dependências de uma aplicação, incluindo a vulnerável biblioteca ReportLab.
Introdução à biblioteca do Reportlab
O ReportLab, uma biblioteca Python poderosa e de código aberto, permite aos utilizadores gerar PDFs ricos em funcionalidades a partir de código Python. Oferece aos programadores uma combinação vencedora: flexibilidade, facilidade de utilização e extensas opções de personalização para a criação de documentos dinâmicos. A biblioteca oferece ao desenvolvedor um controle aprimorado sobre seus PDFs, permitindo a incorporação precisa de texto, imagens, tabelas e gráficos com precisão meticulosa. Esse nível de personalização torna o ReportLab uma ferramenta valiosa para a geração de documentos dinâmicos, como faturas e relatórios orientados por dados.
CVE-2023-33733 Contexto
O CVE-2023-33733 destaca uma vulnerabilidade de segurança na biblioteca ReportLab, afectando várias versões da biblioteca ReportLab.
- Verificou-se que as versões do ReportLab anteriores à versão 3.6.13 eram vulneráveis à evasão da caixa de areia, especificamente dentro do
"rl_safe_eval
função. A exploração foi conseguida através do atributo de cor das etiquetas HTML, que foi diretamente avaliado como uma expressão Python utilizando a funçãoeval()
que, em última análise, conduz à execução remota de código. - Os analistas da NVD atribuíram uma pontuação CVSS de 7,8 HIGH ao CVE-2023-33733.
Análise da vulnerabilidade de segurança do ReportLab
Os bolseiros de pós-graduação OPSWAT efectuaram uma análise profunda do fluxo de trabalho do ReportLab, identificando a causa principal da vulnerabilidade de segurança CVE-2023-33733.
O ReportLab permite que os programadores criem PDFs de forma eficiente. A biblioteca permite uma integração sem esforço: importar a biblioteca, definir o conteúdo HTML e gerar o PDF numa única linha de código utilizando a função de resultado.
Os nossos bolseiros graduados descobriram um processo em 5 passos para criar PDFs a partir de HTML com o ReportLab.
No processo de 5 etapas para criar PDFs a partir de HTML com o ReportLab, três processos principais se destacam: processamento de parágrafo, processamento de paraparser e o processo de manipulação de HTML.
Como ilustrado na figura acima, o processo de manipulação de HTML no ReportLab utiliza o eval()
especificamente no atributo cor. Servindo como um ponto focal para a execução de código malicioso, o eval()
leva os investigadores a procurar o controlo da sua entrada para explorar a aplicação. No entanto, isto é um desafio devido à caixa de areia imposta pelo __rl_safe_eval__
no ReportLab.
O ReportLab implementou uma sandbox chamada __rl_safe_eval__
. Esta caixa de areia exclui todas as funções Python incorporadas e inclui várias funções incorporadas substituídas. Esta restrição permite a execução de código seguro dentro da biblioteca, impedindo o acesso a funções e bibliotecas perigosas que poderiam ser utilizadas para fins maliciosos (por exemplo, acesso ao sistema de ficheiros, comunicação em rede).
O rl_safe_eval
implementa várias condições para garantir que o atributo invocado é seguro antes de usar a função de caixa de areia integrada do Python getattr()
para o obter e devolver o resultado.
A função safe eval tem como objetivo proteger o ambiente, excluindo funções perigosas e impedindo acções maliciosas. No entanto, se for encontrada uma forma de contornar as suas condições e aceder a uma poderosa função incorporada, esta pode ser explorada.
Com base nesta ideia, os investigadores de segurança tentaram contornar as restrições. Inicialmente, eles exploraram a injeção de objetos usando o tipo()
para construir um objeto e redefinir os seus atributos e métodos para contornar as verificações no __rl_safe_eval__
. Além disso, como a biblioteca ReportLab substitui as funções incorporadas e as torna globais no contexto eval, o investigador pode aproveitar esta implementação para aceder a uma das funções incorporadas originais. Isto poderia permitir-lhes contornar o ambiente da caixa de areia e executar código malicioso.
A carga útil é preparada da seguinte forma:
No entanto, não é possível executar uma expressão de várias linhas num contexto eval. No entanto, um truque de compreensão de lista pode ser empregado, e o payload para explorar este CVE é o seguinte:
RelatórioSimulação de exploração de laboratório
Os investigadores publicaram uma prova de conceito (POC) para o CVE-2023-33733, demonstrando que as aplicações criadas com versões vulneráveis do ReportLab podem ser susceptíveis a ciberataques. Para avaliar esta potencial ameaça, os bolseiros de pós-graduação da OSPWAT realizaram um ataque simulado a uma aplicação Web. Utilizaram MetaDefender Core com capacidades SBOM para identificar as vulnerabilidades de segurança nas dependências de software da aplicação, incluindo a presença da biblioteca ReportLab afetada.
Para simular esta exploração como um cenário do mundo real, os bolseiros OPSWAT desenvolveram uma aplicação Web utilizando Python e a versão vulnerável da biblioteca ReportLab. Esta aplicação imita um caso de utilização típico: os utilizadores podem carregar um ficheiro HTML e convertê-lo num ficheiro PDF.
Um atacante pode criar um ficheiro HTML malicioso que contenha código concebido para explorar 33733. Este código poderia contornar a sandbox e comprometer o servidor web accionando uma reverse shell através do eval()
função.
Um carregamento bem sucedido de um ficheiro malicioso permitiria ao atacante assumir o controlo do servidor de aplicações devido à vulnerabilidade da biblioteca ReportLab desactualizada.
A importância do SBOM e da segurança proactiva
A investigação dos OPSWAT Graduate Fellows sobre o CVE-2023-33733 sublinha os potenciais riscos de segurança associados ao OSS. Embora o OSS ofereça benefícios inegáveis em termos de eficiência de desenvolvimento e rentabilidade, vulnerabilidades como a encontrada no ReportLab podem deixar as organizações expostas a ciberataques.
OPSWAT SBOM protege a cadeia de fornecimento de software, fornecendo um inventário abrangente de componentes para código-fonte e contentores. Suporta mais de 10 linguagens, incluindo Java, JavaScript, Go, PHP e Python, mais de 5 milhões de componentes de software de código aberto de terceiros e utiliza uma base de dados de mais de 17 mil vulnerabilidades provenientes da National Vulnerability Database (NVD) e do GitHub (GHSA).
OPSWAT MetaDefender Core, com as suas capacidades SBOM integradas, permite que as organizações abordem proactivamente estes riscos. MetaDefender Core analisa aplicações de software e dependências, identificando a presença de vulnerabilidades conhecidas como CVE-2023-33733 nos componentes listados. Isto permite aos programadores e às equipas de segurança dar prioridade aos esforços de correção e mitigar os riscos de segurança antes de estes poderem ser explorados.
Reflexões finais
A investigação dos OPSWAT Graduate Fellows sobre a vulnerabilidade do ReportLab (CVE-2023-33733) serve como um valioso lembrete da importância de medidas de segurança proactivas no ciclo de vida do desenvolvimento de software. Ao tirar partido de ferramentas como oMetaDefender Core OPSWAT , as organizações podem obter informações cruciais sobre as suas dependências de software e identificar potenciais vulnerabilidades antes de serem exploradas por atacantes.
Além disso, OPSWAT oferece um conjunto abrangente de soluções de cibersegurança que vão para além da análise de vulnerabilidades. Estas soluções fornecem deteção de ameaças em tempo real, segurança de dados e proteção de endpoints, salvaguardando as organizações de uma vasta gama de ameaças cibernéticas. Ao adotar uma abordagem de segurança em camadas que inclui ferramentas como o MetaDefender Core, as organizações podem aproveitar os benefícios do OSS, minimizando os riscos de segurança associados.