← volver
CVE-2021-3560highbajo ataqueCWE-863

CVE-2021-3560

96Vexday Risk Score

Corrige ahora. Ella está bajo explotación confirmada por CISA y tiene exploit funcional público.

ssvc Actcvss 7.8epss 22%
de la publicación al arma0 días
Publicada en NVD16 feb
1ª PoC27 jun
metasploit3 jun
CISA KEV+450d
probabilidad de explotación
22%top 3% de las CVE
explotación observada
CISA + VulnCheck
64 exploit(s) público(s)
Acción exigida por CISAplazo federal: 2023-06-02

Apply updates per vendor instructions.

Resumen

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.

Detalle 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.

Cómo se explota

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.

Versiones

Afectadas
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.
Corregidas en
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.

Cómo protegerse

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.

Cómo 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.

Investigado y redactado con IA a partir del advisory del fabricante y análisis públicos, con las fuentes citadas. Verifica siempre la versión corregida en el advisory oficial antes de actuar.
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
Productos afectados
n/a · polkit
PoCs públicas encontradas64 VexDay Proof
exploitdbVexDay Proofwww.exploit-db.com/exploits/50011githubgithub.com/Almorabea/Polkit-exploit127githubgithub.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/chenaotian/CVE-2021-35609githubgithub.com/0dayNinja/CVE-2021-35609githubgithub.com/aancw/polkit-auto-exploit5githubgithub.com/cpu0x00/CVE-2021-35602githubgithub.com/BizarreLove/CVE-2021-35602githubgithub.com/Kyyomaa/CVE-2021-3560-EXPLOIT2githubgithub.com/LucasPDiniz/CVE-2021-35602githubgithub.com/adakoifman/CVE-2021-35600githubgithub.com/realatharva15/polkit-CVE-2021-3560_writeup0githubgithub.com/iSTAR-Lab/CVE-2021-3560_PoC0githubgithub.com/curtishoughton/CVE-2021-35600githubgithub.com/admin-079/CVE-2021-35600githubgithub.com/asepsaepdin/CVE-2021-35600githubgithub.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/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/Jeanback1/CVE-2021-3560-exploit0cve_referencepacketstormsecurity.com/files/172836/polkit-Authentication-Bypass.htmlno verificadocve_referencepacketstormsecurity.com/files/172846/Facebook-Fizz-Denial-Of-Service.htmlno verificadovulncheckvulncheck.com/xdb/3c3962d97923no verificadovulncheckvulncheck.com/xdb/e8100379c1b0no verificadovulncheckvulncheck.com/xdb/03fa3b5da68dno verificadovulncheckvulncheck.com/xdb/dd1aeadeb04fno verificadovulncheckvulncheck.com/xdb/0d4f1d0b0a97no verificadovulncheckvulncheck.com/xdb/5458d4a55c6fno verificadovulncheckvulncheck.com/xdb/9e693b05320bno verificadovulncheckvulncheck.com/xdb/4c9042d8ae10no verificadovulncheckvulncheck.com/xdb/201ca3f02f33no verificadovulncheckvulncheck.com/xdb/b9903bce0f77no verificadovulncheckvulncheck.com/xdb/b9083d54f435no verificadovulncheckvulncheck.com/xdb/ab99d39a10aeno verificadovulncheckvulncheck.com/xdb/1a9fd1b14178no verificadovulncheckvulncheck.com/xdb/fe5ce90a026fno verificadovulncheckvulncheck.com/xdb/d89126ce6bd4no verificadovulncheckvulncheck.com/xdb/635680273494no verificadovulncheckvulncheck.com/xdb/f006252e1faano verificadovulncheckvulncheck.com/xdb/e55338406838no verificadovulncheckvulncheck.com/xdb/25e4e99ad519no verificadovulncheckvulncheck.com/xdb/e4e946e08867no verificadovulncheckvulncheck.com/xdb/d61c55d40a53no verificadovulncheckvulncheck.com/xdb/eb01bdf5882cno verificadovulncheckvulncheck.com/xdb/cd90ec71f715no verificadovulncheckvulncheck.com/xdb/bed1611a3e31no verificadovulncheckvulncheck.com/xdb/adc62bb25d2bno verificadovulncheckvulncheck.com/xdb/1dc3b537ba07no verificadovulncheckvulncheck.com/xdb/3d2f55cb3c32no verificadovulncheckvulncheck.com/xdb/a53e8dee7421no verificadovulncheckvulncheck.com/xdb/c279fbc11487no verificadovulncheckvulncheck.com/xdb/8c1d0543f79dno verificado
⚠ Recursos públicos, para evaluar la exposición de sistemas que controlas o estás autorizado a probar. Prueba solo con autorización.