Análise do exploit de elevação de privilégios local PwnKit
Kyle Suero
29 de janeiro de 2022
0 minutos de leituraO 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:
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.
