// 6 ZERO-DAY · 10 CVE · 7 EXPLOIT NELLE ULTIME 24H
CVE-2026-90894: il software di virtualizzazione più diffuso su Mac ha un daemon root con socket accessibile a tutti. La patch è in Parallels Desktop 27.0.0, ma le

Il 14 settembre 2026 JFrog Security Research ha pubblicato l'analisi di CVE-2026-90894, una vulnerabilità in Parallels Desktop che consente a qualsiasi processo utente su macOS di ottenere privilegi root senza autenticazione significativa. Il problema non è un errore di programmazione isolato, ma la combinazione di tre scelte architetturali insicure: un daemon che gira come root con socket world-writable, un meccanismo di login che si fida delle peer credentials senza validare il Team ID, e un parser Qt che trasforma una virgoletta nel nome di una directory in flag eseguibili per tar.

Punti chiave
  • CVE-2026-90894 ha un punteggio CVSS 7.8 HIGH con vettore AV:L/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:H, secondo il record ufficiale CVE.org.
  • Il daemon prl_disp_service di Parallels Desktop espone la socket /var/run/prl_disp_service.socket con permessi 0777, accessibile da qualsiasi processo locale.
  • La funzione PrlSrv_LoginLocal accetta peer credentials senza verificare la firma Parallels Team ID o il gruppo amministratore.
  • La versione 26.4.2 non include la correzione; solo Parallels Desktop 27.0.0, rilasciato a inizio settembre 2026, blocca la catena di exploit.

La catena: tre difetti che si concatenano in root

L'analisi condotta dal ricercatore Yuval Moravchick di JFrog identifica il nucleo tecnico con precisione di laboratorio. Il primo anello è prl_disp_service, il dispatcher dei servizi Parallels che opera con UID 0. La socket Unix che espone è world-writable: i permessi srwxrwxrwx la rendono raggiungibile da qualsiasi processo utente, senza distinzione di privilegi.

Il secondo anello è l'autenticazione. La funzione PrlSrv_LoginLocal utilizza le peer credentials del kernel macOS per identificare il client, ma non aggiunge un controllo sulla firma code-signed con il Team ID Parallels né richiede l'appartenenza al gruppo admin. Un processo unsigned, lanciato da un utente standard, ottiene sessione valida.

Il terzo anello è l'injection vera e propria. Quando Parallels estrae un appliance — un pacchetto compresso usato per distribuire template di macchina virtuale — il percorso di destinazione sVmParentPath passa attraverso Qt QProcess::splitCommand. Una virgoletta nel nome directory chiude prematuramente la stringa: la sequenza /tmp/sprl_p_<uid>" --use-compress-program=/tmp/u<uid> " viene scomposta in argomenti separati. Il flag --use-compress-program indica a macOS tar quale programma usare per la decompressione. Tar esegue quel programma come uid 0.

L'exploit è argument injection, non shell command injection: più sottile, non richiede metacharacter di shell, e passa attraverso API legittime di Qt.

Il PoC in laboratorio: da directory name a /etc/sudoers.d

Moravchick ha verificato la catena su Parallels Desktop 26.4.0 (build 57513) su macOS ARM64. Il marker file scritto dall'exploit riporta UCP_UID=0, confermando l'esecuzione come root. Lo script iniettato ottiene la scrittura di un file in /etc/sudoers.d/ con privilegi NOPASSWD ALL per l'utente attaccante.

Non è necessario che una macchina virtuale sia in esecuzione. La sola presenza di Parallels Desktop installato, con prl_disp_service attivo, espone la superficie d'attacco. Questo amplifica significativamente la veicolazione: script npm preinstall, formule Homebrew compromesse, o malware con accesso utente limitato possono innescare la catena senza interazione della vittima.

Sulla versione 27.0.0, rilasciata a inizio settembre 2026, la stessa sequenza di input produce un risultato diverso: tar viene avviato con argv list fissa, la virgoletta resta parte del nome directory, e nessun codice arbitrario viene eseguito come root.

Versioni a rischio e distribuzione della patch

La versione 26.4.0 è confermata vulnerabile in laboratorio. La 26.4.2, rilasciata in un momento intermedio, non include la modifica all'estrazione appliance: resta vulnerabile secondo l'analisi JFrog. Solo il salto alla linea 27.0.0 blocca il vettore.

Il record CVE-2026-90894 riporta un impatto su confidentiality, integrity e availability tutti classificati HIGH, con attacco locale (AV:L) che non richiede interazione utente (UI:N). La complessità è bassa (AC:L): una volta nota la catena, la riproduzione è diretta.

Il dossier non specifica se versioni precedenti a 26.4.0 siano vulnerabili: JFrog non ha condotto regression test completo. Non è confermato neppure se l'edizione App Store di Parallels Desktop condivida lo stesso comportamento della socket, ipotizzata differenza nel modo di avvio dei servizi.

"The chain is short: A world-writable Unix socket, a login that trusts peer credentials rather than a Team ID, and an appliance unpack path that builds tar arguments using Qt string splitting. A quote in the parent path injects --use-compress-program=, and macOS tar runs the attacker's script as uid 0 [i.e., root]." — Yuval Moravchick, JFrog vulnerability research team lead

Cosa fare adesso

La fonte primaria indica azioni specifiche e limiti operativi.

Aggiornare a Parallels Desktop 27.0.0. La versione 27.0.0 blocca l'exploit avviando tar con argomenti fissi; le versioni 26.x, inclusa la 26.4.2, non contengono la correzione.

Verificare che prl_disp_service non sia in esecuzione su macchine dove Parallels non è necessario. La socket /var/run/prl_disp_service.socket è presente e attiva solo con il servizio avviato.

Controllare la presenza di Parallels Desktop nelle build CI/CD locali e nelle workstation di sviluppo condivise. Questi ambienti combinano utenti multipli, installazione di dipendenze da script, e spesso ritardi nell'applicazione di patch per non interrompere pipeline.

Non è disponibile mitigazione per le versioni 26.x: il dossier non documenta workaround che blocchino il vettore senza aggiornamento.

Perché l'architettura IPC è il vero problema

Il titolo tecnico di CVE-2026-90894 è "argument injection", ma la lettura del caso sposta il focus. Il bug tar è l'ultimo anello di una catena che inizia con una decisione di design: affidare a un daemon root la gestione di una socket world-writable senza autenticazione a sé stante.

Parallels Desktop è installato su milioni di Mac, in prevalenza workstation di sviluppo, ambienti corporate, e postazioni universitarie condivise. In questi contesti, la separazione tra utenti standard e root è spesso l'unico confine di sicurezza effettivo: macOS non isola i processi utente con la stessa rigidità di altri sistemi operativi. L'escalation a root permette la sostituzione di software di sistema, l'accesso ai dati di altri utenti, e la persistenza tramite launchd.

La scelta di Qt QProcess::splitCommand per costruire argomenti di shell da path utente è, in retrospettiva, una superficie d'attacco prevedibile. Ma è prevedibile perché il contesto di esecuzione — root, senza sandbox, con input non validato — amplifica ogni errore di parsing a compromissione totale.

Chi è esposto e cosa non sappiamo

Il rischio massimo riguarda i Mac condivisi e le workstation di sviluppo con CI/CD locale, dove processi con privilegi limitati installano frequentemente componenti da fonti esterne. L'assenza di una VM in esecuzione come prerequisito abbassa ulteriormente la soglia di sfruttamento.

Non emergono evidenze di sfruttamento in-the-wild prima della patch. Il PoC sviluppato da JFrog non è stato pubblicato: la descrizione tecnica è disponibile, ma non il codice riproducibile. Questo riduce il rischio di replica immediata, ma non elimina la possibilità che attori con capacità di reverse engineering ricostruiscano la catena indipendentemente.

Il numero di Mac effettivamente esposti non è quantificato. La fonte non specifica dati di adozione versione per versione né la distribuzione tra edizione diretta e App Store.

Domande frequenti

È necessario che una macchina virtuale sia in esecuzione per sfruttare la vulnerabilità?

No. Secondo la fonte primaria, basta che Parallels Desktop sia installato e che prl_disp_service sia attivo. La creazione o l'esecuzione di una VM non è parte della catena di attacco.

Perché la versione 26.4.2 non riceve la patch?

La correzione è implementata nella linea 27.0.0 con un cambio architetturale nell'avvio di tar. La 26.4.2 mantiene il vecchio comportamento di QProcess::splitCommand. Il dossier non indica se Parallels rilascerà backport per la linea 26.x.

L'edizione App Store è vulnerabile?

Il dossier non conferma né esclude questa variante. JFrog ipotizza una differenza nel modo di avvio dei servizi tra edizione diretta e App Store, ma non ha verificato il comportamento su quest'ultima.

Fonti

Le informazioni sono state verificate sulle fonti citate e aggiornate al momento della pubblicazione.

Fonti


Fonti e riferimenti
  1. helpnetsecurity.com
  2. thehackernews.com
  3. strix.ai
  4. research.jfrog.com
  5. cve.org
  6. en.wikipedia.org
  7. jfrog.com