Copos transbordando: quando sua impressora derrama mais tinta

O Elastic Security Labs discute estratégias de detecção e mitigação de vulnerabilidades no sistema de impressão CUPS, que permitem que invasores não autenticados explorem o sistema via IPP e mDNS, resultando em execução remota de código (RCE) em sistemas baseados em UNIX, como Linux, macOS, BSDs, ChromeOS e Solaris.

Cups Overflow: quando sua impressora derrama mais do que tinta

Update October 2, 2024

The following packages introduced out-of-the-box (OOTB) rules to detect the exploitation of these vulnerabilities. Please check your "Prebuilt Security Detection Rules" integration versions or visit the Downloadable rule updates site.

  • Stack Version 8.15 - Package Version 8.15.6+
  • Stack Version 8.14 - Package Version 8.14.12+
  • Stack Version 8.13 - Package Version 8.13.18+
  • Stack Version 8.12 - Package Version 8.12.23+

Principais conclusões

  • On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) disclosed multiple vulnerabilities affecting the cups-browsed, libscupsfilters, and libppd components of the CUPS printing system, impacting versions <= 2.0.1.
  • As vulnerabilidades permitem que um invasor remoto não autenticado explore o sistema de impressão via IPP (Internet Printing Protocol) e mDNS para obter execução remota de código (RCE) em sistemas afetados.
  • O ataque pode ser iniciado pela internet pública ou rede local, tendo como alvo a porta UDP 631 exposta por cups-browsed sem quaisquer requisitos de autenticação.
  • A cadeia de vulnerabilidades inclui o filtro foomatic-rip , que permite a execução de comandos arbitrários por meio da diretiva FoomaticRIPCommandLine , um problema conhecido (CVE-2011-2697, CVE-2011-2964), mas não corrigido desde 2011.
  • Os sistemas afetados incluem a maioria das distribuições GNU/Linux, BSDs, ChromeOS e Solaris, muitos dos quais têm o serviço cups-browsed habilitado por padrão.
  • Pelo título da publicação, “Atacando sistemas UNIX via CUPS, Parte I”, Margaritelli provavelmente espera publicar mais pesquisas sobre o tópico.
  • A Elastic forneceu proteções e orientações para ajudar as organizações a detectar e mitigar a potencial exploração dessas vulnerabilidades.

O CUPS RCE em resumo

On September 26, 2024, security researcher Simone Margaritelli (@evilsocket) uncovered a chain of critical vulnerabilities in the CUPS (Common Unix Printing System) utilities, specifically in components like cups-browsed, libcupsfilters, and libppd. These vulnerabilities — identified as CVE-2024-47176, CVE-2024-47076, CVE-2024-47175, and CVE-2024-47177 — affect widely adopted UNIX systems such as GNU/Linux, BSDs, ChromeOS, and Solaris, exposing them to remote code execution (RCE).

No centro do problema está a falta de validação de entrada nos componentes do CUPS, o que permite que invasores explorem o Protocolo de Impressão da Internet (IPP). Os invasores podem enviar pacotes maliciosos para a porta UDP 631 do alvo pela Internet (WAN) ou falsificar anúncios DNS-SD/mDNS em uma rede local (LAN), forçando o sistema vulnerável a se conectar a um servidor IPP malicioso.

Para contextualizar, o IPP é um protocolo de camada de aplicação usado para enviar e receber trabalhos de impressão pela rede. Essas comunicações incluem o envio de informações sobre o estado da impressora (atolamentos de papel, pouca tinta, etc.) e o estado de quaisquer trabalhos. O IPP é suportado por todos os principais sistemas operacionais, incluindo Windows, macOS e Linux. Quando uma impressora está disponível, ela transmite (via DNS) uma mensagem informando que a impressora está pronta, incluindo seu Identificador Uniforme de Recursos (URI). Quando estações de trabalho Linux recebem esta mensagem, muitas configurações padrão do Linux adicionam e registram automaticamente a impressora para uso no sistema operacional. Dessa forma, a impressora maliciosa neste caso será registrada automaticamente e disponibilizada para trabalhos de impressão.

Ao se conectar, o servidor malicioso retorna atributos IPP criados que são injetados em arquivos PostScript Printer Description (PPD), que são usados pelo CUPS para descrever as propriedades da impressora. Esses arquivos PPD manipulados permitem que o invasor execute comandos arbitrários quando um trabalho de impressão é acionado.

Uma das principais vulnerabilidades nessa cadeia é o filtro foomatic-rip , que é conhecido por permitir a execução arbitrária de comandos por meio da diretiva FoomaticRIPCommandLine. Apesar de estar vulnerável há mais de uma década, ele continua sem correção em muitas implementações modernas do CUPS, o que agrava ainda mais o risco.

Embora essas vulnerabilidades sejam altamente críticas, com uma pontuação CVSS de até 9,9, elas podem ser mitigadas desabilitando o cups-browsed, bloqueando a porta UDP 631 e atualizando o CUPS para uma versão corrigida. Muitos sistemas UNIX têm esse serviço habilitado por padrão, o que torna esse um problema urgente que precisa ser resolvido pelas organizações afetadas.

Análise POC da Elastic

Os engenheiros de pesquisa de ameaças da Elastic localizaram inicialmente a prova de conceito original escrita por @evilsocket, que havia vazado. No entanto, optamos por utilizar a prova de conceito (PoC) do cupshax com base em sua capacidade de execução local.

Para começar, o PoC usou uma classe Python personalizada que era responsável por criar e registrar o serviço de impressora falsa na rede usando mDNS/ZeroConf. Isso é obtido principalmente pela criação de uma entrada de serviço ZeroConf para a impressora falsa do Protocolo de Impressão da Internet (IPP).

Após a execução, o PoC transmite um anúncio falso da impressora e escuta as solicitações de IPP. Quando um sistema vulnerável vê a transmissão, a vítima solicita automaticamente os atributos da impressora a partir de uma URL fornecida na mensagem de transmissão. O PoC responde com atributos IPP, incluindo o parâmetro FoomaticRIPCommandLine, que é conhecido por seu histórico de CVEs. A vítima gera e salva um arquivo PostScript Printer Description (PPD) a partir desses atributos IPP.

Neste ponto, a execução contínua requer interação do usuário para iniciar um trabalho de impressão e escolher enviá-lo para a impressora falsa. Depois que um trabalho de impressão é enviado, o arquivo PPD informa ao CUPS como lidar com o trabalho de impressão. A diretiva FoomaticRIPCommandLine incluída permite a execução de comandos arbitrários na máquina vítima.

Durante nossa análise e testes das explorações com o Cupshax PoC, identificamos vários obstáculos notáveis e detalhes importantes sobre esses endpoints vulneráveis e processos de execução.

Ao executar comandos arbitrários para criar arquivos, notamos que lp é o usuário e o grupo relatados para execução de comandos arbitrários, o grupo de impressão padrão em sistemas Linux que usam utilitários CUPS. Portanto, o PoC/exploit do Cupshax exige que tanto as vulnerabilidades do CUPS quanto o usuário lp tenham permissões suficientes para recuperar e executar uma carga maliciosa. Por padrão, o usuário lp em muitos sistemas terá essas permissões para executar cargas úteis efetivas, como shells reversos; no entanto, uma mitigação alternativa é restringir lp de forma que essas cargas úteis sejam ineficazes por meio de controles nativos disponíveis no Linux, como políticas do AppArmor ou SELinux, juntamente com políticas de aplicação de firewall ou IPtables.

O usuário lp em muitas configurações padrão tem acesso a comandos que não são necessários para o serviço de impressão, por exemplo telnet. Para reduzir a superfície de ataque, recomendamos remover serviços desnecessários e adicionar restrições a eles quando necessário para impedir que o lp usuário os utilize.

Também observamos que shells reversos interativos não são imediatamente suportados por essa técnica, já que o usuário lp não tem um shell de login; no entanto, com algumas táticas criativas, conseguimos fazer isso com o PoC. Os PoCs típicos testam o exploit gravando um arquivo em /tmp/, o que é fácil de detectar na maioria dos casos. Observe que o usuário que está escrevendo este arquivo será lp , portanto, um comportamento semelhante estará presente para invasores que baixam e salvam uma carga no disco.

Junto com essas observações, o processo pai, foomatic-rip foi observado em nossa telemetria executando um shell, o que é altamente incomum

Executando o POC 'Cupshax'

Para demonstrar o impacto dessas vulnerabilidades, tentamos realizar dois cenários diferentes: usar uma carga útil para um shell reverso usando técnicas de sobrevivência na terra e recuperar e executar uma carga útil remota. Essas ações costumam ser comuns para grupos adversários tentarem aproveitar quando um sistema vulnerável é identificado. Embora ainda esteja em estágio inicial, não foi observada exploração generalizada, mas provavelmente replicará alguns dos cenários descritos abaixo.

Nossas primeiras tentativas de executar o Cupshax PoC encontraram uma série de pequenos obstáculos devido aos grupos de usuários padrão atribuídos ao usuário lp — ou seja, restrições em torno do logon interativo, um atributo comum a usuários que exigem acesso remoto aos sistemas. No entanto, isso não afetou nossa capacidade de baixar uma carga remota, compilar e executar no sistema host afetado:

Testes contínuos foram realizados em torno da invocação reversa do shell, demonstrados com sucesso abaixo:

Avaliando o impacto

  • Gravidade: Essas vulnerabilidades recebem pontuações CVSS controversas de até 9,9, indicando uma gravidade crítica. O uso generalizado do CUPS e a capacidade de explorar remotamente essas vulnerabilidades tornam esse um problema de alto risco.
  • Quem é afetado?: A vulnerabilidade afeta a maioria dos sistemas baseados em UNIX, incluindo as principais distribuições GNU/Linux e outros sistemas operacionais como ChromeOS e BSDs que executam os componentes CUPS afetados. Sistemas expostos à rede ou voltados ao público estão particularmente em risco. Mais orientações e notificações provavelmente serão fornecidas pelos fornecedores conforme os patches forem disponibilizados, juntamente com outras etapas de correção. Embora o CUPS geralmente escute no localhost, o Shodan Report destaca que mais de 75.000 serviços CUPS estão expostos na internet.
  • Danos potenciais: uma vez explorados, os invasores podem obter controle sobre o sistema para executar comandos arbitrários. Dependendo do ambiente, isso pode levar à exfiltração de dados, instalação de ransomware ou outras ações maliciosas. Sistemas conectados a impressoras via WAN correm um risco maior, pois invasores podem explorar isso sem precisar de acesso à rede interna.

Remediações

Conforme destacado por @evilsocket, há diversas recomendações de correção.

  • Desabilite e desinstale o serviço cups-browsed . Por exemplo, veja as recomendações da Red Hat e do Ubuntu.
  • Certifique-se de que seus pacotes CUPS estejam atualizados para as versões mais recentes disponíveis para sua distribuição.
  • Se a atualização não for possível, bloqueie a porta UDP 631 e o tráfego DNS-SD de hosts potencialmente afetados e investigue as recomendações mencionadas acima para reforçar ainda mais a configuração de usuário e grupo lp no host.

Proteções elásticas

Nesta seção, examinaremos consultas de detecção e busca projetadas para descobrir atividades suspeitas vinculadas às vulnerabilidades publicadas atualmente. Ao focar em comportamentos de processos e padrões de execução de comandos, essas consultas ajudam a identificar possíveis tentativas de exploração antes que elas se transformem em ataques completos.

execução do shell cupsd ou foomatic-rip

A primeira regra de detecção tem como alvo processos em sistemas Linux que são gerados por foomatic-rip e iniciam imediatamente um shell. Isso é eficaz porque trabalhos de impressão legítimos raramente exigem execução de shell, tornando esse comportamento um forte indicador de atividade maliciosa. Observação: um shell nem sempre pode ser o objetivo de um adversário se a execução de comandos arbitrários for possível.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and process.parent.name == "foomatic-rip" and
 process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish") 
 and not process.command_line like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Esta consulta conseguiu detectar todas as 33 tentativas de PoC que realizamos:

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_shell_execution.toml

Execução do shell do usuário da impressora (lp)

Esta regra de detecção pressupõe que o usuário da impressora padrão (lp) lida com os processos de impressão. Ao especificar esse usuário, podemos restringir o escopo e, ao mesmo tempo, ampliar a lista de processos pai para incluir cupsd. Embora atualmente não haja nenhuma indicação de que o RCE possa ser explorado por meio de cupsd, não podemos descartar a possibilidade.

process where host.os.type == "linux" and event.type == "start" and
 event.action == "exec" and user.name == "lp" and
 process.parent.name in ("cupsd", "foomatic-rip", "bash", "dash", "sh", 
 "tcsh", "csh", "zsh", "ksh", "fish") and process.name in ("bash", "dash", 
 "sh", "tcsh", "csh", "zsh", "ksh", "fish") and not process.command_line 
 like ("*/tmp/foomatic-*", "*-sDEVICE=ps2write*")

Ao focar no nome de usuário lp, ampliamos o escopo e detectamos, como anteriormente, todas as execuções de PoC 33 :

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_lp_user_execution.toml

Conexão de rede por CUPS foomatic-rip child

Esta regra identifica conexões de rede iniciadas por processos filho de foomatic-rip, o que é um comportamento que levanta suspeitas. Como operações legítimas normalmente não envolvem esses processos estabelecendo conexões de saída, qualquer atividade detectada deve ser examinada de perto. Se tais comunicações forem esperadas em seu ambiente, certifique-se de que os IPs de destino sejam excluídos corretamente para evitar alertas desnecessários.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" 
   and event.action == "exec" and
   process.parent.name == "foomatic-rip" and
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] 
   by process.entity_id
  [network where host.os.type == "linux" and event.type == "start" and 
   event.action == "connection_attempted"] by process.parent.entity_id

Ao capturar o relacionamento pai/filho, garantimos que as conexões de rede se originam do aplicativo potencialmente comprometido.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/command_and_control_cupsd_foomatic_rip_netcon.toml

Criação de arquivo pelo filho CUPS foomatic-rip

Esta regra detecta eventos suspeitos de criação de arquivos iniciados por processos filhos do foomatic-rip. Como todas as provas de conceito atuais têm uma carga de teste padrão de gravação em um arquivo em /tmp/, esta regra detectaria isso. Além disso, ele pode detectar cenários em que um invasor baixa uma carga maliciosa e, posteriormente, cria um arquivo.

sequence by host.id with maxspan=10s
  [process where host.os.type == "linux" and event.type == "start" and 
   event.action == "exec" and process.parent.name == "foomatic-rip" and 
   process.name in ("bash", "dash", "sh", "tcsh", "csh", "zsh", "ksh", "fish")] by process.entity_id
  [file where host.os.type == "linux" and event.type != "deletion" and
   not (process.name == "gs" and file.path like "/tmp/gs_*")] by process.parent.entity_id

A regra exclui /tmp/gs_* para levar em conta o comportamento padrão cupsd , mas para maior segurança, você pode optar por remover essa exclusão, tendo em mente que ela pode gerar mais ruído nos alertas.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_file_creation.toml

Execução suspeita do pai foomatic-rip ou cupsd

Esta regra detecta linhas de comando suspeitas executadas por processos filhos de foomatic-rip e cupsd. Ele se concentra na identificação de atividades potencialmente maliciosas, incluindo mecanismos de persistência, downloads de arquivos, operações de codificação/decodificação, shells reversos e carregamento de objetos compartilhados via GTFOBins.

process where host.os.type == "linux" and event.type == "start" and 
 event.action == "exec" and process.parent.name in 
 ("foomatic-rip", "cupsd") and process.command_line like (
  // persistence
  "*cron*", "*/etc/rc.local*", "*/dev/tcp/*", "*/etc/init.d*", 
  "*/etc/update-motd.d*", "*/etc/sudoers*",
  "*/etc/profile*", "*autostart*", "*/etc/ssh*", "*/home/*/.ssh/*", 
  "*/root/.ssh*", "*~/.ssh/*", "*udev*", "*/etc/shadow*", "*/etc/passwd*",
    // Downloads
  "*curl*", "*wget*",

  // encoding and decoding
  "*base64 *", "*base32 *", "*xxd *", "*openssl*",

  // reverse connections
  "*GS_ARGS=*", "*/dev/tcp*", "*/dev/udp/*", "*import*pty*spawn*", "*import*subprocess*call*", "*TCPSocket.new*",
  "*TCPSocket.open*", "*io.popen*", "*os.execute*", "*fsockopen*", "*disown*", "*nohup*",

  // SO loads
  "*openssl*-engine*.so*", "*cdll.LoadLibrary*.so*", "*ruby*-e**Fiddle.dlopen*.so*", "*Fiddle.dlopen*.so*",
  "*cdll.LoadLibrary*.so*",

  // misc. suspicious command lines
   "*/etc/ld.so*", "*/dev/shm/*", "*/var/tmp*", "*echo*", "*>>*", "*|*"
)

Ao abrir uma exceção nas linhas de comando, como fizemos na regra acima, podemos ampliar o escopo para detectar também o pai cupsd , sem medo de falsos positivos.

https://github.com/elastic/detection-rules/blob/a3e89a7fabe90a6f9ce02b58d5a948db8d231ee5/rules/linux/execution_cupsd_foomatic_rip_suspicious_child_execution.toml

Descoberta de Ataque do Elastic

Além do conteúdo pré-criado publicado, o Attack Discovery da Elastic pode fornecer contexto e insights analisando alertas em seu ambiente e identificando ameaças aproveitando Large Language Models (LLMs). No exemplo a seguir, o Attack Discovery fornece um breve resumo e um cronograma da atividade. Os comportamentos são então mapeados para uma cadeia de ataque para destacar os estágios impactados e ajudar a triar os alertas.

Conclusão

A recente divulgação de vulnerabilidade do CUPS destaca o cenário de ameaças em evolução, ressaltando a importância de proteger serviços como impressão. Com uma pontuação CVSS alta, esse problema exige ação imediata, principalmente considerando a facilidade com que essas falhas podem ser exploradas remotamente. Embora o serviço seja instalado por padrão em alguns sistemas operacionais UNIX (com base na cadeia de suprimentos), a interação manual do usuário é necessária para acionar o trabalho da impressora. Recomendamos que os usuários permaneçam vigilantes, continuem caçando e não subestimem o risco. Embora a ameaça exija interação do usuário, se associada a um documento de spear phishing, ela pode coagir as vítimas a imprimir usando a impressora fraudulenta. Ou pior ainda, substituir silenciosamente as impressoras existentes ou instalar novas, conforme indicado por @evilsocket.

Esperamos que mais seja revelado, pois a divulgação inicial foi rotulada como parte 1. Em última análise, os recursos de visibilidade e detecção permanecem na vanguarda das estratégias defensivas para esses sistemas, garantindo que os invasores não possam explorar vulnerabilidades negligenciadas.

Referências principais

O lançamento e o tempo de amadurecimento de todos os recursos ou funcionalidades descritos neste artigo permanecem a exclusivo critério da Elastic. Os recursos ou funcionalidades não disponíveis no momento poderão não ser entregues ou não chegarem no prazo previsto.

Compartilhe este artigo