Fin dal tempo in cui, con Prescott, Intel aveva aggiunto un sacco di stadi pipeline per fornire alla CPU abbastanza istruzioni per saturarne la potenza di calcolo senza lasciarla "ferma" ad attendere nuovi task, la frontiera per massimizzare l'efficienza delle CPU moderne è proprio cercare di non lasciarle mai a secco di cose da fare.
In questa direzione vanno tante tecnologie, a partire dall'abusato hyper threading fino alla (fino ad ora) poco nota esecuzione speculativa. In breve (diciamo pure in brevissimo) i processori moderni sono abbastanza performanti da affrontare le condizioni (del tipo "se vero fai questo, altrimenti quest'altro") in maniera opportunistica. Insomma, per non aspettare di sapere se il risultato è vero o falso, fanno delle assunzioni e decidono di percorrere in anticipo la strada "se vero" o quella "se falso". Il più delle volte ci prendono, e questo si traduce in pochissimo tempo trascorso richiedere il risultato nel caso in cui la condizione era vera (o falsa) e la risposta finale. Bello, splendido.
Qui entra in gioco il bug: questa esecuzione speculativa viene gestita dal kernel, il "nucleo" di un sistema operativo, la base alla quale qualsiasi operazione di input e output deve chiedere gentile intercessione per poter essere eseguita. Il kernel è come il dio di tutti i processi, programmi, istruzioni eseguiti nel computer. Lui ha il diritto di spegnere il computer quando crede (sia che sia tu a richiederlo facendo "arresta sistema", sia per un surriscaldamento, sia perché un virus glielo impone, sia perché gli va e basta!), lui è l'unico a poter scrivere sull'hard disk il file che stavi modificando, lui è l'unico a poter creare nuovi thread e processi, lui può leggere le tue password e, per esempio, salvarle in un modulo TPM, etc. etc... Insomma, lui tutto può!
Proprio il kernel, che ha dei privilegi elevatissimi, il dio di cui sopra, è il "proprietario" dell'istruzione che fa seguire al processore la strada (ricordi il "se vero questo, se falso quest'altro"?) che ritiene più plausibile. Insomma, il processo relativo all'esecuzione speculativa viene eseguito con processi talmente elevati da diventare pericoloso se non "isolato" dai dati sensibili.
Di fatto questo isolamento non è mai stato "addressed" (cioè gestito, non ci hanno mai pensato). E questo, ancora più in breve, con uno pseudo-programma del tipo:
se (utente é amministratore) scrivi_tutte_le_password_sul_file
altrimenti fai_una_pernacchia
Un codice del genere, eseguito su un processore provvisto di esecuzione speculativa, potrebbe portare alla scrittura delle password sul file anche nel caso in cui l'utente non sia amministratore, semplicemente perché la CPU aveva deciso che era più probabile che l'utente fosse amministratore. In tal caso, se l'utente non amministratore sapesse dove andare a prendere quel file (o semplicemente, sapendo della sua esistenza lo cercasse), potrebbe appropriarsi di tutte le password senza nemmeno installare sul computer un malware o un virus.
La cosa ancora peggiore, peggiore del fatto che tutte le CPU dal Pentium 2 siano intaccate da questo problema, è che l'esecuzione speculativa è qualcosa di enormemente utile e vantaggioso. Se hai modo di provare una CPU Atom, che non ha esecuzione speculativa, ti renderai conto della differenza di prestazioni anche a parità di clock e memoria cache rispetto ad un processore di un'altra famiglia contemporaneo.