Vulnerabilità in Python che consente di eseguire comandi di sistema da script isolati.

È stato pubblicato un metodo per eludere i sistemi di esecuzione isolata del codice in Python, basato su un bug noto da tempo, emerso in Python 2.7, scoperto nel 2012 e tuttora non risolto in Python 3. Questo bug consente, tramite codice Python appositamente composto, di avviare accessi a memoria già liberata (Use-After-Free) in CPython. Inizialmente si pensava che il bug non costituisse una minaccia per la sicurezza e che potesse provocare un arresto anomalo dello script solo in casi molto rari, solitamente creati ad arte.

Un ricercatore di sicurezza con lo pseudonimo kn32 si è interessato al problema e ha riuscito a preparare un exploit funzionante che consente di invocare qualsiasi comando di sistema, senza avere accesso diretto ai metodi del tipo os.system. L'exploit è realizzato in puro linguaggio Python e funziona senza importare librerie esterne e senza l'installazione di un handler come «code.__new__». Viene utilizzato solo «builtin.__id__» come hook, che di solito non è vietato. Da un punto di vista pratico, il codice proposto può essere utilizzato per eludere i meccanismi di isolamento in vari servizi e ambienti (ad esempio, in ambienti di apprendimento, shell online, handler incorporati, ecc.) che consentono l'esecuzione di codice in Python, ma limitano le chiamate disponibili e non permettono di accedere a metodi come os.system.

Il codice proposto è equivalente a una chiamata a os.system, funzionando tramite l'exploitation di una vulnerabilità in CPython. L'exploit è operativo con tutte le versioni di Python 3 su sistemi con architettura x86-64 e dimostra una stabilità nel funzionamento su Ubuntu 22.04, anche con le modalità di protezione PIE, RELRO e CET attivate. Il funzionamento si basa sull'ottenimento dall codice Python dell'indirizzo di una delle funzioni nel codice eseguibile di CPython. Sulla base di questo indirizzo, viene calcolato l'indirizzo base di CPython nella memoria e l'indirizzo della funzione system() nell'istanza di libc caricata in memoria. Al termine, si avvia il salto diretto a un indirizzo specifico system sostituendo il puntatore del primo argomento con la stringa "\/bin\/sh".

Vulnerabilità in Python che consente di eseguire comandi di sistema da script isolati.


Fonte: opennet.ru
Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server 🔥 Acquista un hosting affidabile per siti web con protezione DDoS, VPS VDS server | ProHoster