
Il dispositivo /dev/fasttrap per creare nodi trap nei processi in spazio utente per i provider pid e objc ha i permessi 666. A differenza di /dev/dtrace, anch'esso 666, fasttrap non dispone di un controllo dei permessi. Ciò consente a qualsiasi processo di emettere un ioctl FASTTRAPIOC_MAKEPROBE o FASTTRAPIOC_GETINSTR.
Un attaccante può creare probe in qualsiasi altro processo per qualsiasi posizione di memoria utilizzando FASTTRAPIOC_MAKEPROBE. All'attivazione di questi probe, i valori nella posizione di memoria specificata vengono sostituiti con un'istruzione trap (0xCC su x86) e il valore originale viene inserito in una memoria shadow. Il recupero del valore originale è possibile con l'ioctl FASTTRAPIOC_GETINSTR. Ciò consente all'attaccante di leggere memoria arbitraria di un altro processo inserendo più trap.
Questa vulnerabilità è tracciata come CVE-2020-27949, corretta in macOS Big Sur 11.1, Security Update 2020-001 Catalina, Security Update 2020-007 Mojave .
0xCC su x86) in qualsiasi posizione di memoria di altri processi eseguiti sotto DTrace senza permessi elevati. È possibile scrivere memoria anche in processi in esecuzione come root. Come parte di altre istruzioni o indirizzi di salto, il flusso di controllo della vittima può essere alterato, consentendo l'escalation dei privilegi.Come utente, mi aspetto che l'abilitazione di DTrace consenta solo ai processi con permessi di root di tracciare, instrumentare o modificare altri processi. DTrace è uno strumento prezioso per attività amministrative che offre strumenti come dtruss, iotop, ecc.
La nostra vittima (target) è un eseguibile che gira come root. L'attaccante (memaccess) è un eseguibile che gira con permessi utente normali. Lo script di tracing libc_monitor.d registra il numero di chiamate alle funzioni nell'oggetto condiviso libsystem_c.dylib (questo è solo un semplice esempio di script amministrativo che un proprietario di una macchina potrebbe eseguire).
libc_monitor.d).FASTTRAPIOC_GETINSTR per leggere i valori di memoria dei probe creati.Il passaggio 4 sostituisce la memoria nel processo vittima con il valore dell'istruzione trap. A seconda dell'applicazione, un attaccante può usare questo per scrivere un valore precedentemente noto in una posizione di memoria critica. Ad esempio, l'attaccante potrebbe controllare il seed di un RNG o sostituire chiavi crittografiche in un processo.
Nota: l'attaccante non richiede mai permessi elevati o di root.
Nota 2: non sono richiesti script DTrace scritti appositamente. Ad esempio, anche dapptrace usa il provider pid per tracciare qualsiasi funzione.
Implementare controlli dei privilegi in /dev/fasttrap come in /dev/dtrace o rimuovere il permesso di scrittura per tutti (world-writable).
Nota: non abbiamo verificato il fix rilasciato.
target e seguire le istruzioni a schermo