← back
CVE-2021-4034highunder attackCWE-787

CVE-2021-4034

100Vexday Risk Score

Patch now. It under exploitation confirmed by CISA and has a working public exploit.

ssvc Actcvss 7.8epss 95%
from disclosure to weapon0 days
Published on NVDJan 28
1st PoCMar 30
metasploitJan 25
CISA KEV+150d
exploitation probability
95%top 1% of all CVEs
observed exploitation
yesCISA + VulnCheck
244 public exploit(s)
Action required by CISAfederal deadline: 2022-07-18

Apply updates per vendor instructions.

Summary

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.

Technical detail

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.

How it’s exploited

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.

Versions

Affected
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.
Fixed in
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.

How to protect

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.

How to detect

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.

Researched and written with AI from the vendor advisory and public analysis, with the sources above. Always confirm the fixed version in the official advisory before acting.
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
Affected products
n/a · polkit
public PoCs found244
exploitdbwww.exploit-db.com/exploits/50689unverifiedgithubgithub.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/Pixailz/CVE-2021-40342githubgithub.com/jayhutajulu1/PwnKit-CVE-2021-40342githubgithub.com/wechicken456/CVE-2021-4034-CTF-writeup2githubgithub.com/ropydev/CVE-2021-4034-PwnKit1githubgithub.com/h3x0v3rl0rd/CVE-2021-4034_Python31githubgithub.com/mutur4/CVE-2021-40341githubgithub.com/cdxiaodong/CVE-2021-4034-touch1githubgithub.com/jscamposx/hack1githubgithub.com/trinetra-1308/PwnKit-1githubgithub.com/dr4xp/pwnkit-helper1githubgithub.com/A1vinSmith/CVE-2021-40341githubgithub.com/xcanwin/CVE-2021-4034-UniontechOS1githubgithub.com/usmansec/-CVE-2021-40341githubgithub.com/devianntsec/CVE-2021-40341githubgithub.com/CYB3RK1D/CVE-2021-4034-POC1githubgithub.com/jehovah2002/CVE-2021-4034-pwnkit1githubgithub.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/a851d92d0b6funverifiedvulncheckvulncheck.com/xdb/48147332ce2bunverifiedvulncheckvulncheck.com/xdb/fb7cc0ba1dd7unverifiedvulncheckvulncheck.com/xdb/3c5ab90e5a59unverifiedvulncheckvulncheck.com/xdb/28f7b014212aunverifiedvulncheckvulncheck.com/xdb/554bad753edaunverifiedvulncheckvulncheck.com/xdb/8be356a486c4unverifiedvulncheckvulncheck.com/xdb/14dd45d27287unverifiedvulncheckvulncheck.com/xdb/6d5efc2b7ff9unverifiedvulncheckvulncheck.com/xdb/0d3ecb1c75fcunverifiedvulncheckvulncheck.com/xdb/2cf2be7ba166unverifiedvulncheckvulncheck.com/xdb/148e1dcef753unverifiedvulncheckvulncheck.com/xdb/91cfa39a3866unverifiedvulncheckvulncheck.com/xdb/b46d72a94313unverifiedvulncheckvulncheck.com/xdb/b7e4df92a4d4unverifiedvulncheckvulncheck.com/xdb/ff2419e574a6unverifiedvulncheckvulncheck.com/xdb/f591e47123fcunverifiedvulncheckvulncheck.com/xdb/306f7e9e244bunverifiedvulncheckvulncheck.com/xdb/fe47fe6ea534unverifiedvulncheckvulncheck.com/xdb/939114e4914eunverifiedvulncheckvulncheck.com/xdb/f32860e93f99unverifiedvulncheckvulncheck.com/xdb/5580126ba38cunverifiedvulncheckvulncheck.com/xdb/8d29d67ad340unverifiedvulncheckvulncheck.com/xdb/398590244678unverifiedvulncheckvulncheck.com/xdb/5cbdc401e4c7unverifiedvulncheckvulncheck.com/xdb/2fbfcd89b625unverifiedvulncheckvulncheck.com/xdb/1f50a9f9474aunverifiedvulncheckvulncheck.com/xdb/3bfba57943e6unverifiedvulncheckvulncheck.com/xdb/5c1b6088a2b9unverifiedvulncheckvulncheck.com/xdb/39d787f93c25unverifiedvulncheckvulncheck.com/xdb/a3f4d60ee73dunverifiedvulncheckvulncheck.com/xdb/2da3980b43c5unverifiedvulncheckvulncheck.com/xdb/dc9c347e8516unverifiedvulncheckvulncheck.com/xdb/15d01c8fd429unverifiedvulncheckvulncheck.com/xdb/3fbc89827712unverifiedvulncheckvulncheck.com/xdb/84077398cd2funverifiedvulncheckvulncheck.com/xdb/942f4234ebafunverifiedvulncheckvulncheck.com/xdb/96b10f9f9462unverifiedvulncheckvulncheck.com/xdb/443c740547a3unverifiedvulncheckvulncheck.com/xdb/5dd88cd8c9e6unverifiedvulncheckvulncheck.com/xdb/b56f14805318unverifiedvulncheckvulncheck.com/xdb/438507d272faunverifiedvulncheckvulncheck.com/xdb/7b392e48f101unverifiedvulncheckvulncheck.com/xdb/dbff6b3f68a2unverifiedvulncheckvulncheck.com/xdb/7a12f449c111unverifiedvulncheckvulncheck.com/xdb/6aa6d1ff0af5unverifiedvulncheckvulncheck.com/xdb/da8065962774unverifiedvulncheckvulncheck.com/xdb/df5b9312957bunverifiedvulncheckvulncheck.com/xdb/e22fe812e2c8unverifiedvulncheckvulncheck.com/xdb/c615a22c11b5unverifiedvulncheckvulncheck.com/xdb/03e0030161c2unverifiedvulncheckvulncheck.com/xdb/4e869d74e438unverifiedvulncheckvulncheck.com/xdb/af2920365802unverifiedvulncheckvulncheck.com/xdb/aeecf13a2fe2unverifiedvulncheckvulncheck.com/xdb/f81ade7ce959unverifiedvulncheckvulncheck.com/xdb/648c06dea4e8unverifiedvulncheckvulncheck.com/xdb/8e64384edb6funverifiedvulncheckvulncheck.com/xdb/2355bc59a8b4unverifiedvulncheckvulncheck.com/xdb/8cbd93d3f54funverifiedvulncheckvulncheck.com/xdb/4f033f2ca1daunverifiedvulncheckvulncheck.com/xdb/f79d44984be7unverifiedvulncheckvulncheck.com/xdb/1f98fd3754faunverifiedvulncheckvulncheck.com/xdb/e53709a1c012unverifiedvulncheckvulncheck.com/xdb/42cfe42e7d59unverifiedvulncheckvulncheck.com/xdb/6b8d0b342171unverifiedvulncheckvulncheck.com/xdb/242a109de376unverifiedvulncheckvulncheck.com/xdb/f7eb725d575dunverifiedvulncheckvulncheck.com/xdb/a6499a9f0eceunverifiedvulncheckvulncheck.com/xdb/881ce2b1d4e9unverifiedvulncheckvulncheck.com/xdb/355c6f6064c4unverifiedvulncheckvulncheck.com/xdb/e6b891d3c91funverifiedvulncheckvulncheck.com/xdb/859bec1aa0fbunverifiedvulncheckvulncheck.com/xdb/608b06d79801unverifiedvulncheckvulncheck.com/xdb/0c55a914d370unverifiedvulncheckvulncheck.com/xdb/786d142f23c9unverifiedvulncheckvulncheck.com/xdb/18d7915df6fcunverifiedvulncheckvulncheck.com/xdb/15ffa52545a3unverifiedvulncheckvulncheck.com/xdb/0aeaa9f9cdd7unverifiedvulncheckvulncheck.com/xdb/6a50c42e523dunverifiedvulncheckvulncheck.com/xdb/cd1b41fc5cc6unverifiedvulncheckvulncheck.com/xdb/156799513645unverifiedvulncheckvulncheck.com/xdb/72c137737131unverifiedvulncheckvulncheck.com/xdb/b128312ce95funverifiedvulncheckvulncheck.com/xdb/2ad678aa1f5dunverifiedvulncheckvulncheck.com/xdb/a90f217d0deeunverifiedcve_referencepacketstormsecurity.com/files/166196/Polkit-pkexec-Local-Privilege-Escalation.htmlunverifiedcve_referencepacketstormsecurity.com/files/166200/Polkit-pkexec-Privilege-Escalation.htmlunverifiedvulncheckvulncheck.com/xdb/21f519b95a66unverifiedvulncheckvulncheck.com/xdb/4e85a3145f0bunverifiedvulncheckvulncheck.com/xdb/ca5c3e2fb49funverifiedvulncheckvulncheck.com/xdb/0b7b8bfadb64unverifiedvulncheckvulncheck.com/xdb/29f6b470020funverifiedvulncheckvulncheck.com/xdb/f0523fed79c3unverifiedvulncheckvulncheck.com/xdb/fcffa308ff36unverifiedvulncheckvulncheck.com/xdb/bdac5d88146funverifiedvulncheckvulncheck.com/xdb/17b6417968ebunverifiedvulncheckvulncheck.com/xdb/3e38d35f4014unverifiedvulncheckvulncheck.com/xdb/344207902686unverifiedvulncheckvulncheck.com/xdb/493568e38cd7unverifiedvulncheckvulncheck.com/xdb/2526c4e141f3unverifiedvulncheckvulncheck.com/xdb/2d3bdbe3b846unverifiedvulncheckvulncheck.com/xdb/75e973a32ca0unverifiedvulncheckvulncheck.com/xdb/5a6b21dad53funverifiedvulncheckvulncheck.com/xdb/ff0ef95d1a40unverifiedvulncheckvulncheck.com/xdb/30fcd0d191a3unverifiedvulncheckvulncheck.com/xdb/8edd43972ceaunverifiedvulncheckvulncheck.com/xdb/7f47a9a77ae8unverifiedvulncheckvulncheck.com/xdb/6f2b648a1f3aunverifiedvulncheckvulncheck.com/xdb/c12e2f1e8b68unverifiedvulncheckvulncheck.com/xdb/c8939ffa9f47unverifiedvulncheckvulncheck.com/xdb/3d94e1e3d56funverifiedvulncheckvulncheck.com/xdb/8aa7e042d851unverifiedvulncheckvulncheck.com/xdb/244786f0586aunverifiedvulncheckvulncheck.com/xdb/f7eb79323eecunverifiedvulncheckvulncheck.com/xdb/48e01189be2funverifiedvulncheckvulncheck.com/xdb/fb1c03042f33unverifiedvulncheckvulncheck.com/xdb/0dc62d3c155aunverifiedvulncheckvulncheck.com/xdb/e60dc3425a52unverifiedvulncheckvulncheck.com/xdb/1db24935e067unverifiedvulncheckvulncheck.com/xdb/722d83b48dd0unverifiedvulncheckvulncheck.com/xdb/0822b980ab59unverifiedvulncheckvulncheck.com/xdb/5008ad912a6bunverifiedvulncheckvulncheck.com/xdb/82d76074ec2cunverifiedvulncheckvulncheck.com/xdb/967303c3d942unverifiedvulncheckvulncheck.com/xdb/4e83675a9d9bunverifiedvulncheckvulncheck.com/xdb/4d2ae30ede35unverifiedvulncheckvulncheck.com/xdb/343ddc1361a9unverifiedvulncheckvulncheck.com/xdb/5cdf60043d8cunverifiedvulncheckvulncheck.com/xdb/b80421acd99dunverifiedvulncheckvulncheck.com/xdb/dcb8ccccb4a4unverifiedvulncheckvulncheck.com/xdb/cef0cb4ead97unverifiedvulncheckvulncheck.com/xdb/d7f5349cf878unverifiedvulncheckvulncheck.com/xdb/50a7d45a3497unverifiedvulncheckvulncheck.com/xdb/ca1dec61675dunverifiedvulncheckvulncheck.com/xdb/6bec8c0df126unverifiedvulncheckvulncheck.com/xdb/63b2573f076funverifiedvulncheckvulncheck.com/xdb/b006b2fe1bf8unverifiedvulncheckvulncheck.com/xdb/901cf6699765unverifiedvulncheckvulncheck.com/xdb/273b1f8f417funverifiedvulncheckvulncheck.com/xdb/3b1f261f3bafunverifiedvulncheckvulncheck.com/xdb/6458cc9b6c90unverifiedvulncheckvulncheck.com/xdb/5770e6fe3bf8unverifiedvulncheckvulncheck.com/xdb/acfc56af30a1unverifiedvulncheckvulncheck.com/xdb/56fa565d9f0dunverifiedvulncheckvulncheck.com/xdb/5cef827064b0unverifiedvulncheckvulncheck.com/xdb/ff9f3019c482unverifiedvulncheckvulncheck.com/xdb/566964b48b0aunverifiedvulncheckvulncheck.com/xdb/de924e14635bunverifiedvulncheckvulncheck.com/xdb/9ba9a40cd868unverifiedvulncheckvulncheck.com/xdb/f3c18b402a6eunverifiedvulncheckvulncheck.com/xdb/c650576cc1dcunverifiedvulncheckvulncheck.com/xdb/f6773c8e8540unverifiedvulncheckvulncheck.com/xdb/5e2e4073e0f1unverifiedvulncheckvulncheck.com/xdb/96b7b896707cunverifiedvulncheckvulncheck.com/xdb/fc91e648cdb7unverifiedvulncheckvulncheck.com/xdb/ee97190e81dfunverifiedvulncheckvulncheck.com/xdb/48c06988841aunverifiedvulncheckvulncheck.com/xdb/a82a11bda873unverifiedvulncheckvulncheck.com/xdb/6ccd3614a0e6unverifiedvulncheckvulncheck.com/xdb/0d8ebba65e94unverifiedvulncheckvulncheck.com/xdb/f02cebe5dcc2unverifiedvulncheckvulncheck.com/xdb/a7d202f88e7eunverifiedvulncheckvulncheck.com/xdb/0a57ebc4b646unverifiedvulncheckvulncheck.com/xdb/0602fa69a56funverifiedvulncheckvulncheck.com/xdb/57f121c7d9edunverifiedvulncheckvulncheck.com/xdb/04d259e3479dunverifiedvulncheckvulncheck.com/xdb/21e6735149baunverified
⚠ Public resources, to assess the exposure of systems you control or are authorized to test. Test only with authorization.