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.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環境に標準でインストールされているので,これを使うのがオススメだ。