所有应用程序级漏洞完全不受$ SAFE级别的影响.注入攻击不会通过"不安全的操作",例如跨站点脚本和SQL注入.这或多或少包括Web应用程序的每个漏洞类,除了本地和远程文件包含.参见OWASP Top 10,$ SAFE对其中许多没有帮助.
虽然$ SAFE级别确实可以保护您免受系统级漏洞的影响.如果攻击者能够将Ruby代码编写到/ tmp中的文件中,那么如果$ SAFE> = 2,他们将无法欺骗您的程序加载该代码.
这当然不包括Ruby本身的任何漏洞.这些更严重,可以完全绕过$ SAFE.
或者Ruby解释器本身中的普通旧缓冲区溢出,整数溢出等与$ SAFE无关.
无论是否启用$ SAFE,Rails都会出现历史漏洞.由于用户输入存储在Rails应用程序中,恶意数据可以在以后弹出,这使事情变得复杂.
在Ruby应用程序中的漏洞报告等比Rails和MRI是很难得的.
$ SAFE的另一个大问题是没有真正的清单(我知道),它清楚地概述了$ SAFE的作用和不保护的内容.关于你能做的唯一的事情就是寻找ruby_safe_level在eval.c(这是1.8.4的旧eval.c).评论提供了这种描述,但它很模糊.
/* safe-level:
0 - strings from streams/environment/ARGV are tainted (default)
1 - no dangerous operation by tainted value
2 - process/file operations prohibited
3 - all generated objects are tainted
4 - no global (non-tainted) variable modification/no direct output
*/
Run Code Online (Sandbox Code Playgroud)
我想我想说的是$ SAFE是关于系统安全性的.它做得很好,但没有真正的方法来确切知道什么是和不受保护.它不应该是你唯一的防线,它更像是一个安全网,所以没有任何东西可以用于"不安全的操作".另一方面,它与应用程序安全性无关,也不会保护您的数据或用户免受攻击.最重要的是,MRI具有完全绕过$ SAFE的漏洞历史.
由于$SAFE >= 1只能在不安全的操作(例如等)中使用受污染的输入来保护您的形式eval,因此安全 Ruby方法中的任何漏洞仍然是一个问题.例如,CVE-2009-4124只要求您在输入上使用函数ljust/ center/ rjust,至少我的ruby1.8.7 版本认为这些函数是安全的.这是一个使用的Ruby片段,$SAFE = 4肯定会受到上述问题的攻击:
$SAFE = 4; ARGV[0].ljust(ARGV[1].to_i)
Run Code Online (Sandbox Code Playgroud)
通常,即使Ruby脚本以安全模式运行,大多数Ruby漏洞仍然可以被定位.
此外,$SAFE = 1您可以使用untaint变量,因此一旦您untaint以及随后以非安全方式使用该变量,您的应用程序就容易受到攻击,该应用程序仍然容易受到攻击.
| 归档时间: |
|
| 查看次数: |
1314 次 |
| 最近记录: |