Una vulnerabilitat PolKit permetia obtenir accés root a la majoria de les distribucions de Linux

fa poc Qualys va donar a conèixer la notícia que ha identificat una vulnerabilitat (CVE-2021-4034) en el component del sistema Polkit (anteriorment PolicyKit), que s'utilitza a les distribucions per permetre que els usuaris sense privilegis realitzin accions que requereixen drets d'accés elevats.

la vulnerabilitat permet que un usuari local sense privilegis elevi els seus privilegis a l'usuari root i obtingueu control total sobre el sistema. El problema té el nom en codi PwnKit i es destaca per produir un exploit funcional que s'executa a la configuració predeterminada a la majoria de les distribucions de Linux.

S'esmenta que el problema existeix a la utilitat pkexec inclosa amb PolKit, que ve amb lindicador darrel SUID i està dissenyada per executar ordres amb els privilegis daltres usuaris dacord amb les regles de PolKit.

A causa del maneig incorrecte dels arguments de la línia d'ordres passats a pkexec, un usuari sense privilegis podria ometre l'autenticació i fer que el seu codi s'executi com a root, independentment de les regles daccés establertes. Per a un atac, no importa quines configuracions i restriccions s'estableixin a PolKit, n'hi ha prou que s'estableixi l'atribut arrel SUID per al fitxer executable amb la utilitat pkexec.

Pkexec no comprova la correcció del recompte d'arguments de la línia d'ordres (argc) passat en iniciar un procés. Els desenvolupadors de pkexec van assumir que la primera entrada a la matriu argv sempre conté el nom del procés (pkexec), i la segona entrada és NULL o el nom de l'ordre executada a través de pkexec.

Atès que el comptador d'arguments no es va comparar amb el contingut real de la matriu i es va suposar que sempre era més gran que 1, si es passava una matriu argv buida al procés, cosa que permet la funció execve de Linux , pkexec tractava a NULL com el primer argument (nom del procés), i el següent després de fora de la memòria del memòria intermèdia, com el següent contingut de la matriu.

El problema és que després de la matriu argv a la memòria hi ha la matriu envp que conté les variables d'entorn. Per tant, amb una matriu argv buida, pkexec extreu les dades sobre l'ordre que s'executa amb privilegis elevats del primer element de la matriu amb variables d'entorn (argv[1] es va tornar idèntic a envp[0]), el contingut del qual pot ser controlat per l'atacant.

Havent rebut el valor argv[1], pkexec intenta determinar la ruta completa al fitxer executable utilitzant les rutes del fitxer a PATH i escriu el punter a la cadena amb la ruta completa de tornada a argv[1], la qual cosa porta a sobreescriure el valor de la primera variable dentorn també, ja que argv[1] és idèntic a envp[0]. En manipular el nom de la primera variable d'entorn, un atacant pot substituir una altra variable d'entorn en pkexec, per exemple, substituir la variable d'entorn «LD_PRELOAD», que no està permesa als programes suid, i disposar que el procés carregui el vostre biblioteca compartida en el procés.

L'exploit de treball utilitza la substitució de variables GCONV_PATH, que s'utilitza per determinar la ruta a la biblioteca de transcodificació de símbols que es carrega dinàmicament quan s'anomena la funció g_printerr(), que utilitza iconv_open() al codi.

En redefinir la ruta a GCONV_PATH, l'atacant pot aconseguir carregar no la biblioteca iconv normal, sinó la seva pròpia biblioteca, els controladors dels quals s'executaran durant el missatge d'error en l'etapa en què pkexec encara s'està executant com a root i abans de la verificació de permisos dinici.

S'observa que, encara que el problema es deu a la corrupció de la memòria, es pot explotar de manera fiable i repetible, independentment de l'arquitectura de maquinari utilitzada.

L'exploit preparat es va provar amb èxit a Ubuntu, Debian, Fedora i CentOS, però també es pot fer servir en altres distribucions. L'exploit original encara no està disponible públicament, cosa que indica que és trivial i altres investigadors poden recrear-ho fàcilment, per la qual cosa és important instal·lar l'actualització de la revisió com més aviat millor en els sistemes multiusuari.

Polkit també està disponible per a sistemes BSD i Solaris, però no s'ha explorat per explotar-lo. El que se sap és que l'atac no es pot fer a OpenBSD, ja que el kernel d'OpenBSD no permet passar un valor argc nul en cridar a execve().

El problema ha estat present des del maig del 2009 quan es va afegir la comanda pkexec. La correcció de la vulnerabilitat a PolKit encara està disponible com a pegat (la versió de correcció no s'ha format), però atès que els desenvolupadors de la distribució van ser notificats amb anticipació sobre el problema, la majoria de les distribucions van publicar una actualització alhora que la divulgació dinformació sobre la vulnerabilitat.

Finalment si estàs interessat en conèixer més a l'respecte, Pots consultar els detalls a el següent enllaç.


Deixa el teu comentari

La seva adreça de correu electrònic no es publicarà. Els camps obligatoris estan marcats amb *

*

*

  1. Responsable de les dades: Miguel Ángel Gatón
  2. Finalitat de les dades: Controlar l'SPAM, gestió de comentaris.
  3. Legitimació: El teu consentiment
  4. Comunicació de les dades: No es comunicaran les dades a tercers excepte per obligació legal.
  5. Emmagatzematge de les dades: Base de dades allotjada en Occentus Networks (UE)
  6. Drets: En qualsevol moment pots limitar, recuperar i esborrar la teva informació.