Skip to main content

Análise do exploit de elevação de privilégios local PwnKit

Escrito por

Kyle Suero

blog feature security alert purple

29 de janeiro de 2022

0 minutos de leitura

O que vulnerabilidades do Linux e desastres naturais têm em comum? Algo aparentemente adormecido pode entrar em ação de repente, revelando o que acontece sob a superfície. Há alguns dias, um pesquisador de segurança publicou uma vulnerabilidade grave chamada PwnKit, que afeta as principais distribuições Linux. O mais preocupante? Ela existe desde maio de 2009.

Polkit é um componente que controla privilégios em sistemas operacionais do tipo Unix e vem incluído por padrão na maioria das principais distribuições Linux. O comando pkexec, incluído no Polkit, é usado para executar comandos com privilégios elevados e já foi chamado de sudo do systemd.

Neste caso, a vulnerabilidade do Polkit já não é uma ameaça adormecida. Esse componente comum dos sistemas operacionais baseados em Linux apresenta essa vulnerabilidade persistente desde sua criação, em 2009. Usadas pela primeira vez no sistema operacional Fedora, versões desse mecanismo de controle de políticas se difundiram em vários sistemas operacionais desde então.

A vulnerabilidade permite que um invasor, atuando como usuário local sem privilégios, corrompa a memória por meio de um estouro de buffer. Como a equipe da Qualys demonstrou, esse estouro pode ser explorado para obter privilégios completos de root. Em 2013, Ryan Mallon relatou essa vulnerabilidade e enviou uma correção aos responsáveis pela manutenção do projeto. Mallon não conseguiu encontrar uma forma de explorar a vulnerabilidade, e a correção nunca foi aplicada.

A origem dessa falha está no tratamento dos argumentos da linha de comando. Em programas C no Linux, o primeiro argumento (argv[0]) costuma ser o nome do próprio executável. Mas é possível especificar uma lista vazia, sem o nome do executável, chamando a função execve. Nesses casos, se o código presumir que argv[0] sempre existe, isso pode levar a vulnerabilidades de corrupção de memória. Esse problema subjacente no tratamento dos argumentos também existe em outros binários, mas o pkexec é um caso especial, pois é SUID e tem um conjunto especial de permissões de arquivo que permite que ele seja executado como o proprietário original do arquivo, e não como o usuário que o executou.  

Não vamos entrar em todos os detalhes aqui — eles estão bem documentados na divulgação original —, mas, quando nenhum argumento é passado ao comando pkexec, a lista de argumentos fica vazia, causando corrupção de memória e permitindo que invasores obtenham privilégios completos de root no host afetado.

Aplique o patch no seu sistema para se proteger contra o PwnKit

Os exploits do PwnKit são extremamente simples e agora já estão em circulação. Felizmente, os patches foram disponibilizados muito rapidamente. Por isso, instale imediatamente todas as atualizações do sistema operacional!

Se você não conseguir instalar as atualizações do sistema operacional, uma alternativa é remover manualmente o bit SUID do pkexec usando o comando chmod:

chmod 0755 /usr/bin/pkexec

Esse exploit é um bom lembrete de que vulnerabilidades graves podem passar despercebidas por muito tempo, até mesmo em aplicações open source amplamente usadas, cujo código-fonte foi analisado por muitas pessoas durante um longo período.

Manter os patches de segurança em dia é essencial para mitigar ameaças. Se você usa contêineres para implantar software, considere distribuir imagens atualizadas que incluam esses patches do sistema operacional. Se você usa o Snyk Container, pode encontrar e corrigir facilmente vulnerabilidades como o PwnKit nos seus contêineres. A Snyk vai indicar imagens base atualizadas que corrigem o problema ou uma correção ou patch que você mesmo pode adicionar.

Segurança de contêineres que prioriza os desenvolvedores

O Snyk encontra e corrige automaticamente vulnerabilidades em imagens de contêiner e workloads do Kubernetes.

Sistemas operacionais vulneráveis

RedHat

  • Red Hat Enterprise Linux 6

  • Red Hat Enterprise Linux 7

  • Red Hat Enterprise Linux 8

  • Red Hat Virtualization 4

Ubuntu:

  • Ubuntu 21.10

  • Ubuntu 20.04

  • Ubuntu 18.04

  • Ubuntu 16.04

  • Ubuntu 14.04

Suse:

  • HPE Helion Openstack 8

  • SUSE CaaS Platform 4.0

  • SUSE Enterprise Storage 6

  • SUSE Enterprise Storage 7

  • SUSE Linux Enterprise High Performance Computing 15

  • SUSE Linux Enterprise Micro 5

  • SUSE Linux Enterprise Module for Basesystem 15

  • SUSE Linux Enterprise Server 12

  • SUSE Linux Enterprise Server 15

  • SUSE Linux Enterprise Server for SAP Applications 12

  • SUSE Linux Enterprise Server for SAP Applications 15

  • SUSE Linux Enterprise Software Development Kit 12

  • SUSE Manager Proxy 4

  • SUSE OpenStack Cloud 8

  • SUSE OpenStack Cloud 9

  • SUSE OpenStack Cloud Crowbar 8

  • SUSE OpenStack Cloud Crowbar 9

  • openSUSE Leap 15

Observação: O SUSE Linux Enterprise 11 não é afetado, pois usa a geração anterior do PolicyKit-1.

Avisos de segurança