Vulnerabilitat en Python que permet cridar ordres del sistema des d'scripts de sorra

S'ha publicat un mètode per evitar els sistemes d'execució de codi aïllats a Python, basat en l'ús d'un error conegut des de fa temps que va aparèixer a Python 2.7, es va identificar el 2012 i encara no s'ha corregit a Python 3. L'error permet utilitzar enllaços especials. Codi Python per iniciar una trucada a la memòria ja alliberada (Use-After-Free) a Python. Inicialment, es va suposar que l'error no representava una amenaça per a la seguretat i només en casos molt rars, normalment creats artificialment, podia provocar una terminació anormal de l'script.

Un investigador de seguretat amb el pseudònim kn32 es va interessar pel problema i va aconseguir preparar un exploit de treball que permet cridar qualsevol ordre del sistema sense tenir accés directe a mètodes com os.system. L'explotació s'implementa en Python pur i funciona sense importar biblioteques externes i sense instal·lar el controlador "code.__new__". Dels ganxos, només s'utilitza "builtin.__id__", que normalment no està prohibit. Pel que fa a la pràctica, el codi proposat es pot utilitzar per evitar mecanismes d'aïllament en diversos serveis i entorns (per exemple, en entorns d'aprenentatge, shells en línia, controladors integrats, etc.), que permeten l'execució de codi Python, però limiten la trucades disponibles i no permeten mètodes de trucada com ara os.system.

El codi proposat és un anàleg de la crida os.system, que funciona aprofitant una vulnerabilitat a CPython. L'explotació funciona amb totes les versions de Python 3 en sistemes amb arquitectura x86-64 i demostra un funcionament estable a Ubuntu 22.04, fins i tot quan els modes de protecció PIE, RELRO i CET estan habilitats. El treball consisteix a obtenir informació del codi Python sobre l'adreça d'una de les funcions del codi executable CPython. A partir d'aquesta adreça, es calculen l'adreça base de CPython a la memòria i l'adreça de la funció system() a la instància libc carregada a la memòria. Al final, s'inicia una transició directa a una adreça del sistema específica amb la substitució del punter del primer argument a la línia "/bin/sh".

Vulnerabilitat en Python que permet cridar ordres del sistema des d'scripts de sorra


Font: opennet.ru

Afegeix comentari