CVE-2018-16396: Array#pack および String#unpack の一部のフォーマット指定においてtaintフラグが伝播しない脆弱性について
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) 初版
最近のニュース
Ruby 4.0.2 リリース
Ruby 4.0.2 がリリースされました。
Posted by k0kubun on 16 Mar 2026
Ruby 3.4.9 リリース
Ruby 3.4.9 がリリースされました。
Posted by nagachika on 11 Mar 2026
関西Ruby会議09の参加登録が開始されました
日本Rubyの会が後援する、地域Ruby会議(RegionalRubyKaigi)の1つである関西Ruby会議09の参加登録が開始されました。
Posted by Yudai Takada(@ydah) on 3 Mar 2026
Ruby 4.0.0 リリース
Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。
Posted by naruse on 25 Dec 2025