代码之家  ›  专栏  ›  技术社区  ›  rook

$safe>=1的Ruby中可能存在哪些漏洞?

  •  9
  • rook  · 技术社区  · 14 年前

    Ruby's safe mode 禁止潜在危险操作使用受污染的数据。它在级别上有所不同,0被禁用,然后1-4用于安全级别。启用安全模式时可能存在哪些漏洞?当安全模式被启用时,你知道有没有任何CVE号码被发送给Ruby程序?什么 CWE Violations (或CWE系列)是否可以启用安全模式?

    2 回复  |  直到 14 年前
        1
  •  8
  •   AboutRuby    14 年前

    所有应用程序级别的漏洞都完全不受$safe级别的影响。注入攻击不通过“不安全操作”,例如跨站点脚本和SQL注入。这或多或少包括Web应用程序的每个漏洞类,除了本地和远程文件包含。见 OWASP Top 10 ,$safe对很多这些都没有帮助。

    不过,$safe级别确实在一定程度上保护您免受系统级漏洞的侵害。如果攻击者能够将Ruby代码写入/tmp中的文件,那么如果$safe>=2,他们就无法欺骗您的程序加载该代码。

    当然,这并不包括Ruby本身的任何漏洞。这是更严重的,可以完全绕过美元安全。

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

    无论是否启用$safe,Rails都存在历史漏洞。由于用户输入存储在Rails应用程序中,恶意数据稍后可能会弹出备份,所以这一点很复杂。

    Ruby应用程序中的漏洞报告 其他 比Rails和MRI更难找到。

    另一个与$safe有关的大问题是没有真正的列表(我知道的)来概括 确切地 什么是$safe做的和不保护的。你唯一能做的就是搜索 RuyyySealS级 在里面 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是关于系统安全的。这是一个不错的工作,但没有真正的方法知道什么是保护和不保护。它不应该是你唯一的防线,它更像是一个安全网,所以没有什么东西会滑向“不安全的操作”。另一方面,它与应用程序的安全无关,也不会保护你的数据或用户不受危害。最重要的是,核磁共振成像有一个漏洞的历史,完全绕过美元安全。

        2
  •  5
  •   grddev    14 年前

    自从 $SAFE >= 1 只保护您使用污染输入 不安全的 操作,例如 eval 等等,在 安全的 Ruby方法仍然是个问题。例如 CVE-2009-4124 只要求使用函数 ljust / center / rjust 在一个输入上,至少是我的版本 ruby 1.8.7考虑这些功能 安全的 . 下面是一个使用 $SAFE = 4 ,并且肯定容易受到上述问题的影响:

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

    一般来说,即使Ruby脚本在安全模式下运行,大多数Ruby漏洞仍然可能是目标。

    此外,与 $SAFE = 1 你可以 untaint 变量,因此一旦您 未污染的 然后以非安全的方式使用该变量,应用程序仍然容易受到攻击。