事例:CVE-2020-8159: Arbitrary file write/potential remote code execution in actionpack_page-caching
actionpack_page-caching でのPath traversal
CVE-2020-8159 Arbitrary file write/potential remote code execution in actionpack_page-caching
問題
件のgemではアクセスされたURLのパスをもとにキャッシュファイルが生成されていた
http://localhost:3000/books/1%2f%2e%2e%2f%2e%2e%2f%2e%2e%2ftest のようなURLでもアクセス可能
ActiveRecordの.findは先頭に数字がある場合はそれ以降の文字列を扱わないため、先頭の1だけでクエリが生成される
キャッシュファイルのパスに../などを含めることができたため、任意のパスにキャッシュファイルを生成可能
書き込みのみで、任意のパスのファイルの読み込みはできない
viewの組み合わせ次第ではRCEが可能
キャッシュされたファイルへの入力に<%があってもHTML escapeされる
.text.erbなどではHTMLタグがescapeされない
細工したERBまたはrubyのファイルとしてキャッシュできる
template injectionまたはcode injectionによるRCEが可能
レポート
https://hackerone.com/reports/519220
修正コミット
https://github.com/rails/actionpack-page_caching/commit/127da70a559bed4fc573fdb4a6d498a7d5815ce2
https://github.com/advisories/GHSA-mg5p-95m9-rmfp
#事例
#CVE