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 — Prueba de concepto del exploit para CVE-2026-41651, una escalada de privilegios local TOCTOU en PackageKit, con análisis técnico, lógica de detección y guía de remediación. | Kitploit
Herramientas/GitHubGitHub/baph00met/cve-2026-41651
Escalada de PrivilegiosAnálisis de VulnerabilidadesExplotaciónPruebas de PenetraciónRed TeamingLabs y Práctica
GitHubbaph00met/cve-2026-41651

CVE-2026-41651

Prueba de concepto del exploit para CVE-2026-41651, una escalada de privilegios local TOCTOU en PackageKit, con análisis técnico, lógica de detección y guía de remediación.

Ver Repositorio
153hace 4 mesesAú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 — Escalada de Privilegios Local TOCTOU en PackageKit

Clasificación: Artefacto de Evaluación de Purple Team
Solo uso autorizado. Este documento y el script de prueba adjunto están destinados exclusivamente a la validación de seguridad interna en sistemas donde se haya obtenido autorización por escrito.


Prueba de Explotación

Prueba de explotación


Índice

  1. Resumen de la Vulnerabilidad
  2. Análisis Técnico
  3. Descripción del Script de Prueba
    • Comportamiento
    • Soporte para Entornos Endurecidos
    • Compatibilidad
  4. Indicadores de Compromiso
    • Sistema de Archivos
    • Proceso y Ejecución
    • Actividad D-Bus
    • Patrones de Registro de Auditoría
    • Artefactos del Gestor de Paquetes
    • Artefactos de Escalada de Privilegios
  5. Lógica de Detección
  6. Sistemas y Versiones Afectados
  7. Remediación
  8. Referencias

Resumen de la Vulnerabilidad

PackageKit es una capa de abstracción D-Bus para la gestión de paquetes del sistema, presente por defecto en escritorios basados en GNOME en Debian, Ubuntu, Fedora, RHEL, SUSE y Arch Linux. Debido a que media operaciones privilegiadas de paquetes en nombre de usuarios sin privilegios, una falla en su flujo de autorización tiene impacto de root a nivel de sistema.


Análisis Técnico

Causa Raíz

pk-transaction.c (anterior a 1.3.5) no aplicaba una protección de estado en la re-invocación de métodos de acción. Un cliente D-Bus podía llamar a InstallFiles (u otros métodos de acción) múltiples veces en el mismo objeto de transacción después de que ya había transitado fuera de PK_TRANSACTION_STATE_NEW.

Cadena de Ataque

root@kitploit:~
Atacante (sin privilegios)
  │
  ├─① CreateTransaction()          → PackageKit devuelve la ruta del objeto de transacción (tid)
  │
  ├─② InstallFiles(tid, FLAG_SIMULATE=4, [dummy.pkg])
  │       PackageKit pone en cola una verificación de autorización polkit para dummy.pkg.
  │       Aún no ocurre ninguna instalación — SIMULATE significa solo prueba en seco.
  │
  ├─③ InstallFiles(tid, FLAG_NONE=0, [payload.pkg])   ← ventana TOCTOU
  │       Re-invoca en el mismo tid antes de que se resuelva la autorización.
  │       Las versiones vulnerables sobrescriben los parámetros en cola con payload.pkg.
  │
  └─④ polkit concede la autorización (usuario aprobó o auto-autorizado)
          packagekitd instala payload.pkg como root.
          script postinst/post de payload: install -m 4755 /bin/bash /tmp/.suid_bash
          El atacante ejecuta /tmp/.suid_bash -p  →  shell root.

Por Qué Gana la Carrera

Los pasos ② y ③ se envían como llamadas D-Bus asíncronas no bloqueantes en la misma conexión y se vacían en una sola escritura. Los dos mensajes llegan a packagekitd antes de que pueda procesar ② y avanzar la máquina de estados, dejando abierta la ventana TOCTOU. La corrección en 1.3.5 añade una verificación de estado explícita que devuelve PK_TRANSACTION_ERROR_INVALID_STATE en cualquier re-invocación después de PK_TRANSACTION_STATE_NEW.


Descripción del Script de Prueba

Archivo: cve-2026-41651-purpleteam.py
Lenguaje: Python 3
Dependencias: python3-gi (introspección GObject / enlaces GLib/Gio)

Propósito

Demuestra la explotabilidad de CVE-2026-41651 en un sistema de prueba preparado con los siguientes fines:

  • Validar si la versión instalada de PackageKit es vulnerable
  • Generar telemetría IOC realista para el ajuste de SIEM/EDR
  • Probar la cobertura de detección antes y después del parcheo

Comportamiento

Soporte para Entornos Endurecidos

Los sistemas endurecidos por defecto pueden bloquear la explotación en dos puntos independientes. El script maneja ambos automáticamente.

1. umask restrictivo (027 / 077)

Un umask heredado por el proceso de 027 o 077 hace que mkdir() produzca directorios 750 o 700. Tanto dpkg-deb como rpmbuild deben recorrer todo el árbol de compilación — si algún directorio no es legible, la compilación falla silenciosamente.

Corrección aplicada: os.umask(0o022) se llama al inicio antes de que se cree cualquier archivo o directorio. Además, cada directorio y archivo en el árbol de compilación recibe un chmod explícito inmediatamente después de su creación (0o755 para directorios y scripts, 0o644 para archivos de datos), de modo que los permisos correctos estén garantizados independientemente del umask heredado.

2. Banderas de montaje nosuid / noexec en /tmp

BanderaEfecto en la explotación
nosuidEl kernel elimina silenciosamente el bit SUID de cualquier archivo almacenado en ese sistema de archivos — el bash copiado nunca se convierte en root
noexecEl binario SUID no puede ejecutarse en absoluto

Corrección aplicada: Al inicio, _find_suid_dir() lee /proc/mounts y prueba directorios candidatos en orden de preferencia hasta encontrar uno cuyo sistema de archivos no tenga ninguna de las dos banderas. La ruta resuelta se incorpora al script post-instalación del payload y se usa para el sondeo y la ejecución.

Si todos los candidatos están bloqueados, el script sale con un error claro en lugar de fallar silenciosamente.

Compatibilidad

Familia de DistribucionesHerramienta de PaquetesProbado
Debian / Ubuntudpkg-deb✓

Indicadores de Compromiso

Los IOC se enumeran desde genéricos/nivel de infraestructura hasta artefactos específicos del script. Las detecciones basadas en los indicadores genéricos detectarán este CVE independientemente de qué variante de PoC se use.

Sistema de Archivos

Proceso y Ejecución

Actividad D-Bus

Patrones de Registro de Auditoría

Habilite con: auditctl -a always,exit -F arch=b64 -S all -F path=/usr/bin/packagekitd
O use las reglas siguientes en /etc/audit/rules.d/:

root@kitploit:~
# Detectar creación de archivos SUID en todos los directorios de descarga 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

# Detectar dpkg-deb / rpmbuild por no root
-w /usr/bin/dpkg-deb -p x -k pkg_build_nonroot
-w /usr/bin/rpmbuild -p x -k pkg_build_nonroot

# Detectar ejecución de bash SUID desde cualquier directorio de descarga 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

Artefactos del Gestor de Paquetes

Artefactos de Escalada de Privilegios


Lógica de Detección

Pseudo-Regla SIEM (Genérica — cubre todas las variantes de 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")
)

Cadena de Comportamiento EDR

root@kitploit:~
packagekitd
  └─ sh / bash  (cwd o argumento coincide con /tmp, /var/tmp, /dev/shm o $HOME)
       └─ install / cp / chmod  (objetivo tiene SUID + propietario root)

Marque la cadena completa. Cualquier paso individual por sí solo puede ser benigno; la relación padre-hijo a través de packagekitd hacia un comando que establece SUID es de alta fidelidad independientemente de qué directorio de descarga se haya seleccionado. Amplíe las reglas basadas en rutas para cubrir los cuatro candidatos.


Sistemas y Versiones Afectados

Verifique la versión instalada: pkcon backend-details o packagekit --version
Vulnerable si la versión reportada es ≤ 1.3.4.


Remediación

Principal: Actualice PackageKit a 1.3.5 o aplique el backport específico del proveedor.

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

# Fedora / RHEL
dnf upgrade packagekit

# SUSE
zypper update packagekit

Mitigaciones (si el parcheo no es posible de inmediato):


Referencias


Generado: 2026-04-24 | Actualizado: 2026-04-25 | Evaluación de Purple Team | Solo uso interno

Descargar herramienta
CampoValor
ID CVECVE-2026-41651
CWECWE-367 — Condición de Carrera Time-of-check Time-of-use (TOCTOU)
ComponentePackageKit (packagekitd, servicio D-Bus)
AfectadoPackageKit ≤ 1.3.4
Corregido enPackageKit 1.3.5
ImpactoEscalada de Privilegios Local → root
Vector de AtaqueLocal / D-Bus (sesión de usuario sin privilegios)
Divulgado2026-04-22 (Deutsche Telekom Red Team)
AvisoGHSA-f55j-vvr9-69xv
Commit de corrección76cfb675fb31acc3ad5595d4380bfff56d2a8697
FaseAcción
ConfiguraciónSondea /proc/mounts para seleccionar un directorio de descarga con SUID/capaz de ejecución, establece umask(022), aplica chmod explícito en todos los artefactos de compilación y luego compila un paquete dummy y uno payload en /tmp
ExplotaciónAbre una conexión D-Bus del sistema, crea una transacción PackageKit y dispara la carrera de dos llamadas
PayloadEl script post-instalación del paquete copia /bin/bash a <drop_dir>/.suid_bash con modo 04755, propietario root. El directorio de descarga se resuelve en tiempo de ejecución (ver Soporte para Entornos Endurecidos)
EscaladaSondea el binario SUID (tiempo de espera de 90 s) y luego ejecuta execl en él con -p para obtener un shell root
LimpiezaElimina los archivos temporales .deb/.rpm al salir (éxito o fallo)
PrioridadCandidatoEndurecimiento típico
1/var/tmpRara vez lleva nosuid/noexec; sobrevive reinicios
2/dev/shmtmpfs, generalmente permisivo; se limpia al reiniciar
3/tmpA menudo endurecido en sistemas CIS/STIG
4$HOMEÚltimo recurso; siempre escribible por el usuario
RHEL / Fedorarpmbuild✓
SUSE / openSUSErpmbuild✓
IOCRuta / PatrónNotas
Binario SUID en directorio escribible por todos<drop_dir>/.suid_bash — el directorio de descarga es /var/tmp, /dev/shm, /tmp o $HOME según las banderas de montajeEl script selecciona el primer directorio sin nosuid/noexec; amplíe las detecciones para cubrir los cuatro candidatos
Archivo de paquete transitorio en /tmp/tmp/*.deb, /tmp/*.rpmCompilado por usuario sin privilegios; las operaciones legítimas de paquetes usan /var/cache o rutas de descarga
Árbol de compilación dpkg/tmp/pkbuild_*, /tmp/build_*Directorios de preparación para dpkg-deb -b
Árbol rpmbuild en /tmp/tmp/rpmbuild_*Directorios de preparación para rpmbuild invocado fuera de ~/rpmbuild
Script postinst / %post en /tmp/tmp/*/DEBIAN/postinst, /tmp/*/SPECS/*.specLos scripts que copian o hacen chmod de binarios del sistema son de alta confianza
IOCDetalle
dpkg-deb generado por proceso no root, no aptEl padre es un proceso Python/shell de usuario, no apt, dpkg o unattended-upgrades
rpmbuild generado por usuario sin privilegiosSin un padre relacionado con empaquetado (mock, koji, runner CI) esto es anómalo
packagekitd generando /bin/sh o /bin/bash desde ruta en /tmppackagekitd ejecuta scripts postinst; la ruta de origen en /tmp es la anomalía
Proceso bash donde UID ≠ EUIDEjecución SUID; EUID=0, UID=<atacante>
Invocación bash -pLa bandera -p habilita el modo privilegiado cuando SUID está establecido — rara vez se usa legítimamente
Ancestría de proceso .suid_bash de corta duraciónEl abuelo es packagekitd, el padre es el shell del atacante
IOCDetalle
org.freedesktop.PackageKit.Transaction.InstallFiles llamado dos veces en la misma ruta de objetoAmbas llamadas llegan en milisegundos; los clientes legítimos llaman una vez por transacción
FLAG_SIMULATE (4) seguido inmediatamente por FLAG_NONE (0) en el mismo tidEsta secuencia no tiene caso de uso legítimo
Patrón CreateTransaction → doble InstallFiles rápidoDetectable mediante monitor D-Bus (dbus-monitor --system) o reglas de auditoría dbus
InstallFiles con una ruta de archivo bajo /tmpLos instaladores de paquetes GUI legítimos (GNOME Software, Discover) usan rutas en $HOME o /var/cache
IOCDetalle
Paquete llamado pk-dummy-* o pk-payload-* en el historial de dpkg/rpmEspecífico del script, pero las variantes usarán nombres diferentes
Paquete instalado desde archivo local (/tmp/*.deb o /tmp/*.rpm)dpkg -l o rpm -qa --last — busque paquetes sin origen de repositorio
Paquete instalado sin changelog / descripción vacíaLos paquetes elaborados usan metadatos mínimos; dpkg -s <pkg> o rpm -qi <pkg>
Paquete eliminado inmediatamente después de la instalación o que nunca aparece en la base de datos de paquetesLos intentos de explotación fallidos pueden dejar estado parcial
Entradas del registro de transacciones de packagekit para instalaciones de archivos locales/var/log/PackageKit/transactions.db o entradas de packagekitd en journald
IOCDetalle
.suid_bash en cualquier directorio de descarga candidatoLa ruta de descarga se elige en tiempo de ejecución entre /var/tmp, /dev/shm, /tmp, $HOME según las banderas de montaje — verifique los cuatro: find /var/tmp /dev/shm /tmp $HOME -uid 0 -perm -4000 2>/dev/null
Cualquier archivo propiedad de root con bit SUID en un directorio escribible por el usuarioSiempre debería devolver vacío en sistemas limpios
Árbol de procesos bash con euid=0 y sin ancestro PAM / sudo / suIndica ruta de ejecución SUID en lugar de transición de privilegios legítima
Concesión polkit para org.freedesktop.packagekit.package-install a usuario no administradorInesperado si el usuario no está en el grupo sudo / wheel
DistribuciónPackageKit por defectoVulnerableVersión parcheada disponible
Ubuntu 24.04 LTS1.3.xSíVía apt upgrade
Ubuntu 22.04 LTS1.2.xSíBackport en curso
Debian 12 (Bookworm)1.2.xSíSeguimiento de seguridad pendiente
Fedora 411.3.xSídnf upgrade packagekit
RHEL 9 / CentOS Stream 91.2.xSíRHSA pendiente
SUSE Linux Enterprise 151.1.xProbableAviso SUSE pendiente
Arch Linux1.3.xSíAUR / pacman actualizado
MitigaciónComando / ConfiguraciónAdvertencia
Deshabilitar el servicio PackageKitsystemctl disable --now packagekitdRompe las actualizaciones GUI de GNOME Software / Discover
Restringir acceso D-BusAñadir regla deny en /etc/dbus-1/system.d/org.freedesktop.PackageKit.conf para usuarios sin privilegiosPuede romper herramientas de paquetes legítimas orientadas al usuario
Endurecimiento polkitEstablecer org.freedesktop.packagekit.package-install a auth_admin (requerir siempre contraseña de administrador)Reduce la conveniencia pero estrecha la superficie de ataque
Monitoreo de auditoríaImplementar reglas de auditoría de la sección Patrones de Registro de AuditoríaSolo detective, no preventivo
RecursoEnlace
Divulgación OSS-Securityhttps://www.openwall.com/lists/oss-security/2026/04/22/6
Aviso de Seguridad de GitHubGHSA-f55j-vvr9-69xv
Commit de correcciónhttps://github.com/PackageKit/PackageKit/commit/76cfb675fb31acc3ad5595d4380bfff56d2a8697
Lanzamiento PackageKit 1.3.5https://github.com/PackageKit/PackageKit/releases/tag/v1.3.5
Referencia PoC públicahttps://github.com/CipherCloak/CVE-2026-41651
CWE-367https://cwe.mitre.org/data/definitions/367.html
Documentación de polkithttps://www.freedesktop.org/software/polkit/docs/latest/