際際滷

際際滷Share a Scribd company logo
JZlibと
^Java7で心函られたバグ(軣蝪隠) ̄
         について


                  @ymnk



Java SE 7 Launch Event in Sendai (2011/09/04)
徭失B初
? 表嶄款刔(ymnk)
? 幄塀氏芙ジェイクラフト (JCraft,Inc.)
? FLOSSをラつか_k ?巷_
  JSch、JZlib、JOrbis など
? Eclipse.org、Liftwebでコミッタ
? Scala茶氏@|臼 (宥麻110指殻、俚峭嶄)
? 碧並でJava、恷除 Scala
? http://facebook.com/aymnk
JZlib and an aged fixed bug in java7
徭失B初
? ymnkのいたソフトがBoeing 787に喜d
 JCraft's X Server Part of Boeing 787 Avionics Systems
 http://www.jcraft.com/news/06.18.2009pr.html
いきなり潤胎
JZlib and an aged fixed bug in java7
坪否
? Bug ID: 4206909
? JZlib
? Zlib
? Deflateアルゴリズム
? 皆額鰻遺喝酷晦雨皆堰の聞喘箭
? java.util.zip まつわる}
? まとめ
Bug ID: 4206909
Bug ID: 4206909
? http://bugs.sun.com/view_bug.do?bug_id=4206909
? Synopsis: want java.util.zip to work for
  interactive use (Z_SYNC_FLUSH)
? Submit Date: 28-JAN-1999
? Reported Against: 1.2, 1.3, 1.1.7, 1.1.8
? Release Fixed: 7(b77)
? State: 10-Fix Delivered, request for
  enhancement
Bug ID: 4206909
? Description:

 ^Today it is not possible to reuse
 java.util.zip for compression because the
 Java VM calls deflate() in the libz with
 Z_NO_FLUSH (and Z_FINISH for EOF)
 only. ̄
Bug ID: 4206909
? Description:

 ^ This means that in most cases the
 deflate() does not emit enough data for
 the decompressor to reassemble the
 complete data packet because it waits for
 more input. ̄
Bug ID: 4206909
? java.util.zip パッケ`ジ
   C Deflater
   匯違議な ZLIB Rsライブラリを聞喘して喘のRs
   アルゴリズムをサポ`ト
  C Inflater
   匯違議な ZLIB Rsライブラリを聞喘して喘のRs
   盾茅をサポ`ト
  C InflaterInputStream
  C DeflaterOutputStream
Bug ID: 4206909
Java6まで(j.u.z.Deflater#deflate+NO_FLUSH)

?^Hello ̄をRsして阜しても ̄Hello ̄が誼られるとは泙蕕覆
?褒圭鬚任笋衄,蠅垢栽、デッドロックになる辛嬬來がある

  ^Hello ̄
               compressor
                             ^lo ̄はI尖棋ち


                              ^Hel ̄
              decompressor
Bug ID: 4206909
Java7(j.u.z.Deflater#deflate+SYNC_FLUSH)

?^Hello ̄をSYNC_FLUSHでRsして阜すると駅ず
 ̄Hello ̄が誼られる

 ^Hello ̄
               compressor


                              ^Hello ̄
              decompressor
で、いままではどうしてた
JZlib and an aged fixed bug in java7
JZlib
JZlib
?   zlib(1.1.3)のpure Javag廾
?   俐屎BSDライセンスで巷_
?   2000定12埖より ymnk が_k
?   恷除、Inflater/Deflaterでgzip
    format(RFC1952)を荷恬できるようにhack嶄
JZlib
? _kのC
  SSHのパケットRs[RFC4253]gFのため

 ^The 'zlib' compression is described in
 [RFC1950] and in [RFC1951].The
 compression context is initialized after each
 key exchange, and is passed from one packet
 to the next, with only a partial flush being
 performed at the end of each packet. ^
JZlib
? JZlibを聞っているソフトウェア
 C JSch
 C Apache MINA
 C Netty
 C Zimbra
 C as3zlib
 C Zlib.cs
 C IronPython.Zlib
 C Nokia Data Gathering 吉
zlib
zlib
? Wikipediaから
 ^zlibは、デ`タのRsおよび阜を佩うためのフリ`の
 ライブラリである。辛剃Rsアルゴリズムの Deflate
 (RFC 1951)をg廾している。ヘッダ`やフッタ`などの
 デ`タ侘塀はRFC 1950 (ZLIB Compressed Data
 Format Specification)として碧晒されている。 ̄
zlib
? 恬宀: Jean-Loup Gailly, Mark Adler
? ライセンス: zlib license
? GIF蒙S}を鞭けて_k_兵
? 輝兜は、來嬬?紳覆茲蠅蓮¬慥Sに乾れないよう
  に_k
 ITmedia: LZWに寳え貧がった10定念の繁たち
 Glamenv-Septzen.net: 室g/s雰/zip,gzip,zlib,bzip2
Deflate アルゴリズム
Deflate アルゴリズム
? Wikipediaから
 ^LZ77とハフマン憲催晒をMみ栽わせた辛剃デ`タR
 sアルゴリズム。 ̄
                                       蒙Sあり

   LZ77         LZ78                        LZW

                            GIF
                            Compress コマンド



    LZSS          Deflate       PNG
                                zlib、gzip

                 蒙Sなし(とレく佚じられている)
皆額鰻遺喝酷晦雨皆堰の聞喘箭
皆額鰻遺喝酷晦雨皆堰の聞喘箭
scala> val defl_infl = {
    import java.util.zip._
    val (defl, infl, buf) = (new Deflater, new Inflater, new Array[Byte](100))
    def f(in: String): String = synchronized {
     in.getBytes match {
      case result =>
         defl.setInput(result)
         defl.deflate(buf, 0, buf.length, Deflater.SYNC_FLUSH) match{
         case l =>  l は buf にき竃されたRsデ`タのサイズ
                   //
         infl.setInput(buf, 0, l)
         val len = infl.inflate(result, 0, result.length)
          new String(result, 0, len)
      }}} // ちゃんとg廾するには、嶄gバッファ(buf)の吝れに廣吭
    f_    // また、阜瘁のバッファ吝れにも廣吭すべき
}
皆額鰻遺喝酷晦雨皆堰の聞喘箭
scala> println(new java.io.File(".").list.forall{ l => defl_infl(l)==l })
true
java.util.zip まつわる}
java.util.zip にまつわる}
? JDK は native な zlib を鏡徭に宇えてる
 2002定ごろ double free }で寄Xぎに
 zlib 1.1.3の}
 S ymantec: Zlib compression library double free bug could allow arbitrary code Zlib

? Inflaterがgzip format(RFC1952)をI尖できない
  zlib 1.2からのC嬬 (Java6參週は zlib 1.2.3を聞喘)
  恷除、JRubyのZip::Inflaterのg廾で}に
  JRubyでj.u.zipに旗わって、JZlib を聞うかも?
? zlibのinflaterSyncをInflaterから聞えない
JZlib and an aged fixed bug in java7
JZlib and an aged fixed bug in java7
まとめ
JZlib and an aged fixed bug in java7

More Related Content

What's hot (20)

PDF
階酒g!皆顎恢厩艶姻壊庄看稼秘壇 古廷園
Shin Tanigawa
?
PDF
シェル秘壇
ina job
?
PPTX
php7's ast
do_aki
?
PPTX
PHP AST 莿彌瞠h
do_aki
?
PPT
Google Perf Tools (tcmalloc) の聞い圭
Kazuki Ohta
?
PPTX
190925 python-windows
Takuya Nishimoto
?
PPTX
PHP と SAPI と ZendEngine3 と
do_aki
?
PDF
階酒gヽС棆厩艶姻壊庄看稼秘壇 扮険
Shin Tanigawa
?
ODP
Symfony2 workshop-0 (nagoya 2011/2/10)
Hidenori Goto
?
PDF
Kickstart, Puppet, Docker
Hirokazu Tokuno
?
KEY
Cost of ovs receiving process
Takuya ASADA
?
PPTX
php-src のiき圭
do_aki
?
PDF
Nas4 freeへzabbix agentを秘してみた
kometch H
?
PDF
"More" Introduction to Zend Tool
sasezaki
?
PDF
タスクマネ`ジャ`の貧井Process ExplorerのB初
Shin Tanigawa
?
PPT
安艶恢サ`バの児粥岑紛‐園鹿gみ/
Kikunaga Taishi
?
PPTX
悪顎恢艶姻稼艶岳艶壊できること
iPride Co., Ltd.
?
PPTX
Metasploit framework
zatslide
?
PDF
えておきたい zypper コマンドの聞い圭
Fuminobu Takeyama
?
PPTX
遺温壊沿艶姻逮壊のインスト`ル
Kohei Misu
?
階酒g!皆顎恢厩艶姻壊庄看稼秘壇 古廷園
Shin Tanigawa
?
シェル秘壇
ina job
?
php7's ast
do_aki
?
PHP AST 莿彌瞠h
do_aki
?
Google Perf Tools (tcmalloc) の聞い圭
Kazuki Ohta
?
190925 python-windows
Takuya Nishimoto
?
PHP と SAPI と ZendEngine3 と
do_aki
?
階酒gヽС棆厩艶姻壊庄看稼秘壇 扮険
Shin Tanigawa
?
Symfony2 workshop-0 (nagoya 2011/2/10)
Hidenori Goto
?
Kickstart, Puppet, Docker
Hirokazu Tokuno
?
Cost of ovs receiving process
Takuya ASADA
?
php-src のiき圭
do_aki
?
Nas4 freeへzabbix agentを秘してみた
kometch H
?
"More" Introduction to Zend Tool
sasezaki
?
タスクマネ`ジャ`の貧井Process ExplorerのB初
Shin Tanigawa
?
安艶恢サ`バの児粥岑紛‐園鹿gみ/
Kikunaga Taishi
?
悪顎恢艶姻稼艶岳艶壊できること
iPride Co., Ltd.
?
Metasploit framework
zatslide
?
えておきたい zypper コマンドの聞い圭
Fuminobu Takeyama
?
遺温壊沿艶姻逮壊のインスト`ル
Kohei Misu
?

Viewers also liked (20)

PDF
Implementing SSH in Java
Atsuhiko Yamanaka
?
PDF
Man-in-the-Middle Attack for SSH with Scala and JSch
Atsuhiko Yamanaka
?
PDF
an introduction to Distem
nussbauml
?
PDF
A Hippopotamus for Christmas
Bruno Lowagie
?
PPTX
Four failures and one hit
Bruno Lowagie
?
PPTX
ZUGFeRD: an overview
iText Group nv
?
PDF
Infrastructure as code might be literally impossible
ice799
?
PPTX
Startup Legal and IP
Bruno Lowagie
?
PDF
Porting linux to a new architecture
KALRAY
?
PDF
All of Your Network Monitoring is (probably) Wrong
ice799
?
PPTX
Digital Signatures: how it's done in PDF
iText Group nv
?
PPTX
Vert.x vs akka
Chang-Hwan Han
?
PDF
Why vREST?
vrest_io
?
PDF
Java 9 C The Ultimate Feature List
Takipi
?
PDF
Ingesting Drone Data into Big Data Platforms
Timothy Spann
?
PDF
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
?
PDF
Linux Systems Performance 2016
Brendan Gregg
?
PPTX
Broken Linux Performance Tools 2016
Brendan Gregg
?
PDF
BPF: Tracing and more
Brendan Gregg
?
PDF
Velocity 2015 linux perf tools
Brendan Gregg
?
Implementing SSH in Java
Atsuhiko Yamanaka
?
Man-in-the-Middle Attack for SSH with Scala and JSch
Atsuhiko Yamanaka
?
an introduction to Distem
nussbauml
?
A Hippopotamus for Christmas
Bruno Lowagie
?
Four failures and one hit
Bruno Lowagie
?
ZUGFeRD: an overview
iText Group nv
?
Infrastructure as code might be literally impossible
ice799
?
Startup Legal and IP
Bruno Lowagie
?
Porting linux to a new architecture
KALRAY
?
All of Your Network Monitoring is (probably) Wrong
ice799
?
Digital Signatures: how it's done in PDF
iText Group nv
?
Vert.x vs akka
Chang-Hwan Han
?
Why vREST?
vrest_io
?
Java 9 C The Ultimate Feature List
Takipi
?
Ingesting Drone Data into Big Data Platforms
Timothy Spann
?
Linux Performance Analysis: New Tools and Old Secrets
Brendan Gregg
?
Linux Systems Performance 2016
Brendan Gregg
?
Broken Linux Performance Tools 2016
Brendan Gregg
?
BPF: Tracing and more
Brendan Gregg
?
Velocity 2015 linux perf tools
Brendan Gregg
?
Ad

JZlib and an aged fixed bug in java7