CVE-2018-16396: 在某些指令下,Array#pack 和 String#unpack 中受污染的标记不会被传播

在某些格式下,Array#packString#unpack 中,原始数据的受污染标记不会传播到返回的字符串/数组。此漏洞已被分配 CVE 标识符 CVE-2018-16396

详细信息

Array#pack 方法使用指定的格式将接收器的内容转换为字符串。如果接收器包含一些受污染的对象,则返回的字符串也应该是受污染的。String#unpack 方法将接收器转换为数组,也应该将其受污染的标记传播到返回的数组中包含的对象。但是,使用 BbHh 指令时,受污染的标记不会传播。因此,如果脚本通过使用这些指令的 Array#pack 和/或 String#unpack 处理不可靠的输入,并使用受污染的标记检查可靠性,则该检查可能是错误的。

所有运行受影响版本的用户应立即升级。

受影响的版本

  • Ruby 2.3 系列:2.3.7 及更早版本
  • Ruby 2.4 系列:2.4.4 及更早版本
  • Ruby 2.5 系列:2.5.1 及更早版本
  • Ruby 2.6 系列:2.6.0-preview2 及更早版本
  • 早于 trunk 版本 r65125

鸣谢

感谢 Chris Seaton 报告此问题。

历史记录

  • 最初发布于 2018-10-17 14:00:00 (UTC)