Dalla proposta di Area51
In base alle seguenti risorse:
possiamo concludere che le iniezioni di Null Byte sono possibili in Java.
L'iniezione di byte nulli dipende da una mancata corrispondenza nel modo in cui vengono gestite le stringhe.
es. Java memorizza la lunghezza della stringa indipendentemente dal contenuto della stringa, mentre C inizia all'inizio della stringa e controlla un byte Null per indicare la fine della stringa.
Come risultato, il codice Java può eseguire verifiche come "il file richiesto termina con .jsp" su una stringa come "/etc/shadow%00.jsp" (dove% 00 rappresenta il byte null) e restituisce true , mentre il passaggio di questa stringa a "new FileInputStream ()" comporterà l'OS sottostante (sia Windows che Linux) che tenta di aprire "/ etc / shadow".
(La pertinenza di provare ad aprire / etc / shadow su Windows è lasciata come esercizio per il lettore :-))
L'iniezione di byte nulli nei nomi dei file è stata risolta con l'aggiornamento 40 di Java 7 (rilasciato intorno a settembre 2013). Quindi, è FINALMENTE corretto.