← voltar
CVE-2021-4034highsob ataqueCWE-787

CVE-2021-4034

100Vexday Risk Score

Corrija agora. Ela está sob exploração confirmada pelo CISA e tem exploit funcional público.

ssvc Actcvss 7.8epss 95%
da publicação à arma0 dias
Publicada no NVD28 de jan.
1ª PoC30 de mar.
metasploit25 de jan.
CISA KEV+150d
probabilidade de exploração
95%top 1% das CVEs
exploração observada
simCISA + VulnCheck
242 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2022-07-18

Apply updates per vendor instructions.

Resumo

PwnKit é uma escalada de privilégio local no pkexec do polkit, o binário setuid-root presente por padrão em praticamente toda distribuição Linux desde 2009. Qualquer usuário sem privilégios com acesso de login ao sistema consegue rodar código como root, sem autenticação e sem depender de política do polkit — é o tipo de CVE 'crítica' que realmente é crítica, porque a pré-condição (login local, mesmo sem senha sudo) é trivial de satisfazer em quase qualquer ambiente multiusuário, container mal isolado ou pós-exploração inicial.

Detalhamento técnico

A falha (CWE relacionado a validação incorreta de entrada / out-of-bounds write, sem CVE de tipo formalmente atribuído pelo fornecedor além da descrição funcional) está na função main() do pkexec. O binário assume que o vetor de argumentos (argv) sempre terá pelo menos um elemento além do nome do executável — ou seja, que argc nunca é zero. Quando um processo é iniciado com argc igual a zero (algo que o kernel Linux permite via execve() com um array de argumentos vazio), pkexec perde a referência ao argumento esperado e passa a ler memória adjacente que, na prática, é ocupada pelo array de variáveis de ambiente (envp).

O efeito prático é que pkexec tenta resolver o 'primeiro argumento' inexistente e acaba tratando conteúdo de envp como se fosse o caminho do comando a executar. Como o atacante controla integralmente as variáveis de ambiente do processo que ele mesmo inicia, ele consegue direcionar essa leitura equivocada para um caminho e payload de sua escolha, combinando isso com manipulação de variáveis como PATH e outras usadas por funções auxiliares de resolução de caminho dentro do pkexec para carregar código arbitrário com privilégios de root.

O commit de correção upstream (gitlab.freedesktop.org/polkit/polkit, hash a2bf5c9c83b6ae46cbd5c779d3055bff81ded683) adiciona a validação explícita de argc antes de qualquer uso do array de argumentos, encerrando a execução se ele estiver vazio.

Como é explorada

O vetor de exploração não passa pela rede: exige execução local de código, ou seja, o atacante precisa já ter uma sessão no sistema (shell de usuário comum, sessão SSH, processo em container com acesso ao binário setuid, etc.). Não há necessidade de o usuário estar em nenhum grupo especial nem de existir uma regra polkit permitindo a ação — a exploração contorna completamente a camada de autorização do polkit, que é justamente o mecanismo que pkexec deveria impor.

A exploração pública (conhecida como PwnKit, divulgada pela Qualys) demonstrou execução confiável e reproduzível em múltiplas distribuições sem necessidade de brute-force ou condições de corrida — a complexidade técnica é baixa uma vez compreendido o mecanismo, e existem PoCs públicas e módulo Metasploit, o que explica o EPSS muito alto (~0,95) e a inclusão no catálogo KEV da CISA com confirmação de exploração ativa em campo.

O resultado final é root completo na máquina: leitura/escrita/execução irrestrita, persistência, movimento lateral a partir do host comprometido. Em ambientes de container, se o pkexec setuid estiver presente na imagem e o kernel/namespace permitir, a escalada pode levar a comprometimento do host dependendo do isolamento configurado.

Versões

Afetadas
Todas as versões de pkexec/polkit desde a introdução do utilitário pkexec em maio de 2009 até a aplicação do patch de correção — ou seja, praticamente todo o histórico do polkit em uso até janeiro de 2022, em qualquer distribuição Linux que instale pkexec como setuid-root por padrão.
Corrigidas em
Corrigido pelo commit upstream a2bf5c9c83b6ae46cbd5c779d3055bff81ded683 no repositório do polkit. Cada distribuição empacotou esse fix separadamente; no caso da Red Hat, os pacotes corrigidos foram distribuídos via RHSA-2022:0265, 0266, 0267, 0268, 0269, 0270, 0271, 0272, 0273 e 0274, cobrindo RHEL 6, 7 e 8 e seus ramos de Extended/Advanced Update Support. Consulte o gerenciador de pacotes da sua distribuição para a versão específica que incorpora o patch.

Como se proteger

A correção definitiva é atualizar o pacote polkit para a versão corrigida pela distribuição, que incorpora o commit a2bf5c9c83b6ae46cbd5c779d3055bff81ded683. Não existe um único número de versão upstream 'limpo' citado de forma consistente nas fontes — cada distribuição lançou seu próprio pacote corrigido (RHEL 6/7/8 via RHSA-2022:0265 até 0274 e correlatas; outras distros com seus próprios avisos). Verifique o changelog do pacote polkit da sua distribuição para confirmar a versão que inclui esse commit.

Se não for possível atualizar imediatamente, a Red Hat publicou um paliativo funcional: remover o bit setuid do pkexec (chmod 0755 /usr/bin/pkexec) impede a execução privilegiada, mas quebra qualquer fluxo legítimo que dependa de pkexec. Alternativamente, a Red Hat documenta um mitigador via SystemTap que intercepta a chamada a main() de pkexec e aborta a execução se não houver argumento de linha de comando — mitigação mais cirúrgica, mas que não funciona em sistemas com Secure Boot habilitado (o módulo do kernel gerado precisaria ser assinado por uma chave confiável) e exige reaplicação após reboot.

Não funciona como mitigação: restringir acesso via política polkit (pklocalauthority/regras), porque a falha ocorre antes de qualquer verificação de autorização ser consultada — a exploração nunca chega a essa camada.

Como detectar

Como a exploração original (execução com argv vazio) não deixa necessariamente entradas de log de autenticação — o pkexec nunca chega a registrar uma tentativa de autorização, já que a falha ocorre antes dessa etapa — o sinal mais confiável é o de nível de processo/kernel: monitorar execve() de /usr/bin/pkexec com argc igual a zero ou com um número anormal de argumentos, e observar spawns subsequentes de shells ou binários incomuns como filhos de pkexec com UID efetivo 0 vindo de um processo pai não privilegiado. Ferramentas de auditoria de syscalls (auditd com regras para execve, EDR com telemetria de linha de comando) que capturem a ausência de argumentos na invocação de pkexec são o indicador mais direto; sem essa instrumentação específica, não há um rastro confiável em logs padrão do sistema (syslog, auth.log) porque o fluxo normal de autorização do polkit simplesmente não é acionado.

Pesquisado e redigido com IA a partir do advisory do fornecedor e de análises públicas, com as fontes acima. Confira sempre a versão corrigida no advisory oficial antes de agir.
A local privilege escalation vulnerability was found on polkit's pkexec utility. The pkexec application is a setuid tool designed to allow unprivileged users to run commands as privileged users according predefined policies. The current version of pkexec doesn't handle the calling parameters count correctly and ends trying to execute environment variables as commands. An attacker can leverage this by crafting environment variables in such a way it'll induce pkexec to execute arbitrary code. When successfully executed the attack can cause a local privilege escalation given unprivileged users administrative rights on the target machine.
CVSS:3.1/AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H
Produtos afetados
n/a · polkit
PoCs públicas encontradas242
exploitdbwww.exploit-db.com/exploits/50689não verificadogithubgithub.com/berdav/CVE-2021-40342044githubgithub.com/ly4k/PwnKit1319githubgithub.com/arthepsy/CVE-2021-40341157githubgithub.com/PwnFunction/CVE-2021-4034351githubgithub.com/dadvlingd/CVE-2021-403420githubgithub.com/chenaotian/CVE-2021-403412githubgithub.com/wudicainiao/cve-2021-403410githubgithub.com/rvzsec/CVE-2021-40348githubgithub.com/Y3A/CVE-2021-40344githubgithub.com/tahaafarooq/poppy4githubgithub.com/artemis-mike/cve-2021-40343githubgithub.com/Nosferatuvjr/PwnKit2githubgithub.com/wechicken456/CVE-2021-4034-CTF-writeup2githubgithub.com/Pixailz/CVE-2021-40342githubgithub.com/jayhutajulu1/PwnKit-CVE-2021-40342githubgithub.com/CYB3RK1D/CVE-2021-4034-POC1githubgithub.com/usmansec/-CVE-2021-40341githubgithub.com/cdxiaodong/CVE-2021-4034-touch1githubgithub.com/trinetra-1308/PwnKit-1githubgithub.com/jscamposx/hack1githubgithub.com/devianntsec/CVE-2021-40341githubgithub.com/jehovah2002/CVE-2021-4034-pwnkit1githubgithub.com/ropydev/CVE-2021-4034-PwnKit1githubgithub.com/dr4xp/pwnkit-helper1githubgithub.com/mutur4/CVE-2021-40341githubgithub.com/xcanwin/CVE-2021-4034-UniontechOS1githubgithub.com/h3x0v3rl0rd/CVE-2021-4034_Python31githubgithub.com/A1vinSmith/CVE-2021-40341githubgithub.com/nagorealbisu/CVE-2021-40340githubgithub.com/igonzalez357/CVE-2021-4034-PwnKit-0githubgithub.com/ikerSandoval003/CVE-2021-40340githubgithub.com/AsierEgana/cve-2021-40340githubgithub.com/Z3R0space/CVE-2021-40340githubgithub.com/Milad-Rafie/PwnKit-Local-Privilege-Escalation-Vulnerability-Discovered-in-polkit-s-pkexec-CVE-2021-40340githubgithub.com/kali-guru/Pwnkit-CVE-2021-40340githubgithub.com/BugVex/Poison-HTB-Report0githubgithub.com/boro03/CVE-2021-40340githubgithub.com/ramahmdr/PwnKit0githubgithub.com/Abbykito/KERNELexploits0githubgithub.com/Allu-mette/cve-2021-40340githubgithub.com/vaibhavkrishna12004/ubuntu-privesc-lab0githubgithub.com/Murguii/DEV-CVE-2021-40340githubgithub.com/B1gN0Se/PwnKit_CVE-2021-40340githubgithub.com/vorkampfer/pwnkit_safety_check0githubgithub.com/Leemyunglyul/cve-2021-4034-mock0githubgithub.com/mac3d0/CVE-2021-4034-pwnkit0githubgithub.com/krleejihyeong/WHS4_CVE-2021-40340githubgithub.com/rusakalimantan/PwnKit-CVE-2021-40340githubgithub.com/galoget/PwnKit-CVE-2021-40340githubgithub.com/ps-interactive/lab_cve-2021-4034-polkit-emulation-and-detection0githubgithub.com/marcosChoucino/CVE-2021-40340githubgithub.com/0x4ndy/CVE-2021-4034-PoC0githubgithub.com/antoinenguyen-09/CVE-2021-40340githubgithub.com/TanmoyG1800/CVE-2021-40340githubgithub.com/CronoX1/CVE-2021-40340githubgithub.com/supportingmx/cve-2021-40340githubgithub.com/HellGateCorp/pwnkit0githubgithub.com/Silencecyber/cve-2021-40340githubgithub.com/Geni0r/cve-2021-4034-poc0githubgithub.com/toecesws/CVE-2021-40340githubgithub.com/fei9747/CVE-2021-40340githubgithub.com/pyhrr0/pwnkit0githubgithub.com/asepsaepdin/CVE-2021-40340githubgithub.com/JohnGilbert57/CVE-2021-4034-Capture-the-flag0githubgithub.com/Part01-Pai/Polkit-Permission-promotion-compiled0githubgithub.com/LucasPDiniz/CVE-2021-40340githubgithub.com/Pol-Ruiz/CVE-2021-40340githubgithub.com/cerodah/CVE-2021-40340githubgithub.com/FancySauce/PwnKit-CVE-2021-40340githubgithub.com/ASG-CASTLE/CVE-2021-40340githubgithub.com/X-Projetion/Exploiting-PwnKit-CVE-2021-4034-0githubgithub.com/evkl1d/CVE-2021-40340githubgithub.com/zxybfq/CVE-2021-40340githubgithub.com/EuJin03/CVE-2021-4034-PoC0githubgithub.com/dh4r4/PwnKit-CVE-2021-4034-0githubgithub.com/12bijaya/CVE-2021-4034-PwnKit-0vulncheckvulncheck.com/xdb/a851d92d0b6fnão verificadovulncheckvulncheck.com/xdb/48147332ce2bnão verificadovulncheckvulncheck.com/xdb/fb7cc0ba1dd7não verificadovulncheckvulncheck.com/xdb/3c5ab90e5a59não verificadovulncheckvulncheck.com/xdb/28f7b014212anão verificadovulncheckvulncheck.com/xdb/554bad753edanão verificadovulncheckvulncheck.com/xdb/8be356a486c4não verificadovulncheckvulncheck.com/xdb/14dd45d27287não verificadovulncheckvulncheck.com/xdb/6d5efc2b7ff9não verificadovulncheckvulncheck.com/xdb/0d3ecb1c75fcnão verificadovulncheckvulncheck.com/xdb/2cf2be7ba166não verificadovulncheckvulncheck.com/xdb/148e1dcef753não verificadovulncheckvulncheck.com/xdb/91cfa39a3866não verificadovulncheckvulncheck.com/xdb/b46d72a94313não verificadovulncheckvulncheck.com/xdb/b7e4df92a4d4não verificadovulncheckvulncheck.com/xdb/ff2419e574a6não verificadovulncheckvulncheck.com/xdb/f591e47123fcnão verificadovulncheckvulncheck.com/xdb/306f7e9e244bnão verificadovulncheckvulncheck.com/xdb/fe47fe6ea534não verificadovulncheckvulncheck.com/xdb/939114e4914enão verificadovulncheckvulncheck.com/xdb/f32860e93f99não verificadovulncheckvulncheck.com/xdb/5580126ba38cnão verificadovulncheckvulncheck.com/xdb/8d29d67ad340não verificadovulncheckvulncheck.com/xdb/398590244678não verificadovulncheckvulncheck.com/xdb/5cbdc401e4c7não verificadovulncheckvulncheck.com/xdb/2fbfcd89b625não verificadovulncheckvulncheck.com/xdb/1f50a9f9474anão verificadovulncheckvulncheck.com/xdb/3bfba57943e6não verificadovulncheckvulncheck.com/xdb/5c1b6088a2b9não verificadovulncheckvulncheck.com/xdb/39d787f93c25não verificadovulncheckvulncheck.com/xdb/a3f4d60ee73dnão verificadovulncheckvulncheck.com/xdb/2da3980b43c5não verificadovulncheckvulncheck.com/xdb/dc9c347e8516não verificadovulncheckvulncheck.com/xdb/15d01c8fd429não verificadovulncheckvulncheck.com/xdb/3fbc89827712não verificadovulncheckvulncheck.com/xdb/84077398cd2fnão verificadovulncheckvulncheck.com/xdb/942f4234ebafnão verificadovulncheckvulncheck.com/xdb/96b10f9f9462não verificadovulncheckvulncheck.com/xdb/443c740547a3não verificadovulncheckvulncheck.com/xdb/5dd88cd8c9e6não verificadovulncheckvulncheck.com/xdb/b56f14805318não verificadovulncheckvulncheck.com/xdb/438507d272fanão verificadovulncheckvulncheck.com/xdb/7b392e48f101não verificadovulncheckvulncheck.com/xdb/dbff6b3f68a2não verificadovulncheckvulncheck.com/xdb/7a12f449c111não verificadovulncheckvulncheck.com/xdb/6aa6d1ff0af5não verificadovulncheckvulncheck.com/xdb/da8065962774não verificadovulncheckvulncheck.com/xdb/df5b9312957bnão verificadovulncheckvulncheck.com/xdb/e22fe812e2c8não verificadovulncheckvulncheck.com/xdb/c615a22c11b5não verificadovulncheckvulncheck.com/xdb/03e0030161c2não verificadovulncheckvulncheck.com/xdb/4e869d74e438não verificadovulncheckvulncheck.com/xdb/af2920365802não verificadovulncheckvulncheck.com/xdb/aeecf13a2fe2não verificadovulncheckvulncheck.com/xdb/f81ade7ce959não verificadovulncheckvulncheck.com/xdb/648c06dea4e8não verificadovulncheckvulncheck.com/xdb/8e64384edb6fnão verificadovulncheckvulncheck.com/xdb/2355bc59a8b4não verificadovulncheckvulncheck.com/xdb/8cbd93d3f54fnão verificadovulncheckvulncheck.com/xdb/4f033f2ca1danão verificadovulncheckvulncheck.com/xdb/0b7b8bfadb64não verificadovulncheckvulncheck.com/xdb/1f98fd3754fanão verificadovulncheckvulncheck.com/xdb/e53709a1c012não verificadovulncheckvulncheck.com/xdb/42cfe42e7d59não verificadovulncheckvulncheck.com/xdb/6b8d0b342171não verificadovulncheckvulncheck.com/xdb/242a109de376não verificadovulncheckvulncheck.com/xdb/f7eb725d575dnão verificadovulncheckvulncheck.com/xdb/a6499a9f0ecenão verificadovulncheckvulncheck.com/xdb/881ce2b1d4e9não verificadovulncheckvulncheck.com/xdb/355c6f6064c4não verificadovulncheckvulncheck.com/xdb/e6b891d3c91fnão verificadovulncheckvulncheck.com/xdb/859bec1aa0fbnão verificadovulncheckvulncheck.com/xdb/608b06d79801não verificadovulncheckvulncheck.com/xdb/0c55a914d370não verificadovulncheckvulncheck.com/xdb/786d142f23c9não verificadovulncheckvulncheck.com/xdb/18d7915df6fcnão verificadovulncheckvulncheck.com/xdb/15ffa52545a3não verificadovulncheckvulncheck.com/xdb/0aeaa9f9cdd7não verificadovulncheckvulncheck.com/xdb/6a50c42e523dnão verificadovulncheckvulncheck.com/xdb/cd1b41fc5cc6não verificadovulncheckvulncheck.com/xdb/156799513645não verificadovulncheckvulncheck.com/xdb/72c137737131não verificadovulncheckvulncheck.com/xdb/b128312ce95fnão verificadocve_referencepacketstormsecurity.com/files/166196/Polkit-pkexec-Local-Privilege-Escalation.htmlnão verificadocve_referencepacketstormsecurity.com/files/166200/Polkit-pkexec-Privilege-Escalation.htmlnão verificadovulncheckvulncheck.com/xdb/21f519b95a66não verificadovulncheckvulncheck.com/xdb/4e85a3145f0bnão verificadovulncheckvulncheck.com/xdb/ca5c3e2fb49fnão verificadovulncheckvulncheck.com/xdb/f79d44984be7não verificadovulncheckvulncheck.com/xdb/29f6b470020fnão verificadovulncheckvulncheck.com/xdb/f0523fed79c3não verificadovulncheckvulncheck.com/xdb/fcffa308ff36não verificadovulncheckvulncheck.com/xdb/bdac5d88146fnão verificadovulncheckvulncheck.com/xdb/17b6417968ebnão verificadovulncheckvulncheck.com/xdb/3e38d35f4014não verificadovulncheckvulncheck.com/xdb/344207902686não verificadovulncheckvulncheck.com/xdb/493568e38cd7não verificadovulncheckvulncheck.com/xdb/2526c4e141f3não verificadovulncheckvulncheck.com/xdb/2d3bdbe3b846não verificadovulncheckvulncheck.com/xdb/75e973a32ca0não verificadovulncheckvulncheck.com/xdb/5a6b21dad53fnão verificadovulncheckvulncheck.com/xdb/ff0ef95d1a40não verificadovulncheckvulncheck.com/xdb/30fcd0d191a3não verificadovulncheckvulncheck.com/xdb/8edd43972ceanão verificadovulncheckvulncheck.com/xdb/7f47a9a77ae8não verificadovulncheckvulncheck.com/xdb/6f2b648a1f3anão verificadovulncheckvulncheck.com/xdb/c12e2f1e8b68não verificadovulncheckvulncheck.com/xdb/c8939ffa9f47não verificadovulncheckvulncheck.com/xdb/3d94e1e3d56fnão verificadovulncheckvulncheck.com/xdb/8aa7e042d851não verificadovulncheckvulncheck.com/xdb/244786f0586anão verificadovulncheckvulncheck.com/xdb/f7eb79323eecnão verificadovulncheckvulncheck.com/xdb/48e01189be2fnão verificadovulncheckvulncheck.com/xdb/fb1c03042f33não verificadovulncheckvulncheck.com/xdb/0dc62d3c155anão verificadovulncheckvulncheck.com/xdb/e60dc3425a52não verificadovulncheckvulncheck.com/xdb/1db24935e067não verificadovulncheckvulncheck.com/xdb/722d83b48dd0não verificadovulncheckvulncheck.com/xdb/0822b980ab59não verificadovulncheckvulncheck.com/xdb/5008ad912a6bnão verificadovulncheckvulncheck.com/xdb/82d76074ec2cnão verificadovulncheckvulncheck.com/xdb/967303c3d942não verificadovulncheckvulncheck.com/xdb/4e83675a9d9bnão verificadovulncheckvulncheck.com/xdb/4d2ae30ede35não verificadovulncheckvulncheck.com/xdb/343ddc1361a9não verificadovulncheckvulncheck.com/xdb/5cdf60043d8cnão verificadovulncheckvulncheck.com/xdb/b80421acd99dnão verificadovulncheckvulncheck.com/xdb/dcb8ccccb4a4não verificadovulncheckvulncheck.com/xdb/cef0cb4ead97não verificadovulncheckvulncheck.com/xdb/d7f5349cf878não verificadovulncheckvulncheck.com/xdb/50a7d45a3497não verificadovulncheckvulncheck.com/xdb/ca1dec61675dnão verificadovulncheckvulncheck.com/xdb/6bec8c0df126não verificadovulncheckvulncheck.com/xdb/63b2573f076fnão verificadovulncheckvulncheck.com/xdb/b006b2fe1bf8não verificadovulncheckvulncheck.com/xdb/901cf6699765não verificadovulncheckvulncheck.com/xdb/273b1f8f417fnão verificadovulncheckvulncheck.com/xdb/3b1f261f3bafnão verificadovulncheckvulncheck.com/xdb/6458cc9b6c90não verificadovulncheckvulncheck.com/xdb/5770e6fe3bf8não verificadovulncheckvulncheck.com/xdb/acfc56af30a1não verificadovulncheckvulncheck.com/xdb/56fa565d9f0dnão verificadovulncheckvulncheck.com/xdb/5cef827064b0não verificadovulncheckvulncheck.com/xdb/ff9f3019c482não verificadovulncheckvulncheck.com/xdb/566964b48b0anão verificadovulncheckvulncheck.com/xdb/de924e14635bnão verificadovulncheckvulncheck.com/xdb/9ba9a40cd868não verificadovulncheckvulncheck.com/xdb/f3c18b402a6enão verificadovulncheckvulncheck.com/xdb/c650576cc1dcnão verificadovulncheckvulncheck.com/xdb/f6773c8e8540não verificadovulncheckvulncheck.com/xdb/5e2e4073e0f1não verificadovulncheckvulncheck.com/xdb/96b7b896707cnão verificadovulncheckvulncheck.com/xdb/fc91e648cdb7não verificadovulncheckvulncheck.com/xdb/ee97190e81dfnão verificadovulncheckvulncheck.com/xdb/48c06988841anão verificadovulncheckvulncheck.com/xdb/a82a11bda873não verificadovulncheckvulncheck.com/xdb/6ccd3614a0e6não verificadovulncheckvulncheck.com/xdb/0d8ebba65e94não verificadovulncheckvulncheck.com/xdb/f02cebe5dcc2não verificadovulncheckvulncheck.com/xdb/a7d202f88e7enão verificadovulncheckvulncheck.com/xdb/0a57ebc4b646não verificadovulncheckvulncheck.com/xdb/0602fa69a56fnão verificadovulncheckvulncheck.com/xdb/57f121c7d9ednão verificadovulncheckvulncheck.com/xdb/04d259e3479dnão verificadovulncheckvulncheck.com/xdb/21e6735149banão verificado
⚠ Recursos públicos, para você avaliar a exposição de sistemas que controla ou está autorizado a testar. Teste apenas com autorização.