Sec Bug->Bug #73022 [Opn->Fbk]: str_repeat write access violation

From: Date: Mon, 05 Sep 2016 21:01:41 +0000
Subject: Sec Bug->Bug #73022 [Opn->Fbk]: str_repeat write access violation
References: 1  Groups: php.bugs 
Request: Send a blank email to php-bugs+get-203815@lists.php.net to get a copy of this message
Edit report at https://bugs.php.net/bug.php?id=73022&edit=1 ID: 73022 Updated by: stas@php.net Reported by: fernando at null-life dot com Summary: str_repeat write access violation -Status: Open +Status: Feedback -Type: Security +Type: Bug Package: Strings related Operating System: Windows PHP Version: 7.0.10 Block user comment: N Private report: Y New Comment: Unable to reproduce on my machine. Unfortunately, I don't have Windows, so not sure what is going there. Is it reproducible on any Unix system? Previous Comments: ------------------------------------------------------------------------ [2016-09-05 20:40:47] fernando at null-life dot com Description: ------------ Attached script causes a write access violation when running with the windows.php.com binary when using USE_ZEND_ALLOC=0 PHP_FUNCTION(str_repeat) { zend_string *input_str; /* Input string */ zend_long mult; /* Multiplier */ zend_string *result; /* Resulting string */ size_t result_len; /* Length of the resulting string */ if (zend_parse_parameters(ZEND_NUM_ARGS(), "Sl", &input_str, &mult) == FAILURE) { return; } if (mult < 0) { php_error_docref(NULL, E_WARNING, "Second argument has to be greater than or equal to 0"); return; } /* Don't waste our time if it's empty */ /* ... or if the multiplier is zero */ if (ZSTR_LEN(input_str) == 0 || mult == 0) RETURN_EMPTY_STRING(); /* Initialize the result string */ --> result = zend_string_safe_alloc(ZSTR_LEN(input_str), mult, 0, 0); result_len = ZSTR_LEN(input_str) * mult; Test script: --------------- <?php $v3=str_repeat("#", 0xffffffff/3); Expected result: ---------------- No crash Actual result: -------------- (2a90.24c0): Access violation - code c0000005 (first chance) First chance exceptions are reported before any exception handling. This exception may be expected and handled. php7!zif_str_repeat+0x76: 6263c906 c70601000000 mov dword ptr [esi],1 ds:002b:00000000=???????? Processing initial command 'r;!exploitable -v' 0:000:x86> r;!exploitable -v eax=00000000 ebx=55555555 ecx=ad59a3d1 edx=00000000 esi=00000000 edi=55555555 eip=6263c906 esp=0680e49c ebp=0a4a00d0 iopl=0 nv up ei pl nz na pe nc cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00010206 php7!zif_str_repeat+0x76: 6263c906 c70601000000 mov dword ptr [esi],1 ds:002b:00000000=???????? !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\KERNEL32.DLL - *** ERROR: Symbol file could not be found. Defaulted to export symbols for ntdll.dll - Exception Faulting Address: 0x0 First Chance Exception Type: STATUS_ACCESS_VIOLATION (0xC0000005) Exception Sub-Type: Write Access Violation Faulting Instruction:6263c906 mov dword ptr [esi],1 Basic Block: 6263c906 mov dword ptr [esi],1 Tainted Input operands: 'esi' 6263c90c mov dword ptr [esi+4],6 6263c913 mov dword ptr [esi+8],0 6263c91a mov dword ptr [esi+0ch],ebx 6263c91d mov ecx,dword ptr [esp+0ch] 6263c921 mov edx,dword ptr [esp+10h] 6263c925 mov edi,dword ptr [ecx+0ch] 6263c928 mov eax,edi 6263c92a imul eax,edx 6263c92d mov dword ptr [esp+14h],eax 6263c931 cmp edi,1 6263c934 jne php7!zif_str_repeat+0xba (6263c94a) Exception Hash (Major/Minor): 0xde5931c9.0xdf3ae42d Hash Usage : Stack Trace: Major+Minor : php7!zif_str_repeat+0x76 Major+Minor : php7!execute_ex+0xfb Major+Minor : php7!zend_execute+0x124 Major+Minor : php7!zend_execute_scripts+0xe7 Major+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: 0x000000006263c906 Source File: c:\php-sdk\php70dev\vc14\x86\php-7.0.10\ext\standard\string.c Source Line: 5031 Description: User Mode Write AV near NULL Short Description: WriteAVNearNull Exploitability Classification: UNKNOWN Recommended Bug Title: User Mode Write AV near NULL starting at php7!zif_str_repeat+0x0000000000000076 (Hash=0xde5931c9.0xdf3ae42d) User mode write access violations that are near NULL are unknown. ------------------------------------------------------------------------ -- Edit this bug report at https://bugs.php.net/bug.php?id=73022&edit=1

« previous php.bugs (#203815) next »