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
CVE-2026-41651 — Prova de conceito de exploit para CVE-2026-41651, uma escalada local de privilégios TOCTOU no PackageKit, com análise técnica, lógica de detecção e orientações de remediação. | Kitploit
Ferramentas/GitHubGitHub/baph00met/cve-2026-41651
Escalada de PrivilégiosAnálise de VulnerabilidadesExploraçãoTestes de PenetraçãoRed TeamingLabs e Prática
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

Prova de conceito de exploit para CVE-2026-41651, uma escalada local de privilégios TOCTOU no PackageKit, com análise técnica, lógica de detecção e orientações de remediação.

Ver Repositório
153há 4 mesesAinda não revisado

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

CVE-2026-41651 — PackageKit TOCTOU Escalação Local de Privilégios

Classificação: Artefato de Avaliação Purple Team
Uso autorizado apenas. Este documento e o script de teste que o acompanha destinam-se exclusivamente à validação interna de segurança em sistemas onde foi obtida autorização por escrito.


Prova de Exploração

Prova de exploração


Índice

  1. Visão Geral da Vulnerabilidade
  2. Análise Técnica
  3. Descrição do Script de Teste
    • Comportamento
    • Suporte a Ambientes Reforçados
    • Compatibilidade
  4. Indicadores de Comprometimento
    • Sistema de Arquivos
    • Processo e Execução
    • Atividade D-Bus
    • Padrões de Log de Auditoria
    • Artefatos do Gerenciador de Pacotes
    • Artefatos de Escalação de Privilégios
  5. Lógica de Detecção
  6. Sistemas e Versões Afetados
  7. Remediação
  8. Referências

Visão Geral da Vulnerabilidade

PackageKit é uma camada de abstração D-Bus para gerenciamento de pacotes do sistema, presente por padrão em desktops baseados em GNOME em Debian, Ubuntu, Fedora, RHEL, SUSE e Arch Linux. Como ele media operações privilegiadas de pacotes em nome de usuários sem privilégios, uma falha em seu fluxo de autorização tem impacto de root em todo o sistema.


Análise Técnica

Causa Raiz

pk-transaction.c (pré-1.3.5) não aplicava uma proteção de estado na re-invocação de métodos de ação. Um cliente D-Bus poderia chamar InstallFiles (ou outros métodos de ação) múltiplas vezes no mesmo objeto de transação depois que ele já tivesse saído de PK_TRANSACTION_STATE_NEW.

Cadeia de Ataque

root@kitploit:~
Atacante (sem privilégios)
  │
  ├─① CreateTransaction()          → PackageKit retorna o caminho do objeto da transação (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit enfileira uma verificação de autorização polkit para dummy.pkg.
  │       Nenhuma instalação ocorre ainda — SIMULATE significa apenas teste simulado.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← janela TOCTOU
  │       Re-invoca no mesmo tid antes que a autorização seja resolvida.
  │       Versões vulneráveis sobrescrevem os parâmetros enfileirados com payload.pkg.
  │
  └─④ polkit concede autorização (usuário aprovou ou autorização automática)
          packagekitd instala payload.pkg como root.
          script postinst/post do payload: install -m 4755 /bin/bash /tmp/.suid_bash
          Atacante executa /tmp/.suid_bash -p  →  shell root.

Por Que a Corrida Vence

Os passos ② e ③ são enviados como chamadas D-Bus assíncronas não bloqueantes na mesma conexão e liberados em uma única escrita. As duas mensagens chegam ao packagekitd antes que ele possa processar ② e avançar a máquina de estados, deixando a janela TOCTOU aberta. A correção em 1.3.5 adiciona uma verificação explícita de estado que retorna PK_TRANSACTION_ERROR_INVALID_STATE em qualquer re-invocação após PK_TRANSACTION_STATE_NEW.


Descrição do Script de Teste

Arquivo: cve-2026-41651-purpleteam.py
Linguagem: Python 3
Dependências: python3-gi (introspecção GObject / bindings GLib/Gio)

Propósito

Demonstra a explorabilidade do CVE-2026-41651 em um sistema de teste preparado para os seguintes fins:

  • Validar se a versão instalada do PackageKit é vulnerável
  • Gerar telemetria IOC realista para ajuste de SIEM/EDR
  • Testar a cobertura de detecção antes e depois da aplicação do patch

Comportamento

Suporte a Ambientes Reforçados

Sistemas reforçados por padrão podem bloquear a exploração em dois pontos independentes. O script lida com ambos automaticamente.

1. umask restritivo (027 / 077)

Um umask herdado pelo processo de 027 ou 077 faz com que mkdir() produza diretórios 750 ou 700. Tanto dpkg-deb quanto rpmbuild precisam percorrer toda a árvore de build — se qualquer diretório for ilegível, o build falha silenciosamente.

Correção aplicada: os.umask(0o022) é chamado na inicialização antes de qualquer arquivo ou diretório ser criado. Além disso, todo diretório e arquivo na árvore de build recebe um chmod explícito imediatamente após a criação (0o755 para diretórios e scripts, 0o644 para arquivos de dados), garantindo as permissões corretas independentemente do umask herdado.

2. Flags de montagem nosuid / noexec em /tmp

FlagEfeito na exploração
nosuidO kernel remove silenciosamente o bit SUID de qualquer arquivo armazenado nesse sistema de arquivos — o bash copiado nunca se torna root
noexecO binário SUID não pode ser executado de forma alguma

Correção aplicada: Na inicialização, _find_suid_dir() lê /proc/mounts e testa diretórios candidatos em ordem de preferência até encontrar um cujo sistema de arquivos não tenha nenhuma das flags definidas. O caminho resolvido é então incorporado ao script pós-instalação do payload e usado para verificação e execução.

Se todos os candidatos estiverem bloqueados, o script sai com um erro claro em vez de falhar silenciosamente.

Compatibilidade

Família de DistribuiçãoFerramenta de PacoteTestado
Debian / Ubuntudpkg-deb✓

Indicadores de Comprometimento

Os IOCs são listados do nível genérico/de infraestrutura até artefatos específicos do script. Detecções baseadas nos indicadores genéricos capturarão este CVE independentemente de qual variante de PoC for usada.

Sistema de Arquivos

Processo e Execução

Atividade D-Bus

Padrões de Log de Auditoria

Habilite com: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
Ou use as regras abaixo em /etc/audit/rules.d/:

root@kitploit:~
# Detecta criação de arquivo SUID em todos os diretórios de descarte candidatos
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/var/tmp -k suid_drop
-a always,exit -F arch=b64 -S chmod,fchmod,fchmodat -F a2&04000 -F dir=/dev/shm -k suid_drop

# Detecta dpkg-deb / rpmbuild por não-root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Detecta execução de bash SUID a partir de qualquer diretório de descarte candidato
-a always,exit -F arch=b64 -S execve -F dir=/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/var/tmp -F uid!=0 -F euid=0 -k priv_esc_drop
-a always,exit -F arch=b64 -S execve -F dir=/dev/shm -F uid!=0 -F euid=0 -k priv_esc_drop

Artefatos do Gerenciador de Pacotes

Artefatos de Escalação de Privilégios


Lógica de Detecção

Pseudo-Regra SIEM (Genérica — cobre todas as variantes do CVE-2026-41651)

root@kitploit:~
(
  event.category == "process"
  AND process.name IN ("dpkg-deb", "rpmbuild")
  AND process.user.id != "0"
  AND NOT process.parent.name IN ("apt", "apt-get", "dpkg", "rpm", "dnf", "yum", "zypper", "mock", "koji")
)
OR
(
  event.category == "file"
  AND file.path LIKE "/tmp/%" OR file.path LIKE "/var/tmp/%" OR file.path LIKE "/dev/shm/%"
  AND file.owner == "root"
  AND (file.mode LIKE "04%")
)
OR
(
  event.category == "process"
  AND process.name == "bash"
  AND process.real_user.id != "0"
  AND process.effective_user.id == "0"
  AND NOT process.parent.name IN ("sudo", "su", "sshd", "login", "pam")
)

Cadeia Comportamental EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd ou argumento corresponde a /tmp, /var/tmp, /dev/shm ou $HOME)
       └─ install / cp / chmod  (destino tem SUID + proprietário root)

Sinalize a cadeia completa. Qualquer etapa individual sozinha pode ser benigna; a relação pai-filho através de packagekitd até um comando que define SUID é de alta fidelidade, independentemente de qual diretório de descarte foi selecionado. Amplie regras baseadas em caminho para cobrir todos os quatro candidatos.


Sistemas e Versões Afetados

Verifique a versão instalada: pkcon backend-details ou packagekit --version
Vulnerável se a versão relatada for ≤ 1.3.4.


Remediação

Principal: Atualize o PackageKit para 1.3.5 ou aplique o backport específico do fornecedor.

root@kitploit:~
# Debian / Ubuntu
apt update && apt install --only-upgrade packagekit

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Mitigações (se a aplicação do patch não for imediatamente possível):


Referências


Gerado: 2026-04-24 | Atualizado: 2026-04-25 | Avaliação Purple Team | Uso Interno Apenas

Baixar ferramenta
CampoValor
ID CVECVE-2026-41651
CWECWE-367 — Condição de Corrida Time-of-check Time-of-use (TOCTOU)
ComponentePackageKit (packagekitd, serviço D-Bus)
AfetadoPackageKit ≤ 1.3.4
Corrigido emPackageKit 1.3.5
ImpactoEscalação Local de Privilégios → root
Vetor de AtaqueLocal / D-Bus (sessão de usuário sem privilégios)
Divulgado2026-04-22 (Deutsche Telekom Red Team)
AvisoGHSA-f55j-vvr9-69xv
Commit da correção76cfb675fb31acc3ad5595d4380bfff56d2a8697
FaseAção
ConfiguraçãoVerifica /proc/mounts para selecionar um diretório de descarte com SUID/exec-capable, define umask(022), aplica chmod explícito em todos os artefatos de build e, em seguida, cria um pacote dummy e um pacote payload em /tmp
ExploraçãoAbre uma conexão D-Bus do sistema, cria uma transação PackageKit e dispara a corrida de duas chamadas
PayloadO script pós-instalação do pacote copia /bin/bash para <drop_dir>/.suid_bash com modo 04755, proprietário root. O diretório de descarte é resolvido em tempo de execução (veja Suporte a Ambientes Reforçados)
EscalaçãoVerifica periodicamente o binário SUID (timeout de 90 s) e, em seguida, executa execl nele com -p para obter um shell root
LimpezaRemove os arquivos temporários .deb/.rpm na saída (sucesso ou falha)
PrioridadeCandidatoReforço típico
1/var/tmpRaramente carrega nosuid/noexec; sobrevive a reinicializações
2/dev/shmtmpfs, geralmente permissivo; limpo na reinicialização
3/tmpFrequentemente reforçado em sistemas CIS/STIG
4$HOMEÚltimo recurso; sempre gravável pelo usuário
RHEL / Fedora
rpmbuild
✓
SUSE / openSUSErpmbuild✓
IOCCaminho / PadrãoNotas
Binário SUID em diretório gravável por todos<drop_dir>/.suid_bash — o diretório de descarte é /var/tmp, /dev/shm, /tmp ou $HOME, dependendo das flags de montagemO script seleciona o primeiro diretório sem nosuid/noexec; amplie as detecções para cobrir todos os quatro candidatos
Arquivo de pacote transitório em /tmp/tmp/*.deb, /tmp/*.rpmCriado por usuário sem privilégios; operações legítimas de pacotes usam /var/cache ou caminhos de download
Árvore de build dpkg/tmp/pkbuild_*, /tmp/build_*Diretórios de preparação para dpkg-deb -b
Árvore rpmbuild em /tmp/tmp/rpmbuild_*Diretórios de preparação para rpmbuild invocado fora de ~/rpmbuild
Script postinst / %post em /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specScripts que copiam ou alteram permissões de binários do sistema são de alta confiança
IOCDetalhe
dpkg-deb iniciado por processo não-root, não-aptO pai é um processo Python/shell do usuário, não apt, dpkg ou unattended-upgrades
rpmbuild iniciado por usuário sem privilégiosSem um pai relacionado a empacotamento (mock, koji, runner de CI), isso é anômalo
packagekitd iniciando /bin/sh ou /bin/bash a partir de caminho em /tmppackagekitd executa scripts postinst; o caminho de origem em /tmp é a anomalia
Processo bash onde UID ≠ EUIDExecução SUID; EUID=0, UID=<atacante>
Invocação bash -pA flag -p habilita o modo privilegiado quando SUID está definido — raramente usado legitimamente
Ancestralidade de processo de curta duração .suid_bashO avô é packagekitd, o pai é o shell do atacante
IOCDetalhe
org.freedesktop.PackageKit.Transaction.InstallFiles chamado duas vezes no mesmo caminho de objetoAmbas as chamadas chegam em milissegundos; clientes legítimos chamam uma vez por transação
FLAG_SIMULATE (4) seguido imediatamente por FLAG_NONE (0) no mesmo tidEsta sequência não tem caso de uso legítimo
Padrão CreateTransaction → duplo InstallFiles rápidoDetectável via monitor D-Bus (dbus-monitor --system) ou regras de auditoria dbus
InstallFiles com um caminho de arquivo sob /tmpInstaladores de pacotes GUI legítimos (GNOME Software, Discover) usam caminhos em $HOME ou /var/cache
IOCDetalhe
Pacote nomeado pk-dummy-* ou pk-payload-* no histórico dpkg/rpmEspecífico do script, mas variantes usarão nomes diferentes
Pacote instalado a partir de arquivo local (/tmp/*.deb ou /tmp/*.rpm)dpkg -l ou rpm -qa --last — procure pacotes sem origem de repositório
Pacote instalado sem changelog / descrição vaziaPacotes criados usam metadados mínimos; dpkg -s <pkg> ou rpm -qi <pkg>
Pacote removido imediatamente após a instalação ou que nunca aparece no banco de dados de pacotesTentativas de exploração falhas podem deixar estado parcial
Entradas de log de transação packagekit para instalações de arquivos locais/var/log/PackageKit/transactions.db ou entradas journald packagekitd
IOCDetalhe
.suid_bash em qualquer diretório de descarte candidatoO caminho de descarte é escolhido em tempo de execução entre /var/tmp, /dev/shm, /tmp, $HOME com base nas flags de montagem — verifique todos os quatro: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Qualquer arquivo de propriedade de root com bit SUID em um diretório gravável pelo usuárioDeve sempre retornar vazio em sistemas limpos
Árvore de processo bash com euid=0 e sem ancestral PAM / sudo / suIndica caminho de execução SUID em vez de transição legítima de privilégios
Concessão polkit para org.freedesktop.packagekit.package-install a usuário não administradorInesperado se o usuário não estiver no grupo sudo / wheel
DistribuiçãoPackageKit PadrãoVulnerávelVersão corrigida disponível
Ubuntu 24.04 LTS1.3.xSimVia apt upgrade
Ubuntu 22.04 LTS1.2.xSimBackport em andamento
Debian 12 (Bookworm)1.2.xSimRastreador de segurança pendente
Fedora 411.3.xSimdnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xSimRHSA pendente
SUSE Linux Enterprise 151.1.xProvávelAviso SUSE pendente
Arch Linux1.3.xSimAUR / pacman atualizado
MitigaçãoComando / ConfiguraçãoRessalva
Desabilitar o serviço PackageKitsystemctl disable --now packagekitdQuebra atualizações GUI do GNOME Software / Discover
Restringir acesso D-BusAdicionar regra deny em /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf para usuários sem privilégiosPode quebrar ferramentas de pacotes legítimas voltadas ao usuário
Reforço polkitDefinir org.freedesktop.packagekit.package-install como auth_admin (exigir senha de administrador sempre)Reduz a conveniência, mas estreita a superfície de ataque
Monitoramento de auditoriaImplantar regras de auditoria da seção Padrões de Log de AuditoriaApenas detetive, não preventivo
RecursoLink
Divulgação OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
Aviso de Segurança GitHubGHSA-f55j-vvr9-69xv
Commit da correçãohttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
Lançamento PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Referência PoC públicahttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
Documentação polkithttps://www.freedesktop.org/software/polkit/docs/latest/