其中的一个问题来自 safe levels 。通过设置 safe level,可以禁止操作和定义被认为是污染了的数据。Ruby 中的污染数据(Tainted Data)在使用前必须显式的净化。被发现的安全缺陷有:- untrace_var 在 safe level 4 是允许的
- $PROGRAM_NAME 在 safe level 4 是可以修改的
- 不安全的方法在 safe level 1-3 可能可以调用
- Syslog 操作在 safe level 4 是允许的
请看带有代码实例的缺陷列表。另一个和污染数据相关的问题来自于 dl。dl 程序库允许用户载入动态库并调用其中的函数。因为 dl 并没有检测传入参数的被污染程度,因此可以借此来实现缓冲区溢出(exploits)攻击。
在 WEBrick 中也发现了安全缺陷,这可能会导致拒绝服务(DoS)攻击。问题源自用于响应和解析 HTTP 头的部分代码导致──在特定的数据下,正则引擎会挂掉导致程序终止。
对于 1.8.x 的用户,解决方法是升级至 1.8.6-p286 和 1.8.7-p71。对于 1.9.x 的 Ruby 用户,似乎当前最好的解决方法就是从 SVN 中取得最新的代码──所有在 r18423 之后的版本应该都是安全的。
最后,提醒一句:虽然最近发现的 Ruby 解释器的问题已经解决了──但是第一个修复版存在兼容性的问题。在将其正式投入产品级应用以前,要对升级进行仔细的测试。
评论