Qualys je identificirao tri ranjivosti u uslužnom programu needrestart, koji je dizajniran za ponovno pokretanje pozadinskih procesa nakon ažuriranja biblioteka koje koriste. Počevši od Ubuntu 21.04. aprila, uslužni program needrestart je uključen u osnovno okruženje. Ubuntu Server, koji se pokreće s root privilegijama na kraju svake transakcije APT upravitelja paketa, skenira pokrenute procese i ponovo pokreće one povezane s datotekama koje su se promijenile od ažuriranja paketa. Identificirane ranjivosti omogućavaju lokalnom, neprivilegiranom korisniku da dobije root privilegije. Ubuntu Server u zadanoj konfiguraciji.
Ranjivosti su prisutne u needrestart-u od verzije 0.8 (2014) i ispravljene su u needrestart-u 3.8. Problemi su također već ispravljeni u distribucijama. Debian и UbuntuKao zaobilazno rješenje za blokiranje iskorištavanja ranjivosti, skeniranje interpretera može se onemogućiti navođenjem parametra "$nrconf{interpscan} = 0" u konfiguracijskoj datoteci /etc/needrestart/needrestart.conf.
Ranjivosti su prisutne u kodu sa implementacijom moda za određivanje ažuriranja skripti pokrenutih pomoću interpretatora. Utvrđeni problemi:
- CVE-2024-48990 – Lokalni korisnik može postići izvršenje koda sa root pravima stvaranjem uslova za pokretanje Python interpretera sa varijablu okruženja PYTHONPATH koju je postavio napadač. Pored korišćenja Pythona, napad se takođe može izvesti (CVE-2024-48992) pokretanjem Ruby interpretera sa varijablom okruženja RUBYLIB.
Ranjivosti su uzrokovane činjenicom da prilikom ponovnog pokretanja promijenjene skripte, uslužni program needrestart postavlja varijablu okruženja PYTHONPATH na osnovu sadržaja datoteke /proc/pid/environ, koju zatim koristi za pokretanje vlastitog Python koda. Shodno tome, napadač može sačekati aktivnost vezanu za rad APT menadžera paketa, simulirati promjenu u svom skriptu i postaviti varijablu okruženja PYTHONPATH za nju, koja će se također primijeniti kada pokrene Python kod ugrađen u needrestart („import sys \n print(sys.path) ") radi kao root.
Na primjer, da biste iskoristili ranjivost, možete pokrenuti Python proces koji stalno visi u memoriji, postavljajući za njega varijablu okruženja “PYTHONPATH=/home/test” i postavljajući dijeljenu biblioteku “/home/test/importlib/__init__ .so”, koji će se izvršiti prilikom pokretanja privilegovanog Python koda u needrestart.
- CVE-2024-48991 Lokalni korisnik može postići izvršenje koda kao root pokretanjem stanja trke, što uzrokuje potrebu ponovnog pokretanja da pokrene lažni Python interpreter koji je dostavio napadač umjesto sistemskog Python interpretera. Suština ranjivosti je slična gore navedenom problemu, jedina razlika je u tome što needrestart određuje ime Python procesa (na primjer, /usr/bin/python3) čitanjem “/proc/pid/exe”.
Da biste iskoristili ranjivost, možete kreirati proces /home/test/race, koji će, koristeći mehanizam inotify, čekati trenutak kada needrestart počne čitati sadržaj /proc/pid/exe i odmah pokrenuti sistemski Python interpreter kroz funkciju execve. Pošto needrestart ne provjerava da li je to pravi Python, pretpostavit će da je /home/test/race Python interpreter i pokrenut će ga za svoj kod.
- CVE-2024-11003 Lokalni korisnik može postići izvršenje proizvoljnih komandi ljuske kao root uslovljavanjem potrebe za ponovnim pokretanjem za obradu imena datoteka u formatu "command|", prenošenjem kojih Perl open() funkciji će uzrokovati da se naredba izvrši. U stvari, ranjivost se pojavljuje u Perl modulu ScanDeps (CVE-2024-10224), ali je uzrokovana prosljeđivanjem vanjskih parametara ovom modulu bez odgovarajuće provjere.
Napad se može izvesti pokretanjem Perl skripte sa simbolom "|". u nazivu, na primjer, "/home/test/perl|". Tokom izvršavanja funkcije scan_deps() u needrestartu, ova datoteka će se otvoriti kroz funkciju open(), koja će obraditi znak “|”. kao oznaka za pokretanje programa “/home/test/perl” i korištenje izlaznog toka primljenog iz ovog programa.
izvor: opennet.ru
