Path Traversal
別名: Directory Traversal
誤ったファイルパスの取り扱いを利用して、プログラムが想定していないファイルを処理させる脆弱性
典型的には、../../../../etc/passwdや/etc/passwdを入力して/etc/passwdを処理させるような攻撃
File readならLocal File Inclusionが狙える
File writeならRemote Code Executionが狙える
例
Local File Inclusionの例を参照
典型的なPath Traversalである
対策
パスからファイル名だけを取り出して扱うようにする
多くのユースケースではこれで十分
Python os.path.basename
パスを検証する
想定していない相対パスや絶対パスであるかどうかを調べる
Werkzeugの実装 https://github.com/pallets/werkzeug/blob/b1911cd0a054f92fa83302cdb520d19449c0b87b/src/werkzeug/security.py#L110
Windowsではスラッシュは\だったり、C:でドライブ指定できたりするので環境による挙動の違いに注意
末尾のスラッシュにも注意
/fooというディレクトリがあり、先頭が/fooで始まっているかでチェックしている場合、/fooabcのようなパスが通るので注意
パスを検証した後に処理を加えないこと
例えばパスを検証した後にURL Decodeがされる場合、%2E%2E%2Fでチェックを回避できる
脆弱性を作りこみやすいので注意
テクニック
全体の../が一回だけ削除される場合
..././を入れると削除後に../になる
..が削除される場合は多分無理
nginx
alias traversal
誤った設定のaliasがあると、上のディレクトリにさかのぼれる可能性がある
Nginxのalias traversalについて https://tkmr.hatenablog.com/entry/2019/03/05/002531
nginxでは/より前にさかのぼるパスは弾かれる
/cgi-bin/../../etc/passwdのようなパスはBad Requestになる
merge_slashes off;のときは//////cgi-bin/../../etc/passwdのようにすれば回避できる
WaniCTF 2021 - traversal https://github.com/wani-hackase/wanictf2021-writeup/tree/main/web/traversal
ALB配下のApache HTTP Serverに対して脆弱性(CVE-2021-41733)の再現ができない理由をNGINXの挙動から考えてみた https://dev.classmethod.jp/articles/apache-cve-alb-nginx/
この挙動の詳細な解説が載っている
HackTricks https://book.hacktricks.xyz/network-services-pentesting/pentesting-web/nginx
ヌルバイト攻撃
Local File Inclusionを参照
シンボリックリンクの悪用
Local File Inclusionを参照
Zip Slip
Python os.path.join
os.path.join("./aaa", "/bbb")は/bbbを返す
UIUCTF 2020 - security_question https://graneed.hatenablog.com/entry/2021/08/09/115452#Pythonのospathjoin関数の仕様を利用したディレクトリトラバーサル
os.path.normpath
TODO CVE入れる
Exploit関連
Path Traversalで任意のテンプレートをrenderできるときなど、都合のいいファイルをサーバーに置きたいときがある
Webサーバーの機能の悪用
nginxやapacheなどで生成されるログファイルを利用して攻撃者が指定した文字列を含むファイルを作れる場合がある
セッション情報が保存されるファイルや、ファイルアップロードの際に生成される一時ファイルも悪用できる
TODO: 1linephpのやつ貼る
LFI時にファイルがcloseされてなければ、ファイル名がわからなくても/proc/self/fd/Xが利用できる
PHP LFI with Nginx Assistance https://bierbaumer.net/security/php-lfi-with-nginx-assistance/
hxp CTF 2022 - sqlite_web https://hxp.io/blog/102/hxp-CTF-2022-sqlite_web/
Flaskの一時ファイルを利用
資料
IPA https://www.ipa.go.jp/security/vuln/websecurity-HTML-1_3.html