### Micco's Home Page ### Welcome to Micco's page!!
Sorry, but this web page is written in Japanese.
<English>
■ 更新情報
■ このWebページについて
■ お知らせ
■ ダウンロード
■ DLL のインストール方法
■ SFX の設定例
■ いろいろ
対応ブラウザー
[Internet Explorer] [Firefox] [Opera] [Sleipnir] [Safari] [Google Chrome]
連絡先:Micco
[e-mail]
[→『脆弱性情報一覧』] [→Home]

<公開:Aug.18,2004 最終更新:Aug.23,2004>

MHSVI#20040818-01:
UNLHA32.DLL におけるディレクトリー・トラバーサルの脆弱性

 このページは『『指定外の場所へファイルが展開されてしまう脆弱性』の問題について』で記述されている内容を UNLHA32.DLL の脆弱性情報として再構成したものです。


概要

 UNLHA32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNLHA32.DLL にはディレクトリー・トラバーサルの脆弱性が存在します。

影響を受けるモジュール及びシステム

  • UNLHA32.DLL Ver 1.91.5.19 及びそれ以前
  • 上記を利用しているアプリケーション

詳細情報

 UNLHA32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, LZH, LZS 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 UNLHA32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, ディレクトリー・トラバーサルの脆弱性が含まれており, 細工された書庫を読み込むことで, アプリケーションやユーザーが指定・想定していない場所へファイルの展開される可能性があります。

想定される影響

 アプリケーションやユーザーが指定・想定していない場所へファイルの展開される可能性があります。

対策方法

 最新版 (Ver 1.91f 以降) へバージョンアップを行ってください。 [ダウンロード]

回避方法

  • アプリケーション側で UNLHA32.DLL の使用有無等を行える場合は, UNLHA32.DLL を使用しない, 別の DLL や代替方法を選択する, といった設定を行うことで回避を行うことが可能です。
  • アプリケーション側で絶対パス使用の有無を行える場合は, 絶対パスを無効とすることで, 部分的に (絶対パスについて) 影響を回避することが可能です。
  • UNLHA32.DLL の設定ダイアログを呼び出せる場合は, UNLHA32.DLL が絶対パスを使用しないように設定することで, 部分的に (絶対パスについて) 影響を回避できる可能性があります。
    なお, アプリケーション側で当該ダイアログでの設定を無効化している場合が多々あることから, この回避方法は有効とは言えません。
  • 古い版を使用する必要がある場合, アプリケーション側の変更 (再コンパイル等。) を行えるのであれば, UnlhaSetEnumMembersProc(), UnlhaSetOwnerWindowEx() といったAPI を使用することにより, アプリケーション側によるチェックを行うことで回避が可能となります。

技術情報

 本脆弱性は, LZH 書庫の仕様が "../../path/file.bin", "/path/file.bin" といった, 基準ディレクトリーより遡るものや絶対パスを, 正規のものとして許可していることにより発生するものです。

 主に問題となるのは, "../../path/file.bin" といったパスとシステム API の仕様が組み合わさることで脆弱性に繋がることです。 例えば, この相対パスと "C:/TMP/" の基準ディレクトリー (展開先) を組み合わせた "C:/TMP/../../path/file.bin" というパスは, 途中でルートを越えて遡ってしまうことから, 本来はエラーとすべきものです。 しかし, Windows は, 余剰な "../" を無視することで "C:/path/file.bin" という正常なパスとして, そのまま無警告で扱ってしまいます。

 この仕様を利用することで, "../../~/../path/file.bin" といった多数の "../" を含んだパスを使用することにより, ユーザー (若しくはアプリケーション) が, どこを展開先として指定していたとしても, 必ず固定である "/path/file.bin" の場所に展開される…といった攻撃手段が成立します。

 絶対パスについては, 過去よりバックアップ等の用途で普通に使われてきたものですが, 上記のケースと同様の攻撃手段として利用が可能である事実から, 脆弱性として認識されるようになったものです。 (もちろん, 絶対パスを必要とするケースもありますので, 全面的に否定されているわけではありません。)  ちなみに, ARJ 系の独自スイッチという理由もあって一般には知られていないようですが, 絶対パスについては元々 "-jf0" を指定することにより抑制が可能です。

更新履歴

  • 脆弱性情報の公開 [Aug.18,2004]
  • (別件の) 修正版公開に伴う対策情報の更新 [Aug.23,2004]

参考情報

[→Page top] [→『脆弱性情報一覧』] [→Home]