Tomcat 6.0.16/5.5.26/4.1.37以下のバージョンにて発生するディレクトリトラバーサルの脆弱性について検証を行ったPDFドキュメントです。
この問題はserver.xmlまたはcontext.xmlに「URIEncoding=”UTF-8”」「allowLinking=”true”」という設定をしていた場合に起こります。Tomcat 4系以外は問題を修正した最新バージョンが公開されていますので、なるべく早めにバージョンアップを行ったほうがよいでしょう。
このドキュメントではまず「冗長なUTF-8表現」について説明しています。冗長なUTF-8表現とは、本来1バイトや2バイトで表現できる文字を2バイト、3バイトで表すことで、現在は仕様として禁止されています。たとえば「.(ピリオド)」「/(スラッシュ)」を冗長なUTF-8表現で表すと表1のようになります。
ドキュメントでは、これらを利用して、「/../a.htm」というパスでアクセスできない場合でも「/% c0%ae% c0% ae/a.htm」や「/% e0% 80%ae% e0% 80% ae/a.htm」というパスに置き換えるとアクセスできてしまう例を示しています。スラッシュを置き換えた場合も同様に「/..% c0% afa.html」や「/..% e0% 80% afa.html」でアクセスできてしまいます。
また、TomcatにてOSバイナリの実行プログラムのCGIを許可している設定をしていた場合、「/sbin/ifconfig」などの任意のプログラムを実行してしまう問題が起きてしまうことも実証しています。
表1 冗長なUTF-8表現
文字 | 1バイト UTF-8 | 2バイト UTF-8 | 3バイト UTF-8 |
.(ピリオド) | 0x2E | 0xC0 0xAE | 0xE0 0x80 0xAE |
/(スラッシュ) | 0x2F | 0xC0 0xAF | 0xE0 0x80 0xAF |
URL:http://rocketeer.dip.jp/secProg/Tomcat003.pdf