Skip to main content

Análisis del exploit de escalada de privilegios locales PwnKit

Escrito por

Kyle Suero

blog feature security alert purple

29 de enero de 2022

0 minutos de lectura

¿Qué tienen en común las vulnerabilidades de Linux y los desastres naturales? Algo que parece inactivo puede despertarse de repente y dejar al descubierto lo que ocurría bajo la superficie. Hace varios días, un investigador de seguridad publicó una vulnerabilidad de gravedad alta llamada PwnKit, que afecta a la mayoría de las principales distribuciones de Linux. ¿Lo más preocupante? Existe desde mayo de 2009.

Polkit es un componente para controlar privilegios en sistemas operativos similares a Unix y se incluye de forma predeterminada en la mayoría de las principales distribuciones de Linux. El comando pkexec, incluido con Polkit, se usa para ejecutar comandos con privilegios elevados y se ha descrito como el sudo de systemd.

En este caso, la vulnerabilidad de Polkit ya no es una amenaza latente. Este componente común de los sistemas operativos basados en Linux arrastra esta vulnerabilidad desde su creación en 2009. Se utilizó por primera vez en el sistema operativo Fedora y, desde entonces, versiones de este mecanismo de control de políticas se han extendido a varios sistemas operativos.

La vulnerabilidad permite que un atacante que opera como usuario local sin privilegios dañe la memoria mediante un desbordamiento de búfer. Como el equipo de Qualys ha demostrado, este desbordamiento puede explotarse para obtener privilegios completos de root. En 2013, Ryan Mallon reportó esta vulnerabilidad y envió un parche a los responsables de mantenimiento. Mallon no pudo encontrar una forma de explotar la vulnerabilidad y el parche nunca se aplicó.

El origen de este defecto está en el manejo de los argumentos de la línea de comandos. En los programas C de Linux, el primer argumento (argv[0]) suele ser el nombre del ejecutable. Sin embargo, es posible especificar una lista vacía sin el nombre del ejecutable al llamar a la función execve. En esos casos, si el código se basa en que argv[0] siempre existe, puede provocar vulnerabilidades de corrupción de memoria. Este problema subyacente en el manejo de argumentos también existe en otros binarios, pero pkexec es un caso especial porque tiene el bit SUID y un conjunto especial de permisos de archivo que le permite ejecutarse como el propietario original del archivo, y no como el usuario que lo ejecutó.

No entraremos en todos los detalles aquí —ya que están bien documentados en la divulgación original—, pero cuando no se pasan argumentos al comando pkexec, la lista de argumentos queda vacía y se corrompe la memoria, lo que permite que los atacantes obtengan privilegios completos de root en el host objetivo.

Aplica parches a tu sistema para protegerte de PwnKit

Los exploits de pwnkit son extremadamente simples y ya están en circulación. Por suerte, los parches estuvieron disponibles muy rápidamente, así que asegúrate de instalar de inmediato todas las actualizaciones del sistema operativo.

Si no puedes instalar las actualizaciones del sistema operativo, una alternativa adecuada es quitar manualmente el bit SUID de pkexec con el comando chmod:

chmod 0755 /usr/bin/pkexec

Este exploit nos recuerda que pueden existir vulnerabilidades graves sin ser detectadas durante mucho tiempo, incluso en aplicaciones de código abierto muy utilizadas cuyo código fuente ha sido revisado por muchas personas durante años.

Mantenerse al día con los parches de seguridad es fundamental para mitigar las amenazas. Si usas contenedores para implementar software, considera implementar imágenes actualizadas que incluyan estos parches del sistema operativo. Si usas Snyk Container, puedes encontrar (y corregir) fácilmente vulnerabilidades como PwnKit en tus contenedores. Snyk te recomendará imágenes base actualizadas que resuelven el problema, o una solución o parche que puedes agregar por tu cuenta.

Seguridad de contenedores centrada en los desarrolladores

Snyk encuentra y corrige automáticamente vulnerabilidades en imágenes de contenedores y cargas de trabajo de Kubernetes.

Sistemas operativos vulnerables

RedHat

  • Red Hat Enterprise Linux 6

  • Red Hat Enterprise Linux 7

  • Red Hat Enterprise Linux 8

  • Red Hat Virtualization 4

Ubuntu:

  • Ubuntu 21.10

  • Ubuntu 20.04

  • Ubuntu 18.04

  • Ubuntu 16.04

  • Ubuntu 14.04

Suse:

  • HPE Helion Openstack 8

  • SUSE CaaS Platform 4.0

  • SUSE Enterprise Storage 6

  • SUSE Enterprise Storage 7

  • SUSE Linux Enterprise High Performance Computing 15

  • SUSE Linux Enterprise Micro 5

  • SUSE Linux Enterprise Module for Basesystem 15

  • SUSE Linux Enterprise Server 12

  • SUSE Linux Enterprise Server 15

  • SUSE Linux Enterprise Server for SAP Applications 12

  • SUSE Linux Enterprise Server for SAP Applications 15

  • SUSE Linux Enterprise Software Development Kit 12

  • SUSE Manager Proxy 4

  • SUSE OpenStack Cloud 8

  • SUSE OpenStack Cloud 9

  • SUSE OpenStack Cloud Crowbar 8

  • SUSE OpenStack Cloud Crowbar 9

  • openSUSE Leap 15

Nota: SUSE Linux Enterprise 11 no se ve afectado, ya que usa la generación anterior de PolicyKit-1.

Avisos de seguridad

Leer más

Blog

Los modelos de frontera encontraron las vulnerabilidades. Solo el atacante encontró las cadenas.

El análisis estático encontró las fallas, pero solo las pruebas de ataque en vivo demostraron cómo podían encadenarse para provocar brechas. Una comparación de Evo COS, Claude Security y Claude Code Security.

feature insights context
Blog

Los ataques autónomos ya están aquí. La defensa debe estar a su altura.

Los atacantes autónomos están reduciendo el tiempo disponible para defenderse. Descubre cómo el descubrimiento, la corrección, la validación y la prevención continuos pueden ayudar a los equipos de seguridad a seguirles el ritmo.

Blog

Evo ADS Govern Agent Behavior ya está disponible: controla el uso de MCP

Evo ADS Govern Agent Behavior ya está disponible, comenzando con MCP Governance. Descubre, aprueba, monitorea, registra y bloquea el uso de servidores MCP en los principales agentes de programación con IA.