CVE-2018-16396: Array#pack および String#unpack の一部のフォーマット指定においてtaintフラグが伝播しない脆弱性について
CVE-2018-16396: Array#pack および String#unpack の一部のフォーマット指定においてtaintフラグが伝播しない脆弱性について:
この脆弱性は、CVE-2018-16396 として登録されています。
本来であれば、配列の要素の中に taint フラグが立っているものが含まれていれば、返す文字列にもそれが伝播して taint フラグが立つべきです。
また、その逆を行う
ところが、
このため、外部の信頼できない入力をこれらのフォーマットを指定して文字列化していて、かつ、その生成された文字列が信頼できるかどうかの判断に taint フラグを使用していた場合、および、外部の信頼できない入力文字列をこれらのフォーマットを指定して unpack し、かつ、その生成された各要素が信頼できるかどうかの判断に taint フラグを使用していた場合、誤った判断となってしまう可能性があります。
この問題の影響を受けるバージョンの Ruby のユーザーは、速やかに問題の修正されたバージョンに更新してください。
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) 初版
コメント
コメントを投稿