Un byte nulo es un byte con el valor cero, es decir, 0x00 en hexadecimal.
Ha habido una vulnerabilidad de seguridad relacionada con los bytes nulos. Esto ocurre porque C usa bytes nulos como terminador de cadena. Otros idiomas (Java, PHP, etc.) no tienen un terminador de cadena; almacenan la longitud de cada cadena por separado.
Ahora, considere una aplicación web Java que acepta cargas de archivos. Tal vez queremos permitir que los usuarios carguen archivos .jpg
, pero nada más. De hecho, si un usuario puede cargar un archivo .jsp
, esta será una vulnerabilidad de seguridad grave.
Lo que un hacker podría intentar es cargar hack.jsp<NUL>.jpg
. Vamos a pensar cómo se procesará esto. Primero, Java mirará el nombre del archivo, verá que termina en .jpg
y permitirá la carga. Luego llama a la biblioteca del sistema operativo, que está escrita en C. C ve el carácter <NUL>
como el terminador de cadena, por lo que guarda el archivo como hack.jsp
Muchos idiomas solucionan esto al deshabilitar explícitamente los bytes en los nombres de archivos. Sé que Python y PHP hacen esto. Sin embargo, si su idioma no lo hace por usted, debe hacerlo usted mismo. Más información - OWASP: Inyección de byte nulo
No sé exactamente cómo se relacionan las "instancias seriadas" con esto, pero creo que esto te da una idea de lo que está pasando.