首页 文章

在$ SAFE> = 1的ruby中可能存在哪些漏洞?

提问于
浏览
9

Ruby's safe mode不允许有潜在危险的操作使用受污染的数据 . 它的级别不同,0表示禁用,然后1-4表示安全级别 . 启用安全模式后可能存在哪些漏洞?你知道在安全模式启用时发给ruby程序的任何CVE编号吗?什么CWE Violations(或cwe系列)可以启用安全模式?

2 回答

  • 5

    所有应用程序级漏洞完全不受$ SAFE级别的影响 . 例如,注入攻击不会像跨站点脚本和SQL注入那样通过"unsafe operation" . 这或多或少包括Web应用程序的每个漏洞类,除了本地和远程文件包含 . 请参阅OWASP Top 10,$ SAFE对其中的许多内容没有帮助 .

    虽然$ SAFE级别确实可以保护您免受系统级漏洞的影响 . 如果攻击者能够将Ruby代码编写到/ tmp中的文件中,那么如果$ SAFE> = 2,他们将无法欺骗您的程序加载该代码 .

    这当然不包括Ruby本身的任何漏洞 . 这些更严重,可以完全绕过$ SAFE .

    或者Ruby解释器本身中的普通旧缓冲区溢出,整数溢出等与$ SAFE无关 .

    无论是否启用$ SAFE,Rails都会出现历史漏洞 . 由于用户输入存储在Rails应用程序中,恶意数据可以在以后弹出,这使事情变得复杂 .

    Ruby Rails和MRI以外的Ruby应用程序中的漏洞报告很难得到 .

    $ SAFE的另一个大问题是没有真正的清单(我知道),它清楚地概述了$ SAFE的作用和不保护的内容 . 关于你唯一能做的就是在eval.c中搜索ruby_safe_level(这是一个较旧的eval.c,来自1.8.4) . 评论提供了这种描述,但它很模糊 .

    /* 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
    */
    

    我想我想说的是$ SAFE是关于系统安全性的 . 它做得很好,但没有真正的方法来确切知道什么是和不受保护 . 它不应该是你唯一的防线,它更像是一个安全网,所以没有任何东西可以用于“不安全的操作” . 另一方面,它与应用程序安全性无关,也不会保护您的数据或用户免受攻击 . 最重要的是,MRI具有完全绕过$ SAFE的漏洞历史 .

  • 8

    由于 $SAFE >= 1 仅保护您在不安全操作(例如 eval 等)中使用污染输入,因此安全Ruby方法中的任何漏洞仍然是个问题 . 例如CVE-2009-4124只要求您在输入上使用函数 ljust / center / rjust ,并且至少我的 ruby 1.8.7版本认为这些函数是安全的 . 这是一个使用 $SAFE = 4 的Ruby代码段,肯定容易受到上述问题的影响:

    $SAFE = 4; ARGV[0].ljust(ARGV[1].to_i)
    

    通常,即使Ruby脚本以安全模式运行,大多数Ruby漏洞仍然可以被定位 .

    此外,使用 $SAFE = 1 ,您可以使用 untaint 变量,因此,只要您使用该变量并且随后以非安全方式使用该变量,您的应用程序就会受到攻击,该应用程序仍然容易受到攻击 .

相关问题