De la propuesta de Area51
De acuerdo con los siguientes recursos:
podemos concluir que las inyecciones de bytes nulos son posibles en Java.
La inyección de bytes nulos depende de una falta de coincidencia en la forma en que se manejan las cadenas.
por ejemplo Java almacena la longitud de la cadena independientemente del contenido de la cadena, mientras que C comienza al principio de la cadena y comprueba si hay un byte nulo para indicar el final de la cadena.
Como resultado, el código Java puede realizar verificaciones como "finaliza el archivo solicitado con .jsp" en una cadena como "/etc/shadow%00.jsp" (donde% 00 representa el byte nulo) y devuelve true , al pasar esta cadena a "nuevo FileInputStream ()", el sistema operativo subyacente (tanto Windows como Linux) intentará abrir "/ etc / shadow".
(La relevancia de intentar abrir / etc / shadow en Windows se deja como ejercicio para el lector :-))
La inyección de bytes nulos en los nombres de archivo se corrigió en la actualización 40 de Java 7 (lanzada en septiembre de 2013). Por lo tanto, es FINALMENTE fijo.