From:             
Operating system: any
PHP version:      5.4.1RC2
Package:          CGI/CLI related
Bug Type:         Bug
Bug description:Buffer Overflow in apache_request_headers

Description:
------------
Resubmitting since the patch didn't include last time, and I cannot view or
edit my own security bug.  Makes sense :(


apache_request_headers has a loop starting at line 1617 which copies the
name of an environment variable while fixing case and converting '_' to
'-'.  This loop is only supposed to copy the variable name (eg: Cookie from
HTTP_COOKIE), however it continues until the end of the entire environment
variable.  The problem is it is copying it into buffer t, which is a
pointer to buf[128].  If the string being copied is longer than 128 bytes,
it will overflow the buffer.

This seems to be present in 5.4.x


Patch in case it doesn't include again:

diff --git a/sapi/cgi/cgi_main.c b/sapi/cgi/cgi_main.c
index 4643882..ef876fb 100644
--- a/sapi/cgi/cgi_main.c
+++ b/sapi/cgi/cgi_main.c
@@ -1614,7 +1614,9 @@ PHP_FUNCTION(apache_request_headers) /* {{{ */
                                var = q = t;
                                *q++ = *p++;
                                while (*p) {
-                                       if (*p == '_') {
+                                       if (*p == '=') {
+                                               break;
+                                       } else if (*p == '_') {
                                                *q++ = '-';
                                                p++;
                                                if (*p) {



Test script:
---------------
Running roundcube with php 5.4 will trigger this bug due to the large
amount of cookie data and other stack conditions.  This is where I
discovered it.  The included patch fixes this bug.

Expected result:
----------------
PHP should function normally

Actual result:
--------------
PHP seg faults in zif_apache_request_headers 


#5  0x000002dac7160040 in __stack_chk_fail () at stack_chk_fail.c:29
No locals.
#6  0x000000000074db0e in zif_apache_request_headers (ht=0,
return_value=0x2dac596e180,
    return_value_ptr=0x3802d971bf0, this_ptr=0x6f72203b33396636,
    return_value_used=1685382481) at
/tmp/buildd/php5-5.4.1~rc1/sapi/cgi/cgi_main.c:1647
        buf =
"\023\000\000\000\000\000\000\000X-Roundcube-Request=4613f5de1ef497b2c16f60deb9be83de\000\060)
gecko/20100101 firefox/11.0\000sviewsplitter=296; identviewsplitter"
        env = 0x3802d974638
        q = 0x3802d971bf0
"undcube-sessauth=sdcc36a0f8bd6c79753726fdf6b6818a276a2581a"
        var = 0x6f72203b33396636 <Address 0x6f72203b33396636 out of
bounds>
        alloc_size = 128
        buf =
"\023\000\000\000\000\000\000\000X-Roundcube-Request=4613f5de1ef497b2c16f60deb9be83de\000\060)
gecko/20100101 firefox/11.0\000sviewsplitter=296; identviewsplitter"
        buf =
"\023\000\000\000\000\000\000\000X-Roundcube-Request=4613f5de1ef497b2c16f60deb9be83de\000\060)
gecko/20100101 firefox/11.0\000sviewsplitter=296; identviewsplitter"
#7  0x6f72203b33396636 in ?? ()
No symbol table info available.
#8  0x2d65627563646e75 in ?? ()
No symbol table info available.

-- 
Edit bug report at https://bugs.php.net/bug.php?id=61807&edit=1
-- 
Try a snapshot (PHP 5.4):            
https://bugs.php.net/fix.php?id=61807&r=trysnapshot54
Try a snapshot (PHP 5.3):            
https://bugs.php.net/fix.php?id=61807&r=trysnapshot53
Try a snapshot (trunk):              
https://bugs.php.net/fix.php?id=61807&r=trysnapshottrunk
Fixed in SVN:                        
https://bugs.php.net/fix.php?id=61807&r=fixed
Fixed in SVN and need be documented: 
https://bugs.php.net/fix.php?id=61807&r=needdocs
Fixed in release:                    
https://bugs.php.net/fix.php?id=61807&r=alreadyfixed
Need backtrace:                      
https://bugs.php.net/fix.php?id=61807&r=needtrace
Need Reproduce Script:               
https://bugs.php.net/fix.php?id=61807&r=needscript
Try newer version:                   
https://bugs.php.net/fix.php?id=61807&r=oldversion
Not developer issue:                 
https://bugs.php.net/fix.php?id=61807&r=support
Expected behavior:                   
https://bugs.php.net/fix.php?id=61807&r=notwrong
Not enough info:                     
https://bugs.php.net/fix.php?id=61807&r=notenoughinfo
Submitted twice:                     
https://bugs.php.net/fix.php?id=61807&r=submittedtwice
register_globals:                    
https://bugs.php.net/fix.php?id=61807&r=globals
PHP 4 support discontinued:          
https://bugs.php.net/fix.php?id=61807&r=php4
Daylight Savings:                    https://bugs.php.net/fix.php?id=61807&r=dst
IIS Stability:                       
https://bugs.php.net/fix.php?id=61807&r=isapi
Install GNU Sed:                     
https://bugs.php.net/fix.php?id=61807&r=gnused
Floating point limitations:          
https://bugs.php.net/fix.php?id=61807&r=float
No Zend Extensions:                  
https://bugs.php.net/fix.php?id=61807&r=nozend
MySQL Configuration Error:           
https://bugs.php.net/fix.php?id=61807&r=mysqlcfg

Reply via email to