Posted by usa on 17 Oct 2018
Array#pack
および String#unpack
の一部のフォーマット指定において、元データの taint フラグが適切に出力文字列・配列に対して伝播しないという脆弱性が発見されました。
この脆弱性は、CVE-2018-16396 として登録されています。
詳細
Array#pack
メソッドでは、引数で指定されたフォーマット文字列に従い、レシーバである配列の内容を文字列に変換したものを返します。
本来であれば、配列の要素の中に taint フラグが立っているものが含まれていれば、返す文字列にもそれが伝播して taint フラグが立つべきです。
また、その逆を行う String#unpack
メソッドにおいても、レシーバである文字列に taint フラグが立っている場合、返される配列とその各要素にそれが伝播して taint フラグが立たなければなりません。
ところが、 B
b
H
h
というフォーマットに関しては、taint フラグが伝播していませんでした。
このため、外部の信頼できない入力をこれらのフォーマットを指定して文字列化していて、かつ、その生成された文字列が信頼できるかどうかの判断に taint フラグを使用していた場合、および、外部の信頼できない入力文字列をこれらのフォーマットを指定して unpack し、かつ、その生成された各要素が信頼できるかどうかの判断に taint フラグを使用していた場合、誤った判断となってしまう可能性があります。
この問題の影響を受けるバージョンの Ruby のユーザーは、速やかに問題の修正されたバージョンに更新してください。
影響を受けるバージョン
- Ruby 2.3.7 以前の全ての Ruby 2.3 系列
- Ruby 2.4.4 以前の全ての Ruby 2.4 系列
- Ruby 2.5.1 以前の全ての Ruby 2.5 系列
- Ruby 2.6.0-preview2 以前の全ての Ruby 2.6 プレビュー
- revision 65125 より前の開発版
クレジット
この脆弱性は、Chris Seaton 氏が報告してくださいました。
更新履歴
- 2018-10-17 23:00:00 (JST) 初版