Vulnerabilidade en Python que permite chamar comandos do sistema desde scripts illados

Publicouse un método para evitar sistemas de execución de código illados en Python, baseado no uso dun erro coñecido desde hai moito tempo que apareceu en Python 2.7, que se identificou en 2012 e que aínda non foi corrixido en Python 3. O erro permite utilizar conexións especialmente vinculadas. Código de Python para iniciar o acceso á memoria xa liberada (Use-After-Free) en Python. Inicialmente, supoñíase que o erro non representaba unha ameaza para a seguridade e só en casos moi raros, xeralmente creados artificialmente, podía levar a unha terminación anormal do script.

Un investigador de seguridade baixo o pseudónimo kn32 interesouse polo problema e conseguiu preparar un exploit de traballo que permite chamar a calquera comando do sistema sen ter acceso directo a métodos como os.system. O exploit está implementado en Python puro e funciona sen importar bibliotecas externas e sen instalar o controlador "code.__new__". Dos ganchos só se utiliza “builtin.__id__”, que normalmente non está prohibido. No lado práctico, o código proposto pódese usar para evitar mecanismos de illamento en diversos servizos e contornos (por exemplo, en contornos de aprendizaxe, shells en liña, controladores integrados, etc.), que permiten a execución de código Python, pero limitan o chamadas dispoñibles e non permiten métodos de chamada como os.system.

O código proposto é un análogo da chamada os.system, que funciona explotando unha vulnerabilidade en CPython. O exploit funciona con todas as versións de Python 3 en sistemas con arquitectura x86-64 e demostra un funcionamento estable en Ubuntu 22.04, mesmo cando os modos de protección PIE, RELRO e CET están activados. O traballo consiste en obter información do código Python sobre o enderezo dunha das funcións do código executable CPython. En función deste enderezo, calcúlase o enderezo base de CPython na memoria e o enderezo da función system() na instancia libc cargada na memoria. Ao final, iníciase unha transición directa a un enderezo do sistema específico coa substitución do punteiro do primeiro argumento á liña "/bin/sh".

Vulnerabilidade en Python que permite chamar comandos do sistema desde scripts illados


Fonte: opennet.ru

Engadir un comentario