事例: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だけでクエリが生成される キャッシュファイルのパスに../などを含めることができたため、任意のパスにキャッシュファイルを生成可能
書き込みのみで、任意のパスのファイルの読み込みはできない
キャッシュされたファイルへの入力に<%があってもHTML escapeされる
.text.erbなどではHTMLタグがescapeされない
細工したERBまたはrubyのファイルとしてキャッシュできる
レポート
修正コミット