Un byte null è un byte con il valore zero, cioè 0x00 in hex.
Ci sono state vulnerabilità di sicurezza legate a byte null. Questi si verificano perché C utilizza byte null come terminatore di stringa. Altre lingue (Java, PHP, ecc.) Non hanno un terminatore di stringhe; memorizzano la lunghezza di ogni stringa separatamente.
Ora, considera un'applicazione Web Java che accetta i caricamenti di file. Forse vogliamo consentire agli utenti di caricare file .jpg
, ma nient'altro. Infatti, se un utente può caricare un file .jsp
questa sarà una seria vulnerabilità alla sicurezza.
Ciò che un hacker potrebbe provare è caricare hack.jsp<NUL>.jpg
Pensa a come verrà elaborato. Per prima cosa, Java guarderà il nome del file, vedrà che termina in .jpg
e permetterà il caricamento. Quindi chiama la libreria del sistema operativo, che è scritta in C. C vede il carattere <NUL>
come terminatore di stringa, quindi salva il file come hack.jsp
Molte lingue risolvono questo problema disabilitando esplicitamente i byte nei nomi dei file. So che Python e PHP fanno questo. Tuttavia, se la tua lingua non lo fa per te, devi farlo da solo. Ulteriori informazioni - OWASP: Injection Null-Byte
Non so in che modo esattamente "istanze serializzate" sono correlate a questo, ma penso che questo ti dia un'idea di cosa sta succedendo.