CVE-2018-16396: 特定命令下受污染标记未如实展开到 Array#pack 和 String#unpack 结果中

使用 Array#packString#unpack 处理某些特定格式时,原数据的受污染标记并未展开至返回的字符串或数组中。此缺陷已被分配 CVE 编号 CVE-2018-16396

细节

Array#pack 方法将其接收的内容转换成某一特定格式。当参数包含一些受污染的对象,返回字符串也应该包含这些污染。Array#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 及更早版本
  • SVN 主干早于 r65125 的全部版本

鸣谢

感谢 Chris Seaton 报告了这一问题。

历史

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