Oplysninger om den sjette sårbarhed (1, 2-3, 4, 5) er blevet offentliggjort, hvilket gør det muligt for en ikke-privilegeret lokal bruger at opnå root-rettigheder ved at skrive data i den side-cache. Sårbarheden har kodenavnet PinTheft. Der er tilgængelig en prototype af et exploit. CVE-identifikator er endnu ikke tildelt. En løsning er i øjeblikket kun tilgængelig som en patch, der blev offentliggjort den 5. maj og blev accepteret i netdev-grenen den 11. maj, men ikke inkluderet i de korrigerende udgivelser af kernen.
Sårbarheden er til stede i implementeringen af netværksprotokollen RDS (Reliable Datagram Sockets), der er designet til højhastigheds meddelelser mellem noder i et cluster med minimal forsinkelse og garanteret levering. Angrebet er muligt på systemer med den io_uring subsystem aktiveret (io_uring_disabled=0) og en kerne, der er bygget med indstillingerne CONFIG_RDS, CONFIG_RDS_TCP og CONFIG_IO_URING. For at exploit fungerer, skal der være en læseadgang for en eksekverbar fil med SUID-root flag.
For automatisk at indlæse rds_tcp kerne-modulet anmoder exploit om at sende data via RDS ved brug af transporten SO_RDS_TRANSPORT=2. Det bemærkes, at blandt de testede Linux-distributioner er rds kerne-modulet kun tilgængeligt i Arch Linux med standard konfiguration. For at blokere sårbarheden kan du omgås ved at blokere automatisk indlæsning af rds og rds_tcp kerne-modulerne: rmmod rds_tcp rds printf 'install rds /bin/false\ninstall rds_tcp /bin/false\n' > /etc/modprobe.d/pintheft.conf
Sårbarheden skyldes en fejl i implementeringen af mekanismen for zerocopy i funktionen rds_message_zcopy_from_user(), der udfører direkte ændringer af data i sidecachen for at undgå unødvendig bufferstabling. I tilfælde af en fejl blev feltet rm->data.op_nents ikke ryddet, hvilket førte til en dobbelt frigivelse af bufferen (double-free). Fremkomsten af en ugyldig værdi i reference tælleren kunne udnyttes til at overskrive data i sidecachen ved at manipulere med pointeren til en fast buffer io_uring.
Ellers er mekanismen for udnyttelse typisk for alle sårbarheder i denne klasse - angriberen får et programfil med suid root-flagget til at sætte sig fast i sidecachen, hvorefter han indsætter kode til at starte /usr/bin/sh i ELF-headeren. Efter denne manipulation fører start af programmet til, at den indlæser en ændret kopi fra sidecachen i stedet for den originale eksekverbare fil fra lageret. I modsætning til tidligere exploits er den nye variant tilpasset udelukkende til at angreb på værktøjet 'su', men kan også anvendes, hvis der er sådanne suid-programmer i systemet som mount, passwd, chsh, newgrp, umount og pkexec.
Kilde: opennet.ru
