Area51プロポーザル から
以下のリソースに応じて:
javaではNull Byteインジェクションが可能であると結論付けることができます。
ヌルバイトインジェクションは、文字列の処理方法の不一致に依存します。
例えばJavaは、文字列の内容とは無関係に文字列の長さを格納しますが、Cは文字列の先頭から始まり、Nullバイトをチェックして文字列の終わりを示します。
その結果、Javaコードは、「/ etc/shadow%00.jsp」のような文字列に対して「要求されたファイルは.jspで終了する」のようなチェックを実行できます(%00はnullを表します)この文字列を "new FileInputStream()"に渡すと、trueが返され、基になるOS(WindowsとLinuxの両方)が "/ etc/shadow"を開こうとします。
(Windowsで/ etc/shadowを開こうとすることの関連性は、読者の練習問題として残されています:-))
Java 7 update 40(2013年9月頃にリリース)で、ファイル名のnullバイトインジェクションが修正されました。そのため、最終的に修正されました。