← voltar
CVE-2021-3560highsob ataqueCWE-863

CVE-2021-3560

96Vexday Risk Score

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

ssvc Actcvss 7.8epss 22%
da publicação à arma0 dias
Publicada no NVD16 de fev.
1ª PoC27 de jun.
metasploit3 de jun.
CISA KEV+450d
probabilidade de exploração
22%top 3% das CVEs
exploração observada
simCISA + VulnCheck
64 exploit(s) público(s)
Ação exigida pela CISAprazo federal: 2023-06-02

Apply updates per vendor instructions.

Resumo

Falha no polkit (serviço de autorização usado pelo systemd em praticamente toda distribuição Linux moderna) permite que um usuário local sem privilégios engane a checagem de credenciais de uma requisição D-Bus e a faça ser tratada como se tivesse vindo do root. Na prática, um atacante local consegue criar um novo administrador, instalar pacotes ou executar qualquer ação que dependa de autorização polkit — sem precisar de senha, sudo ou qualquer privilégio prévio. O bug ficou sete anos no código antes de ser encontrado, e está confirmado na KEV da CISA com exploração ativa.

Detalhamento técnico

A função polkit_system_bus_name_get_creds_sync() consulta o dbus-daemon para obter uid e pid do processo que fez a requisição, usando o nome único de barramento (algo como ":1.96") que o dbus-daemon atribui e não pode ser forjado. O problema (CWE-863, autorização incorreta, com componente de condição de corrida — CWE-362) aparece quando o processo requisitante se desconecta do dbus-daemon exatamente no instante em que essa função é chamada: o nome de barramento deixa de existir, o dbus-daemon responde com um erro, e a função sinaliza esse erro no parâmetro de saída — mas ainda retorna TRUE em vez de FALSE.

Como a struct AsyncGetBusNameCredsData é zero-inicializada, qualquer código chamador que não verifique explicitamente o parâmetro de erro interpreta uid=0 como resultado válido, ou seja, assume que a requisição partiu do root. Certos caminhos de chamada dentro do polkit foram identificados como vulneráveis a esse padrão de erro ignorado, permitindo que uma chamada de método D-Bus seja processada como se tivesse sido feita pelo usuário root.

O bug foi introduzido no upstream do polkit no commit bfa5036, presente a partir da versão 0.113. No fork usado pela Debian (com esquema de numeração próprio), o commit equivalente é f81d021, presente a partir da versão 0.105-26 — por isso o Debian 10 (buster), que usa 0.105-25, não é afetado, enquanto derivados baseados em Debian unstable, como o Ubuntu 20.04, são.

O atacante não controla dados arbitrários; controla apenas o timing de desconexão do próprio processo cliente D-Bus. Não há corrupção de memória nem manipulação de payload — é puramente uma janela de corrida em código de tratamento de erro.

Como é explorada

A exploração usa apenas ferramentas padrão de linha de comando (bash, kill, dbus-send) e depende de vencer uma corrida: iniciar uma chamada D-Bus para um método privilegiado (como org.freedesktop.Accounts.CreateUser) e matar o processo dbus-send poucos milissegundos depois de iniciado, antes que a resposta normal chegue, mas durante a janela em que o polkit ainda está processando a checagem de credenciais. Isso força o cenário em que a checagem de erro é ignorada e o uid é tratado como 0.

Pré-requisito real: acesso local (shell, mesmo via SSH) sem qualquer privilégio adicional — não exige autenticação polkit, senha ou configuração não padrão. A demonstração pública depende de dois pacotes clientes do polkit estarem presentes (accountsservice e gnome-control-center), comuns em qualquer instalação desktop e instaláveis via gerenciador de pacotes em servidores; eles não são a causa da falha, apenas vetores convenientes para acionar o caminho de código vulnerável. O timing exato de corrida varia por máquina e pode exigir algumas tentativas, mas é trivial de automatizar em script, o que explica a presença de módulo Metasploit e PoC pública amplamente disponível.

O resultado final é escalada de privilégio local completa: criação de um usuário administrador, execução de ações restritas ao root via qualquer daemon que confie no polkit para autorização. A CISA confirma exploração ativa no mundo real (KEV), sem indicar se há relação com campanhas de ransomware.

Versões

Afetadas
polkit upstream a partir da versão 0.113 (bug introduzido no commit bfa5036) até antes da 0.119. No fork usado pela Debian/Ubuntu, a partir da versão 0.105-26 (commit f81d021). RHEL 7 e Fedora 20 ou anteriores não são afetados; RHEL 8, Fedora 21+, Ubuntu 20.04 e Debian testing (bullseye) são afetados; Debian 10 (buster, versão 0.105-25) não é afetado.
Corrigidas em
polkit 0.119 (upstream). Red Hat corrigiu via RHSA-2021:2236 (RHEL 8.1 EUS), RHSA-2021:2237 (RHEL 8.2 EUS) e RHSA-2021:2238 (RHEL 8), além de RHSA-2021:2522 (Red Hat Virtualization 4 para RHEL 8) e RHSA-2021:2555 (OpenShift Container Platform 4.7). Demais distribuições publicaram backports próprios nos respectivos pacotes polkit.

Como se proteger

A correção definitiva é atualizar o polkit para a versão 0.119 ou posterior (upstream) ou para o pacote da distribuição que incorpore o patch equivalente — a Red Hat lançou correções via RHSA-2021:2236, 2237 e 2238 para RHEL 8, e outras distribuições publicaram builds corrigidos em seus próprios ciclos de update. Não há uma flag de configuração ou parâmetro de runtime que neutralize a falha: o problema está na lógica de verificação de erro dentro do próprio binário do polkit, então só o binário corrigido resolve.

Se a atualização não for possível de imediato, não existe mitigação de configuração equivalente e confiável — restringir acesso local (impedir shells de usuários não confiáveis) reduz a superfície, mas não neutraliza o vetor para qualquer usuário que já tenha acesso interativo, que é justamente o cenário-alvo da falha. Monitorar CVE-2021-3560 como item de priorização máxima em ambientes multiusuário é mais realista do que buscar um paliativo técnico.

Mito a descartar: como a exploração usa apenas dbus-send e não abre porta de rede nem exige tráfego externo, WAFs e controles de borda não têm qualquer efeito. É falha estritamente local, ligada ao binário do polkit em execução no host.

Como detectar

A exploração não deixa payload de rede nem string de ataque óbvia em log de aplicação — é uma corrida de timing em chamadas D-Bus locais. Um sinal possível é volume anômalo de chamadas D-Bus a métodos sensíveis (como org.freedesktop.Accounts.CreateUser) originadas por processos dbus-send de curta duração, encerrados abruptamente (SIGKILL/SIGTERM) poucos milissegundos após o início, especialmente em sequência repetida vinda do mesmo usuário local sem privilégio — padrão consistente com tentativas de acertar a janela de corrida. Não há assinatura confiável de rede porque todo o vetor é local; a detecção depende de auditoria de processos e do barramento D-Bus (auditd, log do próprio dbus-daemon) e da correlação de novas contas administrativas criadas sem passar por fluxo normal de autenticação polkit.

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.
It was found that polkit could be tricked into bypassing the credential checks for D-Bus requests, elevating the privileges of the requestor to the root user. This flaw could be used by an unprivileged local attacker to, for example, create a new local administrator. The highest threat from this vulnerability is to data confidentiality and integrity as well as system availability.
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 encontradas64 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/50011githubgithub.com/Almorabea/Polkit-exploit126githubgithub.com/secnigma/CVE-2021-3560-Polkit-Privilege-Esclation124githubgithub.com/RicterZ/CVE-2021-3560-Authentication-Agent116githubgithub.com/swapravo/polkadots82githubgithub.com/hakivvi/CVE-2021-356040githubgithub.com/winmin/CVE-2021-356025githubgithub.com/AssassinUKG/Polkit-CVE-2021-356024githubgithub.com/UNICORDev/exploit-CVE-2021-356012githubgithub.com/0dayNinja/CVE-2021-35609githubgithub.com/chenaotian/CVE-2021-35609githubgithub.com/aancw/polkit-auto-exploit5githubgithub.com/BizarreLove/CVE-2021-35602githubgithub.com/cpu0x00/CVE-2021-35602githubgithub.com/LucasPDiniz/CVE-2021-35602githubgithub.com/Kyyomaa/CVE-2021-3560-EXPLOIT2githubgithub.com/iSTAR-Lab/CVE-2021-3560_PoC0githubgithub.com/curtishoughton/CVE-2021-35600githubgithub.com/titusG85/SideWinder-Exploit0githubgithub.com/MandipJoshi/CVE-2021-35600githubgithub.com/Antoine-MANTIS/POC-Bash-CVE-2021-35600githubgithub.com/SeimuPVE/CVE-2021-3560_Polkit0githubgithub.com/yutasato88/CVE-2021-3560-PolkitPrivilegeEsclation0githubgithub.com/asepsaepdin/CVE-2021-35600githubgithub.com/Jeanback1/CVE-2021-3560-exploit0githubgithub.com/pashayogi/ROOT-CVE-2021-35600githubgithub.com/TieuLong21Prosper/CVE-2021-35600githubgithub.com/markyu0401/CVE-2021-3560-Polkit-Privilege-Escalation0githubgithub.com/arcslash/exploit_CVE-2021-35600githubgithub.com/adakoifman/CVE-2021-35600githubgithub.com/realatharva15/polkit-CVE-2021-3560_writeup0githubgithub.com/admin-079/CVE-2021-35600cve_referencepacketstormsecurity.com/files/172846/Facebook-Fizz-Denial-Of-Service.htmlnão verificadovulncheckvulncheck.com/xdb/3c3962d97923não verificadovulncheckvulncheck.com/xdb/e8100379c1b0não verificadovulncheckvulncheck.com/xdb/03fa3b5da68dnão verificadovulncheckvulncheck.com/xdb/dd1aeadeb04fnão verificadovulncheckvulncheck.com/xdb/0d4f1d0b0a97não verificadovulncheckvulncheck.com/xdb/5458d4a55c6fnão verificadovulncheckvulncheck.com/xdb/9e693b05320bnão verificadovulncheckvulncheck.com/xdb/4c9042d8ae10não verificadovulncheckvulncheck.com/xdb/201ca3f02f33não verificadovulncheckvulncheck.com/xdb/b9903bce0f77não verificadovulncheckvulncheck.com/xdb/b9083d54f435não verificadovulncheckvulncheck.com/xdb/ab99d39a10aenão verificadovulncheckvulncheck.com/xdb/1a9fd1b14178não verificadovulncheckvulncheck.com/xdb/fe5ce90a026fnão verificadovulncheckvulncheck.com/xdb/d89126ce6bd4não verificadovulncheckvulncheck.com/xdb/635680273494não verificadovulncheckvulncheck.com/xdb/f006252e1faanão verificadovulncheckvulncheck.com/xdb/e55338406838não verificadovulncheckvulncheck.com/xdb/25e4e99ad519não verificadovulncheckvulncheck.com/xdb/e4e946e08867não verificadovulncheckvulncheck.com/xdb/d61c55d40a53não verificadovulncheckvulncheck.com/xdb/eb01bdf5882cnão verificadovulncheckvulncheck.com/xdb/cd90ec71f715não verificadovulncheckvulncheck.com/xdb/bed1611a3e31não verificadovulncheckvulncheck.com/xdb/adc62bb25d2bnão verificadovulncheckvulncheck.com/xdb/1dc3b537ba07não verificadovulncheckvulncheck.com/xdb/3d2f55cb3c32não verificadovulncheckvulncheck.com/xdb/a53e8dee7421não verificadovulncheckvulncheck.com/xdb/c279fbc11487não verificadovulncheckvulncheck.com/xdb/8c1d0543f79dnão verificadocve_referencepacketstormsecurity.com/files/172836/polkit-Authentication-Bypass.htmlnã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.