JavaのUTF-8におけるデコード処理の脆弱性を検証してみた。
情報源はこちら。
http://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2008-5351
http://sunsolve.sun.com/search/document.do?assetkey=1-66-245246-1
http://www.unicode.org/versions/corrigendum1.html
問題は、Unicodeに準拠していないバイト配列でも中途半端に処理しているのが原因みたい。
対象はJRE6 update 10 以前のバージョン
検証したのは異なるバイト配列をUTF-8デコードした結果が同じ値となってしまうケース。
Sample Aが正常ケースでSample Bは異常ケースなんだけども、結果が同じとなった。
まぁJREを最新に更新すれば問題は解消されるみたい。
public class UTF8 { public static void main(String[] args) throws Exception { //Sample A byte[] a = new byte[3]; a[0] = (byte) 0x42; a[1] = (byte) 0x43; a[2] = (byte) 0x44; System.out.println("Sample A=" + new String(a, "UTF8")); //Sample B byte[] b = new byte[6]; b[0] = (byte) 0xc1; b[1] = (byte) 0x82; b[2] = (byte) 0xc1; b[3] = (byte) 0x83; b[4] = (byte) 0xc1; b[5] = (byte) 0x84; System.out.println("Sample B=" + new String(b, "UTF8")); //OUTPUT //Sample A=BCD //Sample B=BCD //異常ケース } }