UNLHA32.DLL は, LZH, LZS 形式に対応した圧縮・展開等の書庫操作を行うライブラリーです。 UNLHA32.DLL にはディレクトリー・トラバーサルの脆弱性が存在します。
UNLHA32.DLL は, 『統合アーカイバ』の API 仕様に準拠した, LZH, LZS 形式書庫に対して圧縮・展開といった操作を行うためのライブラリーです。 UNLHA32.DLL は主に圧縮・展開等を行うアーカイバーソフトウェアから呼び出される形で使用されますが, ディレクトリー・トラバーサルの脆弱性が含まれており, 細工された書庫を読み込むことで, アプリケーションやユーザーが指定・想定していない場所へファイルの展開される可能性があります。
アプリケーションやユーザーが指定・想定していない場所へファイルの展開される可能性があります。
最新版 (Ver 1.91f 以降) へバージョンアップを行ってください。 [ダウンロード]
本脆弱性は, 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" を指定することにより抑制が可能です。