PinTheft – de zesde kwetsbaarheid van de Copy Fail-klasse, die rootrechten in Linux biedt

Informatie over de zesde kwetsbaarheid is onthuld (1, 2-3, 4, 5), waardoor een niet-geprivilegieerde lokale gebruiker root-rechten kan verkrijgen door gegevens in de pagina-cache te overschrijven. De kwetsbaarheid heeft de codenaam PinTheft gekregen. Een exploit-prototyp is beschikbaar. De CVE-identificator is nog niet toegewezen. Een oplossing is voorlopig alleen beschikbaar in de vorm van een patch, die op 5 mei is gepubliceerd en op 11 mei is opgenomen in de netdev-tak, maar nog niet is opgenomen in de corrigerende releases van de kernel.

De kwetsbaarheid is aanwezig in de implementatie van het netwerkprotocol RDS (Reliable Datagram Sockets), dat is bedoeld voor snelle berichtuitwisseling tussen knooppunten in een cluster, met minimale vertraging en gegarandeerde aflevering. Een aanval is mogelijk op systemen met de io_uring-subsystem ingeschakeld (io_uring_disabled=0) en een kernel die is opgebouwd met de opties CONFIG_RDS, CONFIG_RDS_TCP en CONFIG_IO_URING. Voor de werking van de exploit moet er een uitvoerbaar bestand met SUID-root vlag toegankelijk zijn voor lezen in het systeem.

Voor de automatische laadfunctie van de kernelmodule rds_tcp vraagt de exploit om het verzenden van gegevens via RDS met behulp van het transport SO_RDS_TRANSPORT=2. Het wordt opgemerkt dat onder de geteste Linux-distributies de kernelmodule rds alleen beschikbaar is in de standaardconfiguratie van Arch Linux. Om de kwetsbaarheid te blokkeren, kan de automatische laadfunctie van de kernelmodules rds en rds_tcp worden geblokkeerd: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf

De kwetsbaarheid wordt veroorzaakt door een fout in de implementatie van het zerocopy-mechanisme in de functie rds_message_zcopy_from_user(), die directe wijzigingen aanbrengt in de gegevens in de pagina-cache om onnodige buffering te vermijden. In geval van een fout werd het veld rm->data.op_nents niet gewist, wat leidde tot dubbele vrijgave van de buffer (double-free). Het voorkomen van een onjuist waarde in de referentieteller kon worden geëxploiteerd om gegevens in de pagina-cache te overschrijven, dankzij manipulatie met de pointer naar een vaste io_uring-buffer.

In andere opzichten is het exploitatiemechanisme typisch voor alle kwetsbaarheden van deze klasse — de aanvaller zorgt ervoor dat een programma met de suid root-vlag in de paginacache wordt opgeslagen, waarna in de ELF-header code wordt ingevoegd voor het starten van /usr/bin/sh. Na deze manipulatie leidt het starten van het programma tot het laden in het geheugen van geen origineel uitvoerbaar bestand van de opslag, maar van een gewijzigde kopie uit de paginacache. In tegenstelling tot eerdere exploits is de nieuwe variant aangepast voor een aanval op de 'su'-tool, maar kan ook worden toegepast bij de aanwezigheid van dergelijke suid-programma's in het systeem, zoals mount, passwd, chsh, newgrp, umount en pkexec.

Bron: opennet.ru

Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers 🔥 Koop betrouwbare webhosting met bescherming tegen DDoS, VPS VDS servers | ProHoster