Vulnerabilidade em Python que permite que comandos do sistema sejam chamados a partir de scripts isolados

Foi publicado um método para contornar sistemas isolados de execução de código em Python, baseado no uso de um bug conhecido que apareceu no Python 2.7, foi identificado em 2012 e ainda não foi corrigido no Python 3. O bug permite o uso de links especialmente vinculados Código Python para iniciar o acesso à memória já liberada (Use-After-Free) em Python. Inicialmente, presumiu-se que o erro não representava uma ameaça à segurança e apenas em casos muito raros, geralmente criados artificialmente, poderia levar ao encerramento anormal do script.

Um pesquisador de segurança sob o pseudônimo kn32 se interessou pelo problema e conseguiu preparar um exploit funcional que torna possível chamar qualquer comando do sistema sem ter acesso direto a métodos como os.system. A exploração é implementada em Python puro e funciona sem importar bibliotecas externas e sem instalar o manipulador “code.__new__”. Dos ganchos, apenas “builtin.__id__” é usado, o que geralmente não é proibido. Do lado prático, o código proposto pode ser usado para contornar mecanismos de isolamento em vários serviços e ambientes (por exemplo, em ambientes de aprendizagem, shells online, manipuladores integrados, etc.), que permitem a execução de código Python, mas limitam o chamadas disponíveis e não permitem métodos de chamada como os.system.

O código proposto é análogo à chamada os.system, que funciona explorando uma vulnerabilidade no CPython. O exploit funciona com todas as versões do Python 3 em sistemas com arquitetura x86-64 e demonstra operação estável no Ubuntu 22.04, mesmo quando os modos de proteção PIE, RELRO e CET estão habilitados. O trabalho se resume a obter informações do código Python sobre o endereço de uma das funções do código executável CPython. Com base neste endereço, são calculados o endereço base do CPython na memória e o endereço da função system() na instância libc carregada na memória. Ao final, uma transição direta para um endereço específico do sistema é iniciada com a substituição do ponteiro do primeiro argumento pela linha “/bin/sh”.

Vulnerabilidade em Python que permite que comandos do sistema sejam chamados a partir de scripts isolados


Fonte: opennet.ru

Adicionar um comentário