安全研究
安全漏洞
Python zlib模块远程溢出漏洞
发布日期:2008-04-09
更新日期:2008-04-11
受影响系统:
Python Software Foundation Python <= 2.5.2描述:
BUGTRAQ ID: 28715
CVE(CAN) ID: CVE-2008-1721
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行触发缓冲区溢出。
<*来源:Justin Ferguson (jferguson@ioactive.com)
链接:http://marc.info/?l=bugtraq&m=120777873221395&w=2
http://bugs.python.org/issue2586
http://www.debian.org/security/2008/dsa-1551
http://security.gentoo.org/glsa/glsa-200807-01.xml
http://www.debian.org/security/2008/dsa-1620
*>
测试方法:
警 告
以下程序(方法)可能带有攻击性,仅供安全研究与教学之用。使用者风险自负!
http://bugs.python.org/file9984/python-2.5.2-zlib-unflush-signedness.py
建议:
厂商补丁:
Debian
------
Debian已经为此发布了一个安全公告(DSA-1620-1)以及相应补丁:
DSA-1620-1:New python2.5 packages fix several vulnerabilities
链接:http://www.debian.org/security/2008/dsa-1620
补丁下载:
Source archives:
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1.dsc
Size/MD5 checksum: 1304 1849941ac328ba0bccc45535c5878d4d
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5.orig.tar.gz
Size/MD5 checksum: 11010528 2ce301134620012ad6dafb27bbcab7eb
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1.diff.gz
Size/MD5 checksum: 266589 dfbdc5caf7a95e68f68e0351228284d4
Architecture independent packages:
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-examples_2.5-5+etch1_all.deb
Size/MD5 checksum: 643494 f922c5e48339e5b535a1f23f6e061700
http://security.debian.org/pool/updates/main/p/python2.5/idle-python2.5_2.5-5+etch1_all.deb
Size/MD5 checksum: 63258 4add97730079e7894abbbca4ba5659d4
alpha architecture (DEC Alpha)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_alpha.deb
Size/MD5 checksum: 849132 28c76f70110314eab90c8ea31d0da51e
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_alpha.deb
Size/MD5 checksum: 2065734 270d593f08cdd06cbe55bdb804a5dc43
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_alpha.deb
Size/MD5 checksum: 3596900 64d12cc349030683dc125901dff56feb
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_alpha.deb
Size/MD5 checksum: 6079808 4105398688a96f54fb7e043a3bd536d7
amd64 architecture (AMD x86_64 (AMD64))
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_amd64.deb
Size/MD5 checksum: 6432058 b7e802bf4a19edfaddc28ebc06bed279
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_amd64.deb
Size/MD5 checksum: 3589530 9bbd2cea36b04746fa5437d984147f99
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_amd64.deb
Size/MD5 checksum: 1806598 98bfee87311a8950462a9ab78c7d5719
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_amd64.deb
Size/MD5 checksum: 849650 a95eeb3b45a0a3f74e314084d581fbd6
arm architecture (ARM)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_arm.deb
Size/MD5 checksum: 1656006 8e8d3d3b991f317384fc1646139712d4
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_arm.deb
Size/MD5 checksum: 781358 fbb5adac7469048405b2585475393475
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_arm.deb
Size/MD5 checksum: 3447404 4a10cad96ef0aefc9ba916a39677b826
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_arm.deb
Size/MD5 checksum: 6017500 f727562323c21bfb371e17ef9691f8e3
hppa architecture (HP PA RISC)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_hppa.deb
Size/MD5 checksum: 1984570 b083e1afffe4a93dd79ae4b8a7dca474
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_hppa.deb
Size/MD5 checksum: 3679122 cb5aa4f840a12ee13094089323f0b4f9
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_hppa.deb
Size/MD5 checksum: 887774 9cc756ce52e5380650ea754c4104c6ca
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_hppa.deb
Size/MD5 checksum: 6204820 65d3c59dcb56277d838b776f0b2d5176
i386 architecture (Intel ia32)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_i386.deb
Size/MD5 checksum: 5989758 79d6a1ed26f230a5b092603346cd31e3
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_i386.deb
Size/MD5 checksum: 1676014 5d7353787ab562d03bb967732cd7bf46
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_i386.deb
Size/MD5 checksum: 3445750 4b7b6629d5ee48d8413bd2ee7289726c
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_i386.deb
Size/MD5 checksum: 784320 f49d7ccf7cb106d200559169c4c013f2
ia64 architecture (Intel ia64)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_ia64.deb
Size/MD5 checksum: 1176036 fbc3971fbbcc8a37b2feec8570a4fa34
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_ia64.deb
Size/MD5 checksum: 6966656 ca0fe43224b9f329afac2673379ad958
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_ia64.deb
Size/MD5 checksum: 4037758 3be3cf7835a7e69b3189025edcdca799
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_ia64.deb
Size/MD5 checksum: 2477104 a5cafad9926f58504c44f980d490d979
mips architecture (MIPS (Big Endian))
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_mips.deb
Size/MD5 checksum: 819064 263a7a9496d171874461654ecc7db26f
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_mips.deb
Size/MD5 checksum: 1907220 2175a2f625925e95be148d62f279c210
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_mips.deb
Size/MD5 checksum: 3525088 a257c17981d12f9f0eb0a86fde85ca71
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_mips.deb
Size/MD5 checksum: 6507214 8306549937264c9f1cf57288ae7e738b
mipsel architecture (MIPS (Little Endian))
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_mipsel.deb
Size/MD5 checksum: 3456110 1a7675c9de9abd3671786d36d3ea263f
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_mipsel.deb
Size/MD5 checksum: 817730 1a656308b4c158a6d0594f08132f8e16
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_mipsel.deb
Size/MD5 checksum: 6336980 a01b93c916c6c658747effa637bbb58d
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_mipsel.deb
Size/MD5 checksum: 1896534 b2b39e4d4e79b6afa13b24beccc5ab7c
powerpc architecture (PowerPC)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_powerpc.deb
Size/MD5 checksum: 3590820 f419e6c0b439e8391ce118a22f66179e
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_powerpc.deb
Size/MD5 checksum: 843170 ae9e553f9c5e278f42bb6bc2bef215aa
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_powerpc.deb
Size/MD5 checksum: 6648508 512e75472dcb919d7987472f7ea1c57c
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_powerpc.deb
Size/MD5 checksum: 1809928 1f43ae54d0b5836abbbfc59083d60bb4
s390 architecture (IBM S/390)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_s390.deb
Size/MD5 checksum: 841474 9e0a8a5eaf9100fb03caa3ac77aa2d63
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_s390.deb
Size/MD5 checksum: 1816794 a718f4d0c010ca9686068e0bbd8ec919
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_s390.deb
Size/MD5 checksum: 6535426 4aa0738ecf30b99614440f134a2096fb
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_s390.deb
Size/MD5 checksum: 3614770 6fdb0e38779312a7a66d57e373c38a38
sparc architecture (Sun SPARC/UltraSPARC)
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dev_2.5-5+etch1_sparc.deb
Size/MD5 checksum: 1759842 5897eefdb79bfeb3cc470959e04dcb7c
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-dbg_2.5-5+etch1_sparc.deb
Size/MD5 checksum: 5995652 13848fd47c5a9047172d246c12dee03e
http://security.debian.org/pool/updates/main/p/python2.5/python2.5_2.5-5+etch1_sparc.deb
Size/MD5 checksum: 3493896 d327f5fc4dbd282db977eade02c9b7eb
http://security.debian.org/pool/updates/main/p/python2.5/python2.5-minimal_2.5-5+etch1_sparc.deb
Size/MD5 checksum: 778284 bd2ad97592529526e7c08862baf28cdc
补丁安装方法:
1. 手工安装补丁包:
首先,使用下面的命令来下载补丁软件:
# wget url (url是补丁下载链接地址)
然后,使用下面的命令来安装补丁:
# dpkg -i file.deb (file是相应的补丁名)
2. 使用apt-get自动安装补丁包:
首先,使用下面的命令更新内部数据库:
# apt-get update
然后,使用下面的命令安装更新软件包:
# apt-get upgrade
Python Software Foundation
--------------------------
目前厂商已经发布了升级补丁以修复这个安全问题,请到厂商的主页下载:
http://svn.python.org/view?rev=62235&view=rev
Gentoo
------
Gentoo已经为此发布了一个安全公告(GLSA-200807-01)以及相应补丁:
GLSA-200807-01:Python: Multiple integer overflows
链接:http://security.gentoo.org/glsa/glsa-200807-01.xml
所有Python 2.3用户都应升级到最新版本:
# emerge --sync
# emerge --ask --oneshot --verbose ">=3Ddev-lang/python-2.3.6-r6"
所有Python 2.4用户都应升级到最新版本:
# emerge --sync
# emerge --ask --oneshot --verbose ">=3Ddev-lang/python-2.4.4-r13"
浏览次数:3731
严重程度:0(网友投票)
绿盟科技给您安全的保障
