Lazy Diary @ Hatena Blog

PowerShell / Java / miscellaneous things about software development, Tips & Gochas. CC BY-SA 4.0/Apache License 2.0

rbashでディレクトリトラバーサルは防げない

satob.hatenablog.com

で挙げた

# cat authorized_keys
command="ls /$SSH_ORIGINAL_COMMAND" ssh-rsa AAAAB....

$ ssh root@xxx.xxx.xxx.xxx -i ~/.ssh/com "tmp;hostname"
ls: /tmp;hostname: No such file or directory

みたいなケースで$SSH_ORIGINAL_COMMAND../とかを指定される問題の対策にrbashが使えないかと思って調べてみた。

$ echo $0
rbash
$ /bin/sh
rbash: /bin/sh: restricted: cannot specify `/' in command names
$ ./sanitize1.sh
rbash: ./sanitize1.sh: restricted: cannot specify `/' in command names
$ ls ../
satob

rbashで制限できるのは「実行プログラムのパスに/が含まれるケース」だけで、引き数に/が含まれるケースは制限してくれない。そのため、ディレクトリトラバーサルの防止には使えない。