How to solve ‘Possible directory traversal hack attempt in ./file’ on lha command
LHA形式のファイル(.lzh/.lha)をlhaコマンドで解凍しようとするとエラーが発生した。この問題の対処方法を記述する。
Reproduction
- 昔の配布元から[lha for unix verion 1.14i+ac20040929]までのバージョンの
lhaをインストールする。 - インストールしたlhaを使って以下のコマンドを実行する。
touch a.dat
lha c a.lzh ./a.dat
lha x a.lzhPossible 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環境に標準でインストールされているので,これを使うのがオススメだ。
