
Análise aprofundada do CVE-2026-41651 (Pack2TheRoot), uma escalada local de privilégios no PackageKit. Inclui detalhamento da vulnerabilidade, cadeia de ataque, IoCs e orientações de mitigação.
Escalação de Privilégio Local no PackageKit (Condição de Corrida TOCTOU)
CVSS v3.1: 8.8 (ALTA) | CWE-367 | Publicado: 2026-04-22
Este repositório reúne um relatório de análise pessoal e materiais de pesquisa sobre a vulnerabilidade de escalação de privilégio local CVE-2026-41651 (Pack2TheRoot) no PackageKit, divulgada em abril de 2026.
| Item | Conteúdo |
|---|---|
| ID CVE | CVE-2026-41651 |
| Nome da vulnerabilidade | Pack2TheRoot |
| Software afetado | PackageKit 1.0.2 ~ 1.3.4 |
| Versão corrigida | PackageKit 1.3.5 |
| Tipo de ataque | Escalação de privilégio local (LPE) |
| Descobridor | Deutsche Telekom Red Team |
Três bugs em pk-transaction.c do PackageKit atuam em conjunto, permitindo que um usuário local sem privilégios obtenha acesso root.
Bug 1: Ao chamar InstallFiles(), cached_transaction_flags é sobrescrito incondicionalmente (Linha 4036)
↓
Bug 2: Ao rejeitar a transição de estado, os flags corrompidos permanecem na memória sem rollback (Linha 876~881)
↓
Bug 3: Ao executar pk_transaction_run(), os flags corrompidos são lidos (Linha 2273~2277)
↓
Resultado: Bypass da autenticação polkit → instalação de pacote arbitrário como root → criação de bash SUID
InstallFiles(SIMULATE=0x4, dummy) → bypass da autenticação polkitInstallFiles(NONE=0x0, payload) → corrupção dos flags (TOCTOU)NOT_AUTHORIZED, a instalação do pacote já foi concluída/tmp/.suid_bash → obtenção de euid=0(root)| Item | Conteúdo |
|---|---|
| Reprodução do PoC | Docker (Ubuntu 24.04.4 LTS) |
| Coleta de IoC | VirtualBox (Ubuntu 22.04.5 LTS, PackageKit 1.2.5) |
| Análise de código | GitHub — commit 2149735 do PackageKit (vulnerável) / 76cfb675 (correção) |
CVE-2026-41651-analysis/
├── README.md
└── CVE-2026-41651_분석보고서.docx # Relatório de análise detalhado
Durante uma tentativa de ataque, os seguintes padrões de log são registrados no sistema.
# Comando de detecção
journalctl -u packagekit | grep -i "assertion\|emitted\|failed"
PackageKit[PID]: pk_backend_job_emit: assertion 'PK_IS_BACKEND_JOB(job)' failed
PackageKit[PID]: g_signal_emit_valist: assertion 'G_TYPE_CHECK_INSTANCE(instance)' failed
PackageKit[PID]: GLib-Object:CRITICAL: g_object_unref: assertion 'G_IS_OBJECT(object)' failed
PackageKit[PID]: backend job failed
PackageKit[PID]: emit transaction failed
PackageKit[PID]: daemon stop ← travamento
PackageKit[PID]: daemon start ← reinício automático
# Detecção de arquivos SUID
find /tmp -perm -4000 -type f 2>/dev/null
# → Se /tmp/.suid_bash existir, resposta imediata é necessária
# Ubuntu / Debian
sudo apt update && sudo apt upgrade packagekit
# RHEL / Fedora
sudo dnf update PackageKit
# Verificação de versão (versões 1.3.4 ou anteriores são vulneráveis)
dpkg -l | grep -i packagekit # Debian/Ubuntu
rpm -qa | grep -i PackageKit # RHEL/Fedora
# Verificação do status do daemon
systemctl status packagekit
# Desativar o PackageKit
sudo systemctl disable --now packagekit
⚠️ Ao desativar, ferramentas GUI de gerenciamento de pacotes, como o GNOME Software, ficarão indisponíveis
Este repositório foi criado para fins de pesquisa e aprendizado em segurança.
A exploração de vulnerabilidades e o acesso não autorizado a sistemas podem resultar em penalidades legais, e todos os testes foram realizados em ambientes isolados de propriedade do autor.
| Data | Conteúdo |
|---|
| 2026-04-08 | Deutsche Telekom Red Team → primeiro relatório à Red Hat/PackageKit |
| 2026-04-10 | Mantenedores do PackageKit recebem e confirmam a reprodução |
| 2026-04-13 | Elaboração do rascunho do patch privado |
| 2026-04-15 | Compartilhamento da vulnerabilidade com a Canonical |
| 2026-04-19 | Notificação privada aos fornecedores de distribuições |
| 2026-04-22 | Lançamento do PackageKit 1.3.5, atribuição do CVE e divulgação pública |