Condició de carrera al col·lector d'escombraries del nucli de Linux que pot provocar una escalada de privilegis

Jann Horn de l'equip Google Project Zero, que va identificar una vegada les vulnerabilitats Spectre i Meltdown, va publicar una tècnica per explotar una vulnerabilitat (CVE-2021-4083) al col·lector d'escombraries del nucli de Linux. La vulnerabilitat es deu a una condició de carrera quan es neteja els descriptors de fitxers als sòcols Unix i potencialment permet que un usuari local sense privilegis executi el seu codi a nivell del nucli.

El problema és interessant perquè es va estimar que la finestra de temps durant la qual es produeix la condició de carrera era massa petita per crear exploits reals, però l'autor de l'estudi va demostrar que fins i tot aquestes vulnerabilitats inicialment escèptiques poden convertir-se en la font d'atacs reals si el creador de l'explotació té les habilitats i el temps necessaris. Yann Horn va mostrar com, amb l'ajuda de manipulacions de filigranes, es pot reduir la condició de carrera que es produeix quan es crida simultàniament a les funcions close() i fget() a una vulnerabilitat completament explotable d'ús després de lliure i aconseguir l'accés a dades ja alliberades. estructura dins del nucli.

Es produeix una condició de carrera durant el procés de tancament d'un descriptor de fitxer mentre es crida a close() i fget() alhora. La crida a close() es pot produir abans que s'executi fget(), la qual cosa confondrà el col·lector d'escombraries perquè, segons el refcount, l'estructura del fitxer no tindrà referències externes, sinó que romandrà adjunta al descriptor del fitxer, és a dir. El col·lector d'escombraries pensarà que té accés exclusiu a l'estructura, però de fet, durant un curt període de temps, l'entrada restant a la taula descriptor de fitxers encara apuntarà a l'estructura que s'allibera.

Per augmentar la probabilitat d'entrar en una condició de carrera, es van utilitzar diversos trucs, que van permetre augmentar la probabilitat d'èxit de l'explotació al 30% quan s'introduïen optimitzacions específiques del sistema. Per exemple, per augmentar el temps d'accés a una estructura amb descriptors de fitxers en uns quants centenars de nanosegons, les dades es van eliminar de la memòria cau del processador omplint la memòria cau amb activitat en un altre nucli de la CPU, cosa que va permetre recuperar l'estructura de la memòria en lloc de des de la memòria. la memòria cau ràpida de la CPU.

La segona característica important va ser l'ús d'interrupcions generades per un temporitzador de maquinari per augmentar el temps de condició de carrera. Es va seleccionar el moment perquè el gestor d'interrupcions es disparés quan es produís una condició de carrera i interrompés l'execució del codi durant un temps. Per retardar encara més el retorn del control, es van generar unes 50 mil entrades a la cua d'espera mitjançant epoll, que va requerir cercar a través del gestor d'interrupcions.

La tècnica per explotar la vulnerabilitat es va revelar després d'un període de no divulgació de 90 dies. El problema apareix des del nucli 2.6.32 i es va solucionar a principis de desembre. La correcció es va incloure al nucli 5.16 i també es va transferir a les branques LTS del nucli i els paquets del nucli subministrats a les distribucions. Cal destacar que la vulnerabilitat es va identificar durant l'anàlisi d'un problema similar CVE-2021-0920, que es manifesta al col·lector d'escombraries quan es processa la bandera MSG_PEEK.

Font: opennet.ru

Afegeix comentari