漏洞信息详情

Python zlib模块远程溢出漏洞

漏洞简介

Python是一种开放源代码的脚本编程语言。

Python的zlib扩展模块中用于flush解压流的方式获取一个输入参数来确定应flush多少数据。这个参数是一个有符型整数,没有经过过滤检查,因此如果传送了负值的话就会导致错误的内存分配,然后有符型整数会被转换为无符整数,触发缓冲区溢出。

Python-2.5.2/Modules/zlibmodule.c:

761 PyDoc_STRVAR(decomp_flush__doc__,

762 "flush( [length] ) -- Return a string containing any remaining\n"

763 "decompressed data. length, if given, is the initial size of the\n"

764 "output buffer.\n"

765 "\n"

766 "The decompressor object can no longer be used after this call.");

767

768 static PyObject *

769 PyZlib_unflush(compobject *self, PyObject *args)

770 {

771 int err, length = DEFAULTALLOC;

772 PyObject * retval = NULL;

773 unsigned long start_total_out;

774

775 if (!PyArg_ParseTuple(args, "|i:flush", &length))

776 return NULL;

777 if (!(retval = PyString_FromStringAndSize(NULL, length)))

778 return NULL;

779

780

781 ENTER_ZLIB

782

783 start_total_out = self->zst.total_out;

784 self->zst.avail_out = length;

785 self->zst.next_out = (Byte *)PyString_AS_STRING(retval);

786

787 Py_BEGIN_ALLOW_THREADS

788 err = inflate(&(self->zst), Z_FINISH);

789 Py_END_ALLOW_THREADS

PyArg_ParseTuple()函数为Python和C之间的转换方式,如果提供了的话就会初始化长度变量,然后在777行这个变量作为第二个参数传送给了PyString_FromStringAndSize()。该参数也是有符的,API调用本身没有验证非调试编译中的参数。之后这个值的大小为PyStringObject与该值大小的和,并传送给了Python分配程序。如果成功分配的话,在784行的赋值就会导致符号转换,zst结构的avail_out成员为无符变量。之后在785行将777行所分配内存的指针被分配给了zst结构的next_out成员,这会在zlib inflate()函数解压数据时在788行触发缓冲区溢出。

漏洞公告

目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:

http://svn.python.org/view?rev=62235&view=rev

参考网址

来源: XF

名称: zlib-pystringfromstringandsize-bo(41748)

链接:http://xforce.iss.net/xforce/xfdb/41748

来源: UBUNTU

名称: USN-632-1

链接:http://www.ubuntu.com/usn/usn-632-1

来源: BID

名称: 28715

链接:http://www.securityfocus.com/bid/28715

来源: BUGTRAQ

名称: 20080409 IOActive Security Advisory: Buffer overflow in Python zlib extension module

链接:http://www.securityfocus.com/archive/1/archive/1/490690/100/0/threaded

来源: DEBIAN

名称: DSA-1620

链接:http://www.debian.org/security/2008/dsa-1620

来源: support.apple.com

链接:http://support.apple.com/kb/HT3438

来源: SLACKWARE

名称: SSA:2008-217-01

链接:http://slackware.com/security/viewer.php?l=slackware-security&y=2008&m=slackware-security.525289

来源: GENTOO

名称: GLSA-200807-01

链接:http://security.gentoo.org/glsa/glsa-200807-01.xml

来源: SECUNIA

名称: 33937

链接:http://secunia.com/advisories/33937

来源: SECUNIA

名称: 31365

链接:http://secunia.com/advisories/31365

来源: SECUNIA

名称: 31358

链接:http://secunia.com/advisories/31358

来源: SECUNIA

名称: 31255

链接:http://secunia.com/advisories/31255

来源: SECUNIA

名称: 30872

链接:http://secunia.com/advisories/30872

来源: APPLE

名称: APPLE-SA-2009-02-12

链接:http://lists.apple.com/archives/security-announce/2009/Feb/msg00000.html

来源: bugs.python.org

链接:http://bugs.python.org/issue2586

来源: issues.rpath.com

链接:https://issues.rpath.com/browse/RPL-2444

来源: SECTRACK

名称: 1019823

链接:http://www.securitytracker.com/id?1019823

来源: MANDRIVA

名称: MDVSA-2008:085

链接:http://www.mandriva.com/security/advisories?name=MDVSA-2008:085

来源: VUPEN

名称: ADV-2008-1229

链接:http://www.frsirt.com/english/advisories/2008/1229/references

来源: DEBIAN

名称: DSA-1551

链接:http://www.debian.org/security/2008/dsa-1551

来源: wiki.rpath.com

链接:http://wiki.rpath.com/wiki/Advisories:rPSA-2008-0149

来源: SREASON

名称: 3802

链接:http://securityreason.com/securityalert/3802

来源: SECUNIA

名称: 29955

链接:http://secunia.com/advisories/29955

来源: SECUNIA

名称: 29889

链接:http://secunia.com/advisories/29889

补丁

    暂无

漏洞信息快速查询

相关漏洞

更多