Qualys har identificeret tre sårbarheder i needrestart-værktøjet, som er designet til at genstarte baggrundsprocesser efter opdatering af de biblioteker, som dataene bruger. Fra og med Ubuntu 21.04 er needrestart-værktøjet inkluderet i det grundlæggende miljø for Ubuntu Server, hvor det kører med root-rettigheder ved afslutningen af hver transaktion fra APT-pakkehåndteringen. Det scanner kørende processer og genstarter dem, der er relateret til filer, der er ændret efter pakkeopdateringer. De identificerede sårbarheder gør det muligt for en lokal ikke-privilegeret bruger at opnå root-rettigheder i Ubuntu Server med standardkonfigurationen.
Sårbarhederne er til stede i needrestart fra version 0.8 (2014) og er blevet rettet i needrestart-version 3.8. Problemerne er også allerede blevet løst i Debian- og Ubuntu-distributioner. Som en midlertidig løsning for at blokere udnyttelsen af sårbarheden kan man deaktivere scanningen af fortolkere ved at angive parameteren "$nrconf{interpscan} = 0" i konfigurationsfilen \/etc\/needrestart\/needrestart.conf.
Sårbarhederne findes i koden, som implementerer tilstanden for at bestemme opdateringen af scripts, der køres med fortolkere. De identificerede problemer:
- CVE-2024-48990 — en lokal bruger kan opnå eksekvering af kode med root-rettigheder ved at skabe betingelser for at køre Python-fortolkeren med en ondsindet miljøvariabel PYTHONPATH. Ud over at bruge Python kan angrebet også udføres (CVE-2024-48992) ved at starte Ruby-fortolkeren med miljøvariablen RUBYLIB.
Sårbarhederne skyldes, at needrestart-værktøjet sætter miljøvariablen PYTHONPATH baseret på indholdet af filen \/proc\/pid\/environ under genstart af det ændrede script, hvilket også bruges til at køre sin egen Python-kode. Derfor kan en angriber vente på aktivitet relateret til APT-pakkehåndteringen, simulere en ændring af sit script og sætte miljøvariablen PYTHONPATH, som også vil blive anvendt ved kørsel af den indbyggede Python-kode i needrestart ("import sys\n print(sys.path)"), der udføres med root-rettigheder.
For example, to exploit the vulnerability, one could start a persistent Python process in memory by setting the environment variable 'PYTHONPATH=/home/test', and place the shared library '/home/test/importlib/__init__.so', which will be executed when the privileged Python code in needrestart runs.
- CVE-2024-48991 - A local user can execute code with root permissions by triggering a race condition, resulting in needrestart launching a fake Python interpreter supplied by the attacker instead of the system's Python interpreter. The essence of the vulnerability is similar to the previously mentioned issue, with the only difference being that needrestart determines the name of the Python process (e.g., /usr/bin/python3) by reading '/proc/pid/exe'.
To exploit the vulnerability, one can create a process /home/test/race that uses the inotify mechanism to wait for needrestart to start reading the contents of /proc/pid/exe, and immediately launch the system Python interpreter via the execve function. Since needrestart does not verify whether it is indeed Python, it will assume that /home/test/race is the Python interpreter and will launch it for its code.
- CVE-2024-11003 - A local user can execute arbitrary shell commands with root privileges by creating conditions for needrestart to handle file names in the format 'command|', the passing of which to the Perl function open() will result in the command being executed. In fact, the vulnerability manifests in the Perl module ScanDeps (CVE-2024-10224), but is triggered by passing external parameters to this module without proper checks.
The attack can be carried out by launching a Perl script with a '|' symbol in the name, for example, '/home/test/perl|'. During the execution of the scan_deps() function in needrestart, this file will be opened through the open() function, which will interpret the '|' symbol as a flag to launch the program '/home/test/perl' and use the output stream from that program.
Kilde: opennet.ru
