【问题标题】:Is a vulnerability identified in Python considered a vulnerability in Jython?在 Python 中识别的漏洞是否被视为 Jython 中的漏洞?
【发布时间】:2017-02-17 16:45:43
【问题描述】:

有点混淆了 Python、Jython 和 CPython 之间的差异。 我知道 Jython 是用 Java 实现的 Python,CPython 是一样的,只是它是用 C 实现的。

但我真正感到困惑的是识别 Python 中的漏洞。 比如下面这两个。

例如 - CVE-2016-5636 - 这里似乎无法在 Jython 中重现该漏洞。

https://bugzilla.redhat.com/show_bug.cgi?id=1345857

类似地查看 - CVE-2016-5699 https://cve.mitre.org/cgi-bin/cvename.cgi?name=CVE-2016-5699

它说 “2.7.10 之前和 3.4.4 之前的 3.x 中的 urllib2 和 urllib 中的 HTTPConnection.putheader 函数中的 CRLF 注入漏洞允许远程攻击者通过 CRLF 序列注入任意 HTTP 标头在 URL 中。”

这是否意味着 CVE-2016-5699 在 Jython 中不受攻击?

总的来说,我想知道的是,Python 中的漏洞是否意味着它在 Jython 中存在漏洞?

【问题讨论】:

  • 我对自己对该主题的了解不够自信,但这可能完全取决于漏洞利用的工作方式。当指令被编译成 java 字节码时,可能会发生额外的检查,并且实现特定的错误(阅读:实际上是拼写错误)可能不会在解释器中继续存在,除非源是相同的。也就是说,很容易无意中遗留语义错误从一种语言翻译成另一种语言时的代码。

标签: python security jython cpython


【解决方案1】:

不一定。当您提到“Python”之类的东西时,您可能指的是两种不同的东西:

  • Python 语言
  • Python 虚拟机 (VM) 或其他特定实现

通常,Python 语言在不同的实现中不会发生(太大)变化。改变的是语言的处理方式,包括调用了哪些外部系统函数。

没有任何其他区别的 Python 通常指的是标准实现 CPython。正如您在上面提到的,其他的是 Jython 和 IronPython。它们中的每一个都在不同的 VM 中运行:Jython 的 JVM 和 IronPython 的 dotnet。例如,这些 VM 可能会以不同方式分配内存,从而防止在不同 VM 中发生基于内存的错误。在提到的 CVE-2016-5636 的情况下,注意到 Jython 调用 Java 版本的 zip,而 CPython 可能调用 C 版本的 zip。

简而言之 - 如果缺陷出现在语言处理问题的方式中,它可能会影响所有实现。否则,您将需要逐个检查每个平台的漏洞。

附录:根据the Red Hat tracker for CVE-2016-5699,这是语言错误,因此在更新之前很可能(但不能保证)在所有实现中都容易受到攻击。

【讨论】:

    【解决方案2】:

    不一定,全看JPython使用的Python标准库的哪些部分,修改了哪些,重新实现了哪些,省略了哪些……

    urllib 是标准 Python 发行版的一部分,您可以在标准 CPython 和 JPython 的 Lib 文件夹中找到 urllib.py。可悲的是,他们甚至在代码中声明了这一点:

    __version__ = '1.17'    # XXX This version is not always updated :-(
    

    因此,您不能依靠它来确定 Python 代码本身是否有问题(并且它是否已在特定版本中修复)。

    此外,漏洞利用不一定与实际的 Python 围绕较低级别的字节码和最终的解释器相关 - 它可以在任何这些东西中,或它们的组合中。这就是为什么他们说这个漏洞在特定的 CPython 版本中不存在,因为假设整个堆栈以及标准库都已更新。

    因此,除非漏洞利用特别指出问题出在 Python 代码本身(例如,在您的示例中为 urllib.py)并且它已在所述模块的特定版本中得到修复,否则您无法确定它不是由于底层解释器,如果是 - 是否同样适用于 PVM 和 JVM。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-08-16
      • 2021-09-03
      • 1970-01-01
      • 2022-06-20
      • 1970-01-01
      • 2021-06-05
      • 2017-06-08
      • 2012-10-13
      相关资源
      最近更新 更多