How to solve ‘Possible directory traversal hack attempt in ./file’ on lha command

LHA形式のファイル(.lzh/.lha)をlhaコマンドで解凍しようとするとエラーが発生した。この問題の対処方法を記述する。

Reproduction

  1. 昔の配布元から[lha for unix verion 1.14i+ac20040929]までのバージョンのlhaをインストールする。
  2. インストールしたlhaを使って以下のコマンドを実行する。
touch a.dat
lha c a.lzh ./a.dat
lha x a.lzh
Possible directory traversal hack attempt in ./a.dat

圧縮ファイル(a.lzh)内に./a.datのように./から始まるファイルがある場合,解答しようとするとエラーが出てしまっている。

以下のサイトで解説されている通り,おそらく圧縮ファイル内に../a.datのような相対パスがある場合に圧縮ファイル外のファイルを上書きして破壊することを防ぐための安全策が誤動作している。./から始まるファイルは現在位置を意味するので,展開できなければならない。

Possible directory traversal hack attempt – まじかる☆やす (aka. マミ) の Ragnarok Online 日記 – ラグナロク オン はてな

Answer 1: Update lha

この問題は,[lha for unix verion 1.14i+ac20040929]またはそれ以前のバージョンのlhaで発生する。そこで,新しい配布元から,[lha (1.14i-ac20050924)]またはそれより新しいバージョンのインストールし直す。

Answer 2: Use 7z or jLHA

lhaの他にLHA形式のファイルを解凍するコマンドとして,7zとjLHAが存在する。lhaの代わりにこれらのコマンドを使う。

7zは多くのLinux環境に標準でインストールされているので,これを使うのがオススメだ。

LHA書庫(.lzh/.lhaファイル)をLinuxで扱う – kakurasan

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です