Python中标识的漏洞是否被认为是Jython中的漏洞?

2024-04-24 23:46:45 发布

您现在位置:Python中文网/ 问答频道 /正文

一个被混淆为Python、Jython和CPython之间的区别的lil。 我知道Jython是Python在Java中的实现,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

上面写着 “中的CRLF注入漏洞HTTPConnection.putheaderCPython之前的2.7.10版本和3.4.4版本之前的3.x版本中的urllib2和urllib函数允许远程攻击者通过URL中的CRLF序列注入任意的HTTP报头。”

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

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


Tags: https版本comshowjythonjavacpythonbugzilla
2条回答

不一定。当你提到“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,这是语言错误,因此在更新之前,很可能(但不保证)在所有实现中都易受攻击。在

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

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

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

因此,您不能依靠它来判断Python代码本身是否有问题(它是否在特定版本中得到修复)。在

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

因此,除非漏洞攻击明确指出问题出在Python代码本身(例如,在您的示例中是在urllib.py)中,并且在所述模块的特定版本中得到了修复,否则您无法确定这不是由于底层解释器造成的,如果是的话——PVM和JVM是否也存在同样的问题。在

相关问题 更多 >