JIT, o compilazione Just-In-Time, è una tecnica in fase di esecuzione che genera codice macchina su richiesta invece che in anticipo. Un programma inizia in una forma interpretata o di livello inferiore, poi il JIT compila i percorsi più utilizzati in istruzioni native, così vengono eseguiti più velocemente. Questo è comune nei browser, nei runtime dei linguaggi e in alcuni componenti del kernel o del database.
Il JIT è importante nella sicurezza informatica perché la generazione dinamica di codice crea un bersaglio mobile: le pagine di codice vengono create, riutilizzate e scartate continuamente. Gli aggressori possono abusare dei sistemi JIT per modellare i layout di memoria, creare gadget utili o influenzare il comportamento dell'esecuzione speculativa quando i predittori della CPU mantengono uno storico obsoleto. I difensori riducono il rischio con la firma del codice e il sandboxing, le protezioni di pagina W^X, il rigido isolamento della code cache e le mitigazioni del branch predictor come IBPB o retpoline, quando appropriato. La sfida di sicurezza è controllare sia il codice generato sia lo stato hardware intorno ad esso.


