Skip to content
KitploitKITPLOIT
HerramientasBlog
Enviar
HerramientasBlog
Enviar

¡Herramientas de Hacking, PenTest y Ciberseguridad para tu Arsenal de Seguridad!

Kitploit es un directorio de herramientas de hacking, ciberseguridad y pentesting. Descubre las últimas actualizaciones de proyectos para encontrar vulnerabilidades, analizar sistemas, automatizar pruebas y fortalecer tu seguridad.

··Feeds·Contacto·Privacidad·© 2026 Kitploit

Directorio de Herramientas

Categorías

Ver todas las categorías
Loading categories
CVE-2026-41651 — Escalada local de privilegios mediante una condición de carrera TOCTOU en el de PackageKit. | Kitploit
Herramientas/GitHubGitHub/gbuyssens/cve-2026-41651
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónCTFPruebas de Penetración
GitHubgbuyssens/cve-2026-41651

CVE-2026-41651

Escalada local de privilegios mediante una condición de carrera TOCTOU en el de PackageKit.

Ver Repositorio
hace 18 díasAún no revisado

Más Populares

Ver todos →

Descubre las herramientas más usadas por nuestra comunidad.

Explora todas las herramientas

Explora nuestra colección de herramientas

Ver todas las herramientas →
Compartir

CVE-2026-41651

root@kitploit:~
CVSS 3.x : 7.8 HIGH
CWE      : CWE-367 (Time-of-Check Time-of-Use)
Fix      : PackageKit 1.3.5+
Affects  : PackageKit 1.0.2 – 1.3.4

Escalada local de privilegios mediante una condición de carrera TOCTOU en el manejador de transacciones D-Bus de PackageKit.
Cualquier usuario local sin privilegios puede instalar paquetes arbitrarios como root, sin más autenticación que disponer de una sesión local.

Solo laboratorio / pruebas autorizadas (HTB, CTF, engagement con alcance por escrito).


Uso

root@kitploit:~
python3 exploit.py

Eso es todo. Suelta /tmp/.suid_bash y luego hace exec a una shell root.

Ruta SUID personalizada o tiempo de espera:

root@kitploit:~
SUID_BIN=/dev/shm/.sh TIMEOUT=90 python3 exploit.py

Requisitos

root@kitploit:~
apt install python3-gi dpkg-dev

El exploit construye dos paquetes .deb en tiempo de ejecución; no se necesita compilador.


Causa raíz

Tres fallos en src/pk-transaction.c que se encadenan:

Fallo 1 — Sobrescritura incondicional de flags

InstallFiles() sobrescribe cached_transaction_flags y cached_full_paths sin comprobar el estado. Una segunda llamada D-Bus sobre la misma transacción los reemplaza a ciegas, incluso mientras la transacción ya se está ejecutando.

Fallo 2 — Guardia silenciosa de la máquina de estados

pk_transaction_set_state() rechaza transiciones regresivas ilegales (RUNNING→READY, etc.) sin revertir los flags sobrescritos del Fallo 1. Los flags corruptos persisten.

Fallo 3 — Lectura tardía de flags

pk_transaction_run() lee cached_transaction_flags en el momento del despacho (idle de GLib), no en el momento de la autorización. El backend ve los flags del atacante.

Extra — SIMULATE evita polkit

Establecer PK_TRANSACTION_FLAG_SIMULATE (0x4) omite por completo la comprobación de autorización de polkit. La llamada 1 se autoriza sin interacción del usuario.


Cadena de ataque

root@kitploit:~
Atacante                         packagekitd
   │                                  │
   │  CreateTransaction()             │  state = NEW
   │─────────────────────────────────►│
   │                                  │
   │  InstallFiles(SIMULATE, dummy)   │  polkit omitido (SIMULATE)
   │─────────────────────────────────►│  state = READY, idle encolado
   │                                  │
   │  InstallFiles(NONE, payload)     │  flags + rutas sobrescritos
   │─────────────────────────────────►│  set_state(WAITING_FOR_AUTH) rechazado
   │                                  │  state sigue en READY (FALLO 2)
   │                                  │
   │                      [dispara idle]│
   │                                  │  pk_transaction_run() lee NONE (FALLO 3)
   │                                  │  → dpkg instala el payload como root
   │                                  │  → postinst: chmod +s /tmp/.suid_bash
   │                                  │
   │  execv("/tmp/.suid_bash -p")     │
   │─────────────────────────────────►│  euid=0(root)

Ambas llamadas llegan antes de que dispare el idle de GLib: no hay carrera que ganar, es determinista.


Sistemas afectados

Ubuntu Desktop 18.04–26.04, Debian Trixie, Fedora 43, RockyLinux 10.1 y cualquier distribución que incluya PackageKit 1.0.2–1.3.4 con el daemon activo.


Mitigación

  1. Actualizar a PackageKit 1.3.5+
  2. Enmascarar el servicio si no es posible actualizar: systemctl mask packagekit
  3. El parche añade una guardia de estado: transaction->state != PK_TRANSACTION_STATE_NEW → rechazar

Referencias

  • NVD — CVE-2026-41651
  • GitHub Advisory — GHSA-f55j-vvr9-69xv
  • Commit del parche
Descargar herramienta