E foi descoberto que algumas falhas do CUPS permitem a execução remota de código no Linux. Confira os detalhes desse problema.
Rastreadas como CVE-2024-47076 (libcupsfilters), CVE-2024-47175 (libppd), CVE-2024-47176 (cups-browsed) e CVE-2024-47177 (cups-filters) e descobertas por Simone Margaritelli, essas falhas de segurança não afetam os sistemas em sua configuração padrão.
Sob certas condições, os invasores podem encadear um conjunto de vulnerabilidades em vários componentes do sistema de impressão de código aberto do CUPS para executar código arbitrário remotamente em máquinas vulneráveis.
Falhas do CUPS permitem a execução remota de código no Linux
O CUPS (abreviação de Common UNIX Printing System) é o sistema de impressão mais amplamente usado em sistemas Linux e também é geralmente suportado em dispositivos que executam sistemas operacionais semelhantes ao Unix, como FreeBSD, NetBSD e OpenBSD e seus derivados.
Um de seus componentes é o daemon cups-browsed, que pesquisa na rede local por impressoras de rede ou compartilhadas anunciadas e as disponibiliza para impressão na máquina.
Isso é semelhante a como o Windows e o Mac podem pesquisar na rede por impressoras de rede remotas para imprimir.
Margaritelli descobriu que se o daemon cups-browsed estiver habilitado, o que não está na maioria dos sistemas, ele escutará na porta UDP 631. Ele também permitirá, por padrão, conexões remotas de qualquer dispositivo na rede para criar uma nova impressora.
Ele descobriu que poderia criar uma impressora PostScript Printer Description (PPD) maliciosa que poderia ser anunciada manualmente para um serviço cups-browsed exposto em execução na porta UDP 631.
Isso faz com que a máquina remota instale automaticamente a impressora maliciosa e a disponibilize para impressão. Se o usuário naquele servidor exposto imprimir na nova impressora, o comando malicioso no PPD será executado localmente no computador.
O comando a ser executado ao imprimir é adicionado por meio de um filtro foomatic-rip, que executa comandos em um dispositivo para que um trabalho de impressão seja renderizado corretamente.
Embora esta seja uma cadeia de execução remota de código, deve-se observar desde o início que os invasores devem superar alguns obstáculos para explorar as vulnerabilidades e realmente obter a execução remota de código.
O primeiro é que os sistemas visados devem ter o daemon cups-browsed habilitado, o que geralmente não é habilitado por padrão, para expor suas portas UDP em uma rede.
Então, o invasor precisa enganar um usuário para imprimir de um servidor de impressora malicioso em sua rede local que aparece repentinamente em sua máquina.
“É uma cadeia de bugs que dependem da falsificação de uma impressora na sua rede local que é adicionada automaticamente via descoberta de rede se ela estiver ligada – geralmente não em sua configuração padrão. Então, uma variável não verificada que é usada para explorar outras vulnerabilidades no sistema CUPS para executar código, mas somente quando um trabalho de impressão é acionado”, disse Ilkka Turunen, Field CTO da Sonatype.
“Boas notícias então – é um RCE, mas com várias mitigações, incluindo o fato de que o invasor precisa ser capaz de se conectar a um computador via UDP, que é amplamente desabilitado na entrada de rede e o serviço geralmente não está ativado por padrão. Parece que o impacto no mundo real é baixo.”
Por essas razões, a Red Hat classificou as falhas como tendo um impacto de gravidade “Importante” em vez de crítico.
Enquanto os testes do site BleepingComputer mostraram que a maioria dos nossos servidores Linux não tinha o serviço habilitado por padrão, uma de nossas VMs Ubuntu tinha. Outros também notaram no Twitter que o cups-browsed foi habilitado por padrão em seus dispositivos Linux.
Enquanto os patches ainda estão em desenvolvimento, a Red Hat compartilhou medidas de mitigação exigindo que os administradores parem o serviço cups-browsed de ser executado e evitem que ele seja iniciado na reinicialização usando os seguintes comandos para quebrar a cadeia de exploração:
sudo systemctl stop cups-browsed
sudo systemctl disable cups-browsed
Os usuários da Red Hat também podem usar o seguinte comando para descobrir se o cups-browsed está sendo executado em seus sistemas:
sudo systemctl status cups-browsed
Se o resultado exibir “Ativo: inativo (morto)”, a cadeia de exploração será interrompida e o sistema não estará vulnerável. Se o resultado mostrar “running” ou “enabled” e a diretiva “BrowseRemoteProtocols” contiver o valor “cups” no arquivo de configuração /etc/cups/cups-browsed.conf, o sistema estará vulnerável.