Vulnerabilidades exploráveis remotamente no servidor de impressão CUPS

Simone Margaritelli, autor do firewall OpenSnitch e do analisador de rede bettercap, divulgou antecipadamente informações sobre vulnerabilidades críticas que permitem ataques remotos a distribuições GNU/Linux, Solaris, FreeBSD e alguns outros sistemas BSD. A publicação estava inicialmente planejada para 6 de outubro, mas devido a um vazamento de informações, foi necessário divulgar as informações antecipadamente, antes que a maioria das distribuições pudesse preparar atualizações de pacotes. As vulnerabilidades afetam o servidor de impressão CUPS e permitem a execução remota de código no sistema sem autenticação.

O pesquisador que identificou o problema preparou um protótipo de exploit funcional, utilizando uma combinação de várias vulnerabilidades que permite a execução remota de código com os direitos do processo de gerenciamento de trabalhos de impressão CUPS (normalmente o usuário 'lp'). O exploit possibilita a substituição discreta das configurações da impressora do usuário ou a adição de uma nova impressora associada a um servidor IPP controlado pelo invasor, que fornece uma descrição PPD especialmente formatada. O processamento desse PPD durante o início do trabalho de impressão resulta na execução do código do atacante (é necessário que a vítima inicie a impressão na impressora adulterada ou substituída pelo atacante).

Sistemas com servidor CUPS e o processo cups-browsed em execução, aceitando conexões de rede na porta 631 (UDP) estão vulneráveis. O ataque também pode ser realizado a partir de uma rede local que utilize os protocolos zeroconf, mDNS ou DNS-SD para impressão. Apenas as configurações do cups-browsed em que no arquivo /etc/cups/cups-browsed.conf o parâmetro BrowseRemoteProtocols está definido como "cups" são vulneráveis. Em distribuições com systemd, o status do serviço cups-browsed pode ser verificado com o comando "sudo systemctl status cups-browsed". servidor As impressoras utilizam os protocolos zeroconf, mDNS ou DNS-SD. Apenas as configurações cups-browsed estão vulneráveis, nas quais no arquivo /etc/cups/cups-browsed.conf no parâmetro BrowseRemoteProtocols está definido o valor "cups". Nos distribuições com systemd, é possível verificar o uso do serviço cups-browsed com o comando "sudo systemctl status cups-browsed".

A vulnerabilidade se manifesta em todos os sistemas de impressão baseados no CUPS, que utilizam versões vulneráveis dos pacotes cups-filters, libcupsfilters, libppd e cups-browsed. As correções estão disponíveis apenas na forma de patches (1, 2, 3) — versões atuais cups-filters 2.0.1, libcupsfilters 2.1b1, libppd 2.1b1 e cups-browsed 2.0.1 estão sujeitas a vulnerabilidades. Nos distribuições, o problema permanece não corrigido, podendo-se monitorar o surgimento de atualizações nas seguintes páginas: Debian, Ubuntu, RHEL, SUSE/openSUSE, Fedora, Arch, FreeBSD. Como uma solução alternativa até a instalação da atualização, é possível bloquear o acesso das redes externas à porta UDP 631, desativar o serviço cups-browsed ou configurar a opção BrowseRemoteProtocols para o valor "none".

Vulnerabilidades identificadas:

  • CVE-2024-47176 — vulnerabilidade no processo cups-browsed, que cria um socket de rede que aceita conexões na porta 631, vinculado a todas as interfaces de rede disponíveis no sistema e que aceitam IPP requests "Get-Printer-Attributes" de quaisquer sistemas externos. Através da manipulação deste serviço, é possível adicionar ao sistema uma impressora controlada pelo atacante e explorá-la através do envio da configuração PPD de vulnerabilidades em outros componentes do CUPS.
  • CVE-2024-47177 — vulnerabilidade no manipulador foomatic-rip do conjunto cups-filters, permitindo a execução de código através do envio do parâmetro FoomaticRIPCommandLine no arquivo PPD, que o atacante pode inserir graças à vulnerabilidade descrita anteriormente no cups-browsed. Os comandos shell mencionados no parâmetro FoomaticRIPCommandLine são executados como estão, sem considerar que o parâmetro pode ser modificado por terceiros. Por exemplo, para escrever no arquivo /tmp/VULNERABLE, pode-se usar "FoomaticRIPCommandLine: "echo 1 > /tmp/VULNERABLE".
  • CVE-2024-47175 — vulnerabilidade no libppd, causada pela falta de validação do valor ppdCreatePPDFromIPP2 ao gravar atributos IPP em um arquivo PPD temporário. O problema permite a inserção de dados arbitrários no arquivo PPD resultante através da anexação de atributos utilizando o caractere de nova linha. Por exemplo, é possível contornar a validação e anexar o atributo FoomaticRIPCommandLine junto com os atributos permitidos para explorar a vulnerabilidade mencionada anteriormente nos cups-filters.
  • CVE-2024-47076 — uma vulnerabilidade na biblioteca libcupsfilters do pacote cups-filters, relacionada à falta de verificação dos valores cfGetPrinterAttributes5 retornados pelo servidor IPP externo, que permite que um atacante organize o processamento de atributos IPP arbitrários em outros subsistemas do CUPS, por exemplo, ao gerar arquivos PPD.

O cenário de ataque ao CUPS se resume aos seguintes passos:

  • Implantação por parte do atacante de seu próprio servidor IPP.
  • Envio à vítima de um pacote UDP com um link para a impressora vinculada ao servidor IPP que o atacante iniciou.
  • Após receber esse pacote, o sistema da vítima se conecta ao servidor IPP do atacante e solicita os atributos da impressora.
  • Em resposta à solicitação da vítima, o servidor IPP do atacante retorna um arquivo PPD com atributos, entre os quais está o atributo FoomaticRIPCommandLine. Este atributo é anexado a um dos atributos permitidos, utilizando o caracter «\n» em uma única linha (por exemplo, «cupsPrivacyURI: «https://www.google.com/\n*FoomaticRIPCommandLine: «), permitindo contornar a verificação e resultando na gravação de FoomaticRIPCommandLine como um atributo separado ao salvar os dados recebidos em um arquivo temporário.
  • Como resultado do processamento dos atributos transmitidos no sistema da vítima, é criado um arquivo PPD: … *cupsSNMPSupplies: False *cupsLanguages: «en» *cupsPrivacyURI: «https://www.google.com/» *FoomaticRIPCommandLine: «echo 1 > /tmp/I_AM_VULNERABLE» *cupsFilter2 : «application/pdf application/vnd.cups-postscript 0 foomatic-rip» *cupsSingleFile: True *cupsFilter2: «application/vnd.cups-pdf application/pdf 0 -» …
  • Ao enviar para impressão na impressora inserida pelo atacante no sistema da vítima, será executado o comando «echo 1 > /tmp/I_AM_VULNERABLE»

O pesquisador que descobriu as vulnerabilidades observa que levou alguns dias para encontrar a vulnerabilidade, mas depois houve uma longa correspondência de 22 dias com os desenvolvedores do projeto OpenPrinting, tentando convencê-los da importância do problema e da necessidade de preparar patches. A discussão se atolou em debates sobre se era possível corrigir os problemas mencionados, e a situação só mudou quando se gerou um clamor público sobre a descoberta da problemática crítica. É interessante também o surgimento de uma vazamento de informações, onde o relatório confidencial enviado ao CERT e o exploit apareceram no fórum breachforums.st, acessíveis ao público, apesar do embargo estabelecido sobre a divulgação das informações.

Fonte: opennet.ru

Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS 🔥 Compre hospedagem confiável para sites com proteção contra DDoS, servidores VPS VDS | ProHoster