Con l’aggiornamento 12.4 per sistema macOS Monterey di maggio (https://support.apple.com/en-us/HT213257), Apple ha messo al sicuro i suoi sistemi da un importante difetto di sicurezza già noto un anno fa e sanato solo con tale aggiornamento.
Il tempo ora è sufficientemente maturo, se, come auspicabile, tutti gli utenti Apple hanno disposto l’aggiornamento dei loro sistemi, perché si parli pubblicamente del difetto e soprattutto del meccanismo di sfruttamento che ne è alla base, arrivando alla pubblicazione di un PoC del codice di prova per lo sfruttamento.
Stiamo parlando della vulnerabilità CVE-2022-26696 dell’applicazione Terminal.app, un difetto grave (CVSS 7.8) che consente di aggirare il sistema di sandbox imposto alle applicazioni dal sistema operativo macOS. Apple accredita rispetto alla vulnerabilità i ricercatori Ron Waisberg (già scopritore della vulnerabilità CVE-2021-30677 sul superamento del sandboxing via LaunchServices) e Wojciech Reguła: ed è proprio quest’ultimo a pubblicare dettagli importanti sulla questione, non risparmiando un po’ di polemica sul ritardo.
Un problema al sandbox era stato già visto e segnalato da Regola infatti nel lontano 2020, problema che forniva la possibilità da parte di una applicazione in sandbox di avviare una applicazione priva dell’eredità del profilo di sandbox del padre: per Apple, che rispondeva a Regula, questo era un comportamento previsto; ma non lontano da quella segnalazione arrivarono vulnerabilità che sfruttavano proprio questo meccanismo, come la https://www.microsoft.com/en-us/security/blog/2022/07/13/uncovering-a-macos-app-sandbox-escape-vulnerability-a-deep-dive-into-cve-2022-26706/">CVE-2022-26706 e quanto scoperto da Waisberg sul LanchService.
Regula ha sfruttato questo difetto nell’applicazione Terminal.app avendone osservato il comportamento in ragione di una specifica variabile ambientale che determina la cancellazione o meno di altre variabili ambientali di profilo, quali PATH, HOME, USER, SHELL e LOGNAME. Regola ha osservato nel codice di Teminal.app l’uso della variabile __OSINSTALL_ENVIRONMENT (all’interno di un metodo che tradisce il suo significato: “isRunningInInstallEnvironment”) e come questa determini la risposta positiva o meno del metodo: proprio la risposta positiva (YES), ossia la presenza di questa variabile, determina nel successivo codice la non cancellazione delle predette variabili dal profilo. Ciò facendo, per un attaccante che costruisse un codice, offrirebbe la possibilità di imporre un proprio valore alle suddette variabili, che, non subendo rimozione, verranno ereditate così dal processo figlio di Teminal.app, violando così l’eredità del profilo di sandbox. Insomma, sfruttare Teminal.app come testa di ponte.
La cosa più pericolosa, segnala sempre Regula, è che all’interno di un contesto Teminal.app questo può divenire davvero pericolosa nella misura in cui questo veda già concesse autorizzazioni TCC (Transparency, Consent, and Control), un meccanismo di macOS per limitare e controllare l'accesso delle applicazioni a determinate funzionalità, solitamente dal punto di vista della privacy (introdotto con Mavericks).
Il ricercatore ha anche dimostrato lo sfruttamento di questo attraverso una macro Word, capace, tramite un AppleScript, di aprire una istanza di Terminal.app, che a sua volta, mediante osascript (esecutore nel contesto Open Scripting Architecture), esegue un javascript malevolo, un payload JXA (JavaScript for Automation) per Mythic (un framework Red Teaming multipiattaforma per la post-exploitation).