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.0 リリース

Ruby 4.0.0 が公開されました。 Ruby 4.0 には “Ruby Box”、”ZJIT” ほか多数の改善が含まれています。

Posted by naruse on 25 Dec 2025

サイトのアイデンティティの再設計

サイトの包括的なデザインのアップデートを発表できることを嬉しく思います。今回の更新ではTaeko Akatsukaさんにデザインを担当していただきました。

Posted by Hiroshi SHIBATA on 22 Dec 2025

Ruby 4.0.0 preview2 リリース

Ruby 4.0.0-preview2 が公開されました。Ruby 4.0では、Unicodeバージョンの17.0.0へのアップデートなど様々な改善が行われています。

Posted by naruse on 17 Nov 2025

もっと読む...