版本
- 适用于 JDK 23 的 GraalVM(最新)
- 适用于 JDK 24 的 GraalVM(抢先体验)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发版本
安全
请通过 漏洞报告指南 中概述的流程报告安全漏洞。可在 SECURITY 文件 中找到有关报告 GraalVM 项目(包括 TruffleRuby)安全问题的具体指南。
MRI 漏洞 #
针对 MRI 报告的漏洞可能适用于 Ruby 的设计或我们与 MRI 共享的代码。我们在本文档中列出了已报告的 MRI 漏洞,并记录了 MRI 如何缓解漏洞(如果有任何东西测试了缓解措施),以及 TruffleRuby 如何缓解漏洞。我们没有调查所有旧漏洞,因为从旧报告中找出详细信息通常非常困难。
与 MRI 网站 上的详细信息交叉引用。
编号 | 描述 | 他们的缓解措施 | 测试 | 我们的缓解措施 |
---|---|---|---|---|
CVE-2024-27282 | 使用正则表达式搜索的任意内存地址读取漏洞 | 修复 | 由于 Java 语义,不适用 | |
CVE-2024-27281 | RDoc 中 `.rdoc_options` 的 RCE 漏洞 | 修复 | 测试 | 不适用,因为 TruffleRuby 不会在 gem install 上生成 rdoc |
CVE-2024-27280 | StringIO 中的缓冲区溢出漏洞 | 修复 | 测试 | 不适用,我们使用 Ruby 实现的 StringIO |
CVE-2023-36617 | URI 中的 ReDoS 漏洞 | 修复 | 测试 | 由于 TRegex,不适用 |
CVE-2023-28756 | Time 中的 ReDoS 漏洞 | 修复 | 测试 | 由于 TRegex,不适用 |
CVE-2023-28755 | URI 中的 ReDoS 漏洞 | 修复 | 测试 | 由于 TRegex,不适用 |
CVE-2021-33621 | CGI 中的 HTTP 响应拆分 | 修复 | 测试 | 相同 |
CVE-2022-28739 | 字符串到浮点数转换中的缓冲区溢出 | 由于 Java 语义,不适用 | ||
CVE-2022-28738 | Regexp 编译中的双重释放 | 由于 Java 语义,不适用 | ||
CVE-2021-41819 | CGI::Cookie.parse 中的 Cookie 前缀欺骗 | 修复 | 测试 | 相同 |
CVE-2021-41817 | 日期中的正则表达式拒绝服务漏洞 (ReDoS) | 修复 | 测试 | 由于 TRegex,不适用 |
CVE-2021-41816 | CGI.escape_html 中的缓冲区溢出 | 修复 | 测试 | 不适用,我们使用 Ruby 定义的 CGI.escape_html |
CVE-2021-31810 | Net::FTP 中信任 FTP PASV 响应的漏洞 | 修复 | 测试 | 相同 |
CVE-2021-32066 | Net::IMAP 中的 StartTLS 剥离漏洞 | 修复 | 测试 | 相同 |
CVE-2021-31799 | RDoc 中的命令注入漏洞 | 修复 回溯 | 测试 | 相同 |
CVE-2021-28966 | Windows 上 Tempfile 中的路径遍历 | tmpdir.rb 中的路径清理 | 在 test/mri/tests/test_tmpdir.rb 中 |
tmpdir.rb 中的路径清理 |
CVE-2021-28965 | REXML 中的 XML 往返漏洞 | 更新到 REXML 3.2.5 | 在 ruby/rexml 中 | 更新到 REXML 3.2.5 |
CVE-2020-10663 | JSON 中的不安全对象创建漏洞(附加修复) | 修复 | 规范 | 我们使用的纯 Ruby 版本的 JSON 是安全的 |
CVE-2019-16255 | Shell#[] 和 Shell#test 的代码注入漏洞 | 修复 | MRI 测试 | 相同 |
CVE-2019-16254 | WEBrick 中的 HTTP 响应拆分(附加修复) | 修复 | MRI 测试 | 相同 |
CVE-2019-15845 | File.fnmatch 和 File.fnmatch? 的 NUL 注入漏洞 | 修复 | MRI 测试 | 检查 NUL 字节 |
CVE-2019-16201 | WEBrick 的 Digest 访问身份验证的正则表达式拒绝服务漏洞 | 修复 | MRI 测试 | 相同 |
CVE-2012-6708 | RDoc 中的多个 jQuery 漏洞 | 删除 jquery.js | N/A | 相同 |
CVE-2015-9251 | RDoc 中的多个 jQuery 漏洞 | 删除 jquery.js | N/A | 相同 |
CVE-2019-8320 | 解压缩 tar 时使用符号链接删除目录 |
检查扩展路径 | 在 MRI test/rubygems/test_gem_package.rb 中测试 |
应用了相同的补丁 |
CVE-2019-8321 | verbose 中的转义序列注入 |
清理消息 | 在 ruby/spec :security 中测试 |
应用了相同的补丁 |
CVE-2019-8322 | gem owner 中的转义序列注入 |
清理消息 | 在 ruby/spec :security 中测试 |
应用了相同的补丁 |
CVE-2019-8323 | API 响应处理中的转义序列注入漏洞 | 清理消息 | 在 ruby/spec :security 中测试 |
应用了相同的补丁 |
CVE-2019-8324 | 安装恶意 gem 可能导致任意代码执行 | 在预安装检查之前验证 gem | 在 MRI test/rubygems/test_gem_installer.rb 中测试 |
应用了相同的补丁 |
CVE-2019-8325 | 错误中的转义序列注入 | 清理错误消息 | 在 ruby/spec :security 中测试 |
应用了相同的补丁 |
CVE-2018-16395 | OpenSSL::X509::Name 等式检查无法正常工作 |
|||
CVE-2018-16396 | 在 Array#pack 和 String#unpack 中使用某些指令时,污染标志不会传播 |
额外的污染操作 | 在 ruby/spec :security 中测试 |
额外的污染操作 |
CVE-2018-6914 | tempfile 和 tmpdir 中使用目录遍历意外创建文件和目录 |
路径清理 | 在 ruby/spec :security 中测试 |
路径清理 |
CVE-2018-8779 | UNIXServer 和 UNIXSocket 中的 NUL 字节中毒导致意外创建套接字 |
检查 NUL 字节 | 在 ruby/spec :security 中测试 |
检查 NUL 字节 |
CVE-2018-8780 | Dir 中的 NUL 字节中毒导致意外目录遍历 |
检查 NUL 字节 | 在 ruby/spec :security 中测试 |
检查 NUL 字节 |
CVE-2018-8777 | WEBrick 中的 DoS 攻击,原因是请求过大 | 用于报头长度的逻辑 | 在 MRI test/webrick/test_httpserver.rb 中测试 |
应用了相同的缓解措施 |
CVE-2017-17742 | WEBrick 中的 HTTP 响应拆分 | 用于无效报头的逻辑 | 在 ruby/spec :security 中测试 |
应用了相同的缓解措施 |
CVE-2018-8778 | String#unpack 中的缓冲区下读 | 范围检查 | 在 ruby/spec :security 中测试 |
范围检查 |
CVE-2017-17405 | Net::FTP 中的命令注入漏洞 |
将命令中的路径明确视为路径,而不是通用 IO 命令 | 在 MRI test/net/ftp/test_ftp.rb 中测试 |
应用了相同的缓解措施 |
CVE-2017-10784 | WEBrick 的基本身份验证中的转义序列注入漏洞 | 正确转义日志 | 在 MRI test/webrick/test_httpauth.rb 中测试 |
应用了相同的缓解措施 |
CVE-2017-0898 | Kernel.sprintf 中的缓冲区下溢漏洞 |
|||
CVE-2017-14033 | OpenSSL ASN1 解码中的缓冲区下溢漏洞 | |||
CVE-2017-14064 | 生成 JSON 时出现的堆暴露漏洞 | |||
CVE-2017-0902, CVE-2017-0899, CVE-2017-0900, CVE-2017-0901 | RubyGems 中的多个漏洞 | |||
CVE-2015-7551 | Fiddle 和 DL 中不安全的使用污染字符串(CVE-2009-5147 缓解措施的回归) | 额外的污染检查 | 在 MRI test/mri/tests/fiddle/test_handle.rb 中测试 |
不适用,因为我们不支持 $SAFE ,并且 DL 模块已在 Ruby 2.2.0 中删除 |
CVE-2015-1855 | Ruby OpenSSL 主机名验证 | |||
CVE-2014-8090 | 另一个 XML 扩展拒绝服务 | |||
CVE-2014-8080 | XML 扩展拒绝服务 | 在 ruby/spec :security 中测试 |
||
无 | 更改 ext/openssl 的默认设置 | |||
CVE-2014-2734 | 漏洞争议 | |||
CVE-2014-0160 | TLS 心跳扩展中的 OpenSSL 严重漏洞 | |||
CVE-2014-2525 | YAML URI 转义解析中的堆溢出 | |||
CVE-2013-4164 | 浮点数解析中的堆溢出 | 在 ruby/spec :security 中测试 |
||
CVE-2013-4073 | SSL 客户端中的主机名检查绕过漏洞 | |||
CVE-2013-2065 | Ruby 中 DL 和 Fiddle 中的对象污染绕过 | 额外的污染检查 | 在 MRI test/mri/tests/fiddle/test_func.rb 中测试 |
不适用,因为我们不支持 $SAFE ,并且 DL 模块已在 Ruby 2.2.0 中删除 |
CVE-2013-1821 | REXML 中的实体扩展 DoS 漏洞 | |||
CVE-2013-0269 | JSON 中的拒绝服务和不安全对象创建漏洞 | |||
CVE-2013-0256 | rdoc 生成的 RDoc 文档的 XSS 利用 |
|||
CVE-2012-5371 | ruby 1.9 的哈希泛滥 DoS 漏洞 | |||
CVE-2012-4522 | 由于插入非法 NUL 字符导致的意外文件创建 | |||
CVE-2012-4464, CVE-2012-4466 | Exception#to_s / NameError#to_s 的 $SAFE 转义漏洞 |
不适用,因为我们不支持 $SAFE |
||
无 | RubyGems 的安全修复:远程存储库的 SSL 服务器验证失败 | |||
CVE-2011-3389 | Ruby OpenSSL 模块的安全修复:允许 0/n 拆分以防止 TLS BEAST 攻击 | |||
CVE-2011-4815 | Ruby 的 Hash 算法发现拒绝服务攻击(交叉引用 CVE-2011-4838、CVE-2012-5370、CVE-2012-5372) | 通过合并进程启动时间使哈希值变得非确定性 | 在 ruby/spec :security 中测试 |
通过合并来自 /dev/urandom 的种子使哈希值变得非确定性 |
无 | 异常方法可以绕过 $SAFE |
不适用,因为我们不支持 $SAFE |
||
无 | FileUtils 容易受到符号链接竞争攻击 | |||
CVE-2010-0541 | WEBrick 中的 XSS | WEBrick 不再附带 | ||
无 | ARGF.inplace_mode= 中的缓冲区溢出 |
|||
无 | WEBrick 存在转义序列注入漏洞 | WEBrick 不再附带 | ||
CVE-2009-5147 | DL::dlopen 使用污染的名称打开库 |
额外的污染检查 | 现代 Ruby 中不存在 DL 模块 |
不适用,因为我们不支持 $SAFE ,并且 DL 模块已在 Ruby 2.2.0 中删除 |
CVE-2009-4124 | String 中的堆溢出 |
|||
无 | BigDecimal 中的 DoS 漏洞 |
|||
无 | REXML 中的 DoS 漏洞 |
|||
CVE-2008-1447 | Ruby 中的多个漏洞 | |||
CVE-2008-2662, CVE-2008-2663, CVE-2008-2725, CVE-2008-2726, CVE-2008-2664, CVE-2008-1891 | 任意代码执行漏洞 | |||
无 | WEBrick 的文件访问漏洞 | WEBrick 不再附带 | ||
无 | Net::HTTPS 漏洞 |
|||
JVN#84798830 | CGI 库中的另一个 DoS 漏洞 | |||
CVE-2006-5467 | CGI 库中的 DoS 漏洞 | |||
VU#160012 | 安全级别设置中的 Ruby 漏洞 | 不适用,因为我们不支持 $SAFE |
JRuby 漏洞 #
TruffleRuby 使用来自 JRuby 的代码,因此针对 JRuby 报告的漏洞可能适用于 TruffleRuby。
编号 | 描述 | 他们的缓解措施 | 测试 | 我们的缓解措施 |
---|---|---|---|---|
CVE-2012-5370 | JRuby 在计算哈希值时,没有正确限制触发哈希冲突的可预测性(交叉引用 CVE-2011-4815、CVE-2011-4838、CVE-2012-5372) | 通过合并进程启动时间使哈希值变得非确定性 | 在 ruby/spec :security 中测试 |
通过合并来自 /dev/urandom 的种子使哈希值变得非确定性 |
CVE-2011-4838 | 1.6.5.1 之前的 JRuby 版本在计算哈希值时,没有限制触发哈希冲突的可预测性(交叉引用 CVE-2011-4815、CVE-2012-5370、CVE-2012-5372) | 通过合并进程启动时间使哈希值变得非确定性 | 在 ruby/spec :security 中测试 |
通过合并来自 /dev/urandom 的种子使哈希值变得非确定性 |
Rubinius 漏洞 #
TruffleRuby 使用来自 Rubinius 的代码,因此针对 Rubinius 报告的漏洞可能适用于 TruffleRuby。
编号 | 描述 | 他们的缓解措施 | 测试 | 我们的缓解措施 |
---|---|---|---|---|
CVE-2012-5372 | Rubinius 在计算哈希值时,没有正确限制触发哈希冲突的可预测性(交叉引用 CVE-2011-4815、CVE-2011-4838、CVE-2012-5370) | 通过合并来自 /dev/urandom 的输出使哈希值变得非确定性 |
在 ruby/spec :security 中测试 |
通过合并来自 /dev/urandom 的种子使哈希值变得非确定性 |
Java 依赖项漏洞 #
JONI #
没有已知的漏洞。
JCodings #
编号 | 描述 | 他们的缓解措施 | 测试 | 我们的缓解措施 |
---|---|---|---|---|
CVE-2010-1330 | 当 $KCODE 设置为 'u' 时,1.4.1 之前的 JRuby 中的正则表达式引擎无法正确处理 UTF-8 字符之后的字符 |
在执行正则表达式操作时,检查 UTF-8 编码的字节序列 | 在 ruby/spec :security 中测试 |
应用了相同的缓解措施 |
其他依赖项漏洞 #
zlib
#
目前没有已知的漏洞,但请考虑系统 zlib
中的潜在漏洞。
libssl
#
请考虑系统 libssl
中的潜在漏洞。
FFI #
编号 | 描述 | 他们的缓解措施 | 测试 | 我们的缓解措施 |
---|---|---|---|---|
CVE-2018-1000201 | 当使用 Symbol 作为库名称时,Windows 上的 DLL 加载问题可能会被劫持 |
在 ffi_lib 中将 Symbols 与 Strings 同等对待 |
应用了相同的缓解措施,使用修复了此漏洞的 FFI 版本 |
关于哈希的说明 #
TruffleRuby 使用 MurmurHash2
哈希,种子来自 /dev/urandom
- 它无法配置为使用任何其他哈希算法。对于字符串哈希,TruffleRuby 使用 Java 的哈希算法(然后在上面使用 MurmurHash2
)。