Критична уязвимост за локално ескалиране на привилегии в Parallels Desktop за Mac би могла да позволи на потребител без администраторски права или на непривилегирован процес да изпълни контролиран от атакуващия код с привилегии на root.

Уязвимостта, следена като CVE-2026-90894 и наречена „ParaShells“, бе потвърдена в Parallels Desktop 26.4.0 build 57513 на Mac компютри с Apple Silicon. Parallels отстрани уязвимостта с пускането на версия 27.0.0.

Атаката се насочва към prl_disp_service — привилегирован демон на хоста, използван от Parallels Desktop за извършване на чувствителни операции като управление на виртуални машини, конфигуриране на мрежи и инсталиране на пакети с приложения (appliance packages).

Тъй като услугата работи като root, незащитените заявки, изпратени към нея, могат да осигурят директен път към пълно компрометиране на системата. Уязвимостта комбинира три слабости в сигурността: Unix сокет с права за запис от всички (world-writable), слаба автентификация на локалния клиент и инжектиране на аргументи по време me разархивиране на приложения.

Уязвимост в Parallels Desktop

При стандартна инсталация prl_disp_service слуша през /var/run/prl_disp_service.socket. Изследователи от Jfrog установиха, че сокетът може да има права 0777, което позволява на всеки локален процес да се свърже.

Функцията PrlSrv_LoginLocal според информацията приема връзки въз основа на идентификационните данни на съответния процес в операционната система, вместо да потвърждава, че Parallels е подписал клиента. В резултат на това неподписан клиент, работещ под стандартен потребителски профил, може да се автентифицира успешно.

След свързване атакуващ може да извика операцията PrlSrv_InstallAppliance и да предостави злонамерен път към родителската директория на виртуалната машина.

The LPE attack chain (Source : jfrog )
Веригата на LPE атаката (Източник: Jfrog)

По време на инсталирането на приложението услугата конструира команда за извличане чрез tar, използвайки контролирани от атакуващия стойности за пътя. Командата се разделя на аргументи чрез функцията QProcess::splitCommand на Qt.

Чрез поставяне на кавичка вътре в родителския път, атакуващ може да прекрати очакваната стойност в кавички и да инжектира допълнителна опция за tar.

Инжектираната опция, –use-compress-program, указва на macOS tar да стартира външна програма, докато обработва архива. Тъй като prl_disp_service стартира tar като root, контролираната от атакуващия програма също се изпълнява с привилегии на root.

Това е инжектиране на аргументи (argument injection), а не традиционно инжектиране на командна обвивка (shell command injection). Метасимволите на шела са ненужни, тъй като атакуващият манипулира списъка с аргументи, подаден директно на tar.

Не се изисква работеща виртуална машина. Демонстрираният експлойт се нуждае само от Parallels Desktop, активната привилегирована услуга и сокет, както и достъп до локален акаунт с ниски привилегии.

A one-line PoC gained a root shell (Source : jfrog )
Еднолинов PoC придобива root шел (Източник: JFrog)

Потенциалните източници на атака включват зловредни софтуерни пакети, компрометирани задачи в системи за непрекъсната интеграция (CI), отровени npm скриптове за инсталация, формули на Homebrew или друг код, който вече се изпълнява като стандартен потребител.

Успешното експлоатиране би могло да позволи на киберпрестъпниците да получат достъп до файловете на други потребители, да променят системния софтуер, да инсталират персистентни демони за стартиране (launch daemons), да променят sudo конфигурацията и напълно да поемат контрола върху засегнатия Mac.

Администраторите трябва да инвентаризират системите, работещи с Parallels Desktop, и незабавно да обновят засегнатите инсталации до версия 27.0.0 или по-нова. Докато корекциите за сигурност бъдат внедрени, организациите трябва да ограничат достъпа до локални акаунти и внимателно да наблюдават системите, излагащи диспечерския сокет.

Потребителите могат да проверят инсталираната версия през прозореца „About“ на Parallels Desktop или да инспектират стойностите CFBundleShortVersionString и CFBundleVersion на приложението. Системи, работещи с build 57513 и достъпен за запис от всички prl_disp_service.socket, трябва да се считат за уязвими, докато не бъде потвърдено отстраняването на проблема.