Python Library Hijacking

Python Library Hijacking
1 diciembre 2020 Daniel Tapia

Buenas a todos mi nombre es Daniel Tapia y en este artículo voy a explicar como explotar la vulnerabilidad de “Python Library Hijacking”.

¿Qué es?

El método de explotación de “Python Library Hijacking” consiste en suplantar una librería de python, que un binario esté usando para inyectar código de forma que el atacante escale privilegios y/u obtenga un shell en el sistema. Con esta técnica de explotación podríamos obtener una escalada de privilegios tanto lateral como vertical, dependiendo de la situación.

Esta explotación se da, ya que a la hora de ejecutar librerías en python, la búsqueda de estas librerías las hace con un orden. Primero mira en la ruta donde se ha ejecutado el script y luego sigue un orden de rutas concreto. De esta forma si encuentra la librería en la ruta donde se ubica el script no lo comprueba en el resto de ubicaciones. Es aquí donde nosotros como atacantes podemos aprovecharnos de esto.

El procedimiento para la explotación:

  1. Ubicar el programa
  2. Listar los permisos de la ubicación en la que se encuentra
  3. Leer el contenido del programa
  4. Crear un archivo para suplantar una de las librerías del programa
  5. Inyectar el código deseado (setuid,shell,reverseshell…)

¿Como Explotarlo?

A continuación vamos a ver una explotación sencilla con 2 casos, uno de escalado de privilegios lateral y otro vertical.

Reverse Shell con Rshell

Procedimiento para obtener una Reverse Shell mediante Library Hiijacking:

  1. Listamos y vemos el contenido del archivo a explotar:

Tenemos un archivo de backup que invoca a 2 librerias de python. Vamos a suplantar una de ellas.

Creamos un archivo que se llame como la librería que queremos suplantar en el programa (en el mismo directorio que el archivo a explotar) y le ponemos la extension de python.

Creamos “zipfile.py” y añadimos lo siguiente código:

Esto es una simple reverse shell de python con tratamiento de tty. Podemos encotrar más shells escritas en python aquí:

https://github.com/infodox/python-pty-shells/

En este caso por ejemplo, el usuario atalantago, tiene un crontab programado que cada 5 minutos se ejecuta este script de backup. Por lo que cuando lo ejecute recibiremos una shell como ese usuario.

Ponemos nuestro puerto a la escucha y esperamos a que se ejecute el crontab en el usuario:

Ya estaríamos como el usuario atalantago.

Este caso es escalada lateral con una Rshell, pero podríamos generar una shell directamente:

Creamos “zipfile.py” y añadimos lo siguiente código:

En caso de que el usuario tengo algo más de privilegios podríamos settear nuestro ID de usuario en uno concreto, por ejemplo en este caso vamos a ponernos el ID de 0 que es root:

Básicamente esto es la explotación de un library Hiijacking, espero que os haya gustado y nos vemos en otra ocasión. Un saludo!!

-Daniel Tapia-