首页 文章

Python中发现的漏洞是否被视为Jython中的漏洞?

提问于
浏览
2

作为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.4之前的urllib2中的HTTPConnection.putheader函数和 CPython (又名Python)中的urllib中的CRLF注入漏洞允许远程攻击者通过URL中的CRLF序列注入任意HTTP头 . ”

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

整体而言 - 我想知道的是,Python中的漏洞是否意味着它在Jython中容易受到攻击?

2 回答

  • 1

    不必要 . 当你提到诸如“Python”之类的东西时,你可能指的是两个不同的东西:

    • Python语言

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

    通常,Python语言不会在不同的实现中发生变化(很多) . 语言的处理方式有哪些变化,包括调用哪些外部系统函数 .

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

    简而言之 - 如果在语言如何解决问题时出现缺陷,则可能会影响所有实现 . 否则,您需要逐个检查每个平台的漏洞 .

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

  • 0

    不一定,这一切都取决于Python标准库JPython使用哪些部分,哪些部分被修改,哪些部分被重新实现,哪些被省略...

    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 .

相关问题