php.net |  support |  documentation |  report a bug |  advanced search |  search howto |  statistics |  random bug |  login
Bug #73034 PHP stack corruption with long filename
Submitted: 2016-09-06 19:21 UTC Modified: 2017-01-08 21:03 UTC
From: fernando at null-life dot com Assigned: ab (profile)
Status: Closed Package: *General Issues
PHP Version: 7.0.10 OS: Windows
Private report: No CVE-ID: None
Welcome back! If you're the original bug submitter, here's where you can edit the bug or add additional notes.
If you forgot your password, you can retrieve your password here.
Password:
Status:
Package:
Bug Type:
Summary:
From: fernando at null-life dot com
New email:
PHP Version: OS:

 

 [2016-09-06 19:21 UTC] fernando at null-life dot com
Description:
------------
The issue is triggered using imagepng however I believe it's not related to GD but   to PHP file handling, run the attached script with USE_ZEND_ALLOC=0 

Test script:
---------------
<?php

$v1=imagecreatetruecolor(2, 2);
$v2=str_repeat("#", 0xdffffff);
imagepng($v1,$v2);



Expected result:
----------------
No crash

Actual result:
--------------
Output varies during execution, these are two common generated backtrace:

Output 1
======
(3cb0.28f0): Access violation - code c0000005 (first chance)
First chance exceptions are reported before any exception handling.
Processing initial command 'r;!exploitable -v'
This exception may be expected and handled.
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\SysWOW64\VCRUNTIME140.dll - 
VCRUNTIME140!memcpy+0x4e:
5eaed75e f3a4            rep movs byte ptr es:[edi],byte ptr [esi]
0:000:x86> r;!exploitable -v
eax=4804a029 ebx=0e000009 ecx=0e000009 edx=0e000009 esi=3a04a020 edi=00000000
eip=5eaed75e esp=06f8d6d8 ebp=06f8dfcc iopl=0         nv up ei pl nz na po cy
cs=0023  ss=002b  ds=002b  es=002b  fs=0053  gs=002b             efl=00010203
VCRUNTIME140!memcpy+0x4e:
5eaed75e f3a4            rep movs byte ptr es:[edi],byte ptr [esi]

!exploitable 1.6.0.0
HostMachine\HostUser
Executing Processor Architecture is x86
Debuggee is in User Mode
Debuggee is a live user mode debugging session on the local machine
Event Type: Exception
*** ERROR: Symbol file could not be found.  Defaulted to export symbols for C:\WINDOWS\SysWOW64\mswsock.dll - 
Exception Faulting Address: 0x0
First Chance Exception Type: STATUS_ACCESS_VIOLATION (0xC0000005)
Exception Sub-Type: Write Access Violation

Faulting Instruction:5eaed75e rep movs byte ptr es:[edi],byte ptr [esi]

Basic Block:
    5eaed75e rep movs byte ptr es:[edi],byte ptr [esi]
       Tainted Input operands: 'ecx','edi','esi'
    5eaed760 mov eax,dword ptr [esp+0ch]
    5eaed764 pop esi
    5eaed765 pop edi
    5eaed766 ret
 

Exception Hash (Major/Minor): 0x39a5c8d2.0xd5d2d785

 Hash Usage : Stack Trace:
Major+Minor : VCRUNTIME140!memcpy+0x4e
Major+Minor : Unknown
Major+Minor : Unknown
Major+Minor : Unknown
Major+Minor : mswsock!Tcpip4_WSHGetSockaddrType+0x1385
Minor       : Unknown
Minor       : Unknown
Minor       : Unknown
Minor       : Unknown
Minor       : Unknown
Minor       : Unknown
Minor       : php7!`string'+0x0
Instruction Address: 0x000000005eaed75e

Description: Possible Stack Corruption
Short Description: PossibleStackCorruption
Exploitability Classification: UNKNOWN
Recommended Bug Title: Possible Stack Corruption starting at VCRUNTIME140!memcpy+0x000000000000004e (Hash=0x39a5c8d2.0xd5d2d785)

The stack trace contains one or more locations for which no symbol or module could be found. This may be a sign of stack corruption.
0:000:x86> k
ChildEBP RetAddr  
WARNING: Stack unwind information not available. Following frames may be wrong.
06f8dfcc 2c037020 VCRUNTIME140!memcpy+0x4e
07132960 74206465 0x2c037020
07132964 706f206f 0x74206465
07132968 73206e65 0x706f206f
0713296c 61657274 mswsock!Tcpip4_WSHGetSockaddrType+0x1385
07132970 49203a6d 0x61657274
07132974 6c61766e 0x49203a6d
07132978 61206469 0x6c61766e
0713297c 6d756772 0x61206469
07132980 00746e65 0x6d756772
07132984 77be9420 0x746e65
07132988 00000000 php7!`string'


Output 2
======

Exception Hash (Major/Minor): 0xecbe5762.0x9db0e11d

 Hash Usage : Stack Trace:
Major+Minor : VCRUNTIME140!memcpy+0x4e
Major+Minor : Unknown
Major+Minor : php7!php_error_docref1+0x18
Major+Minor : php7!php_stream_display_wrapper_errors+0x19b
Major+Minor : php7!_php_stream_open_wrapper_ex+0x2f639e
Minor       : ucrtbase!malloc+0x2b
Minor       : php7!zval_copy_ctor_func+0x61
Minor       : php7!zend_parse_arg_impl+0x2f7877
Minor       : php7!zend_parse_va_args+0xdc
Minor       : php7!zif_str_repeat+0xb5
Minor       : php7!execute_ex+0xfb
Minor       : php7!zend_execute+0x124
Minor       : php7!zend_execute_scripts+0xe7
Minor       : php7!php_execute_script+0x372
Minor       : php!do_cli+0x3d3
Minor       : php!main+0x2cb
Minor       : php!__scrt_common_main_seh+0xf9
Minor       : KERNEL32!BaseThreadInitThunk+0x24
Excluded    : ntdll_77600000!RtlInitializeExceptionChain+0x8f
Excluded    : ntdll_77600000!RtlInitializeExceptionChain+0x5a
Instruction Address: 0x000000005eaed75e

Description: Possible Stack Corruption
Short Description: PossibleStackCorruption
Exploitability Classification: UNKNOWN
Recommended Bug Title: Possible Stack Corruption starting at VCRUNTIME140!memcpy+0x000000000000004e (Hash=0xecbe5762.0x9db0e11d)

The stack trace contains one or more locations for which no symbol or module could be found. This may be a sign of stack corruption.




Patches

Pull Requests

History

AllCommentsChangesGit/SVN commitsRelated reports
 [2016-09-12 04:02 UTC] stas@php.net
-Status: Open +Status: Feedback
 [2016-09-12 04:02 UTC] stas@php.net
Unable to reproduce on my systems, is is possible to reproduce on non-windows system? I don't have access to Windows now.
 [2016-09-13 15:24 UTC] ab@php.net
-Status: Feedback +Status: Analyzed
 [2016-09-13 15:24 UTC] ab@php.net
I repro this with 32-bit build. Likely it is due to some unchecked malloc result somewhere in the stack. There's https://github.com/php/php-src/pull/2120 which addresses this in ZMM. But otherwise, USE_ZEND_MALLOC=0 is for debug only. It gets documented already, as i see.

Thanks.
 [2016-09-13 16:54 UTC] stas@php.net
-Type: Security +Type: Bug
 [2016-09-13 16:54 UTC] stas@php.net
Not a security issue in this case.
 [2017-01-08 21:03 UTC] ab@php.net
-Status: Analyzed +Status: Closed -Assigned To: +Assigned To: ab
 [2017-01-08 21:03 UTC] ab@php.net
PR #2120 was merged, with that the issue is solved.

Thanks.
 
PHP Copyright © 2001-2025 The PHP Group
All rights reserved.
Last updated: Tue Jul 15 05:01:33 2025 UTC