Python 中识别的漏洞是否被视为 Jython 中的漏洞?
Is a vulnerability identified in Python considered a vulnerability in Jython?
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
它说
"CRLF injection vulnerability in the HTTPConnection.putheader function in urllib2 and urllib in CPython (aka Python) before 2.7.10 and 3.x before 3.4.4 allows remote attackers to inject arbitrary HTTP headers via CRLF sequences in a URL."
这是否意味着 CVE-2016-5699 在 Jython 中不存在漏洞?
总的来说-我想知道 Python 中的漏洞是否意味着它在 Jython 中存在漏洞?
不一定,全看Python标准库JPython用了哪些部分,哪些修改了,哪些是re-implemented,哪些省略了...
urllib
是标准 Python 发行版的一部分,您可以在标准 CPython 和 J 的 Lib
文件夹中找到 urllib.py
Python。可悲的是,他们甚至在代码中声明:
__version__ = '1.17' # XXX This version is not always updated :-(
所以你不能依靠它来确定 Python 代码本身是否有问题(并且它是否已在特定版本中修复)。
此外,漏洞利用不一定与实际 Python 围绕较低级别的字节码和最终的解释器相关 - 它可以在任何这些东西中,或它们的组合中。这就是为什么他们说该漏洞利用在特定 CPython 版本中不存在,因为假定整个堆栈以及标准库都已更新。
所以,除非 exploit 明确指出问题出在 Python 代码本身(例如,在您的示例中的 urllib.py
中)并且它已在所述模块的特定版本中修复,您不能确定这不是由底层解释器引起的,如果是 - PVM 和 JVM 是否同样适用。
不一定。当您提到诸如 "Python" 之类的东西时,您可能指的是两种不同的东西:
- Python 语言
- Python虚拟机(VM)或其他具体实现
通常 Python 语言在不同的实现中不会发生(很大)变化。改变的是语言的处理方式,包括调用了哪些外部系统函数。
Python 没有任何其他区别通常指 CPython,标准实现。正如您上面提到的,其他的是 Jython 和 IronPython。它们中的每一个都在不同的 VM 中运行:Jython 的 JVM 和 IronPython 的 dotnet。例如,这些 VM 可能会以不同方式分配内存,从而防止 memory-based 错误发生在不同的 VM 中。在提到的 CVE-2016-5636 案例中,注意到 Jython 调用了 Java 版本的 zip,而 CPython 可能调用了 C 版本的 zip。
简而言之 - 如果语言处理问题的方式出现缺陷,它可能会影响所有实现。否则,您将需要单独检查每个平台的漏洞。
附录:根据 the Red Hat tracker for CVE-2016-5699,这是语言错误,因此在更新之前很可能(但不保证)在所有实现中都容易受到攻击。
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
它说 "CRLF injection vulnerability in the HTTPConnection.putheader function in urllib2 and urllib in CPython (aka Python) before 2.7.10 and 3.x before 3.4.4 allows remote attackers to inject arbitrary HTTP headers via CRLF sequences in a URL."
这是否意味着 CVE-2016-5699 在 Jython 中不存在漏洞?
总的来说-我想知道 Python 中的漏洞是否意味着它在 Jython 中存在漏洞?
不一定,全看Python标准库JPython用了哪些部分,哪些修改了,哪些是re-implemented,哪些省略了...
urllib
是标准 Python 发行版的一部分,您可以在标准 CPython 和 J 的 Lib
文件夹中找到 urllib.py
Python。可悲的是,他们甚至在代码中声明:
__version__ = '1.17' # XXX This version is not always updated :-(
所以你不能依靠它来确定 Python 代码本身是否有问题(并且它是否已在特定版本中修复)。
此外,漏洞利用不一定与实际 Python 围绕较低级别的字节码和最终的解释器相关 - 它可以在任何这些东西中,或它们的组合中。这就是为什么他们说该漏洞利用在特定 CPython 版本中不存在,因为假定整个堆栈以及标准库都已更新。
所以,除非 exploit 明确指出问题出在 Python 代码本身(例如,在您的示例中的 urllib.py
中)并且它已在所述模块的特定版本中修复,您不能确定这不是由底层解释器引起的,如果是 - PVM 和 JVM 是否同样适用。
不一定。当您提到诸如 "Python" 之类的东西时,您可能指的是两种不同的东西:
- Python 语言
- Python虚拟机(VM)或其他具体实现
通常 Python 语言在不同的实现中不会发生(很大)变化。改变的是语言的处理方式,包括调用了哪些外部系统函数。
Python 没有任何其他区别通常指 CPython,标准实现。正如您上面提到的,其他的是 Jython 和 IronPython。它们中的每一个都在不同的 VM 中运行:Jython 的 JVM 和 IronPython 的 dotnet。例如,这些 VM 可能会以不同方式分配内存,从而防止 memory-based 错误发生在不同的 VM 中。在提到的 CVE-2016-5636 案例中,注意到 Jython 调用了 Java 版本的 zip,而 CPython 可能调用了 C 版本的 zip。
简而言之 - 如果语言处理问题的方式出现缺陷,它可能会影响所有实现。否则,您将需要单独检查每个平台的漏洞。
附录:根据 the Red Hat tracker for CVE-2016-5699,这是语言错误,因此在更新之前很可能(但不保证)在所有实现中都容易受到攻击。