Bug 1260695

Summary: php: Another use-after-free vulnerability in unserialize() with SplObjectStorage
Product: [Other] Security Response Reporter: Adam Mariš <amaris>
Component: vulnerabilityAssignee: Red Hat Product Security <security-response-team>
Status: CLOSED DUPLICATE QA Contact:
Severity: medium Docs Contact:
Priority: medium    
Version: unspecifiedCC: bleanhar, ccoleman, dmcphers, fedora, jdetiber, jialiu, jkeck, jokerman, jorton, kseifried, lmeyer, mmaslano, mmccomas, rcollet, webstack-team
Target Milestone: ---Keywords: Security
Target Release: ---   
Hardware: All   
OS: Linux   
Whiteboard:
Fixed In Version: php-5.5.29, php-5.6.13, php-5.4.45 Doc Type: Bug Fix
Doc Text:
Story Points: ---
Clone Of: Environment:
Last Closed: 2015-09-09 08:27:02 UTC Type: ---
Regression: --- Mount Type: ---
Documentation: --- CRM:
Verified Versions: Category: ---
oVirt Team: --- RHEL 7.3 requirements from Atomic Host:
Cloudforms Team: --- Target Upstream Version:
Embargoed:
Bug Depends On: 1260700    
Bug Blocks: 1260756    

Description Adam Mariš 2015-09-07 13:10:07 UTC
Another user-after-free vulnerability was found in unserialize(). We can create ZVAL and free it. During deserialization it will still allow to use R: or r: to set references to already freed memory, which could possibly lead to remote code execution.

Vulnerable code:

ALLOC_INIT_ZVAL(pentry);
if (!php_var_unserialize(&pentry, &p, s + buf_len, &var_hash TSRMLS_CC)) {
	zval_ptr_dtor(&pentry);
	goto outexcept;
}
var_push_dtor(&var_hash, &pentry);
if(Z_TYPE_P(pentry) != IS_OBJECT) {
	goto outexcept;
}
ALLOC_INIT_ZVAL(pinf);
if (*p == ',') { /* new version has inf */
	++p;
	if (!php_var_unserialize(&pinf, &p, s + buf_len, &var_hash TSRMLS_CC)) {
		zval_ptr_dtor(&pinf);
		goto outexcept;
	}
}

Upstream report:

https://bugs.php.net/bug.php?id=70365

Upstream patch:

http://git.php.net/?p=php-src.git;a=commit;h=f06a069c462d37c2e009f6d1d93b8c8e7b713393

Comment 1 Adam Mariš 2015-09-07 13:17:49 UTC
Created php tracking bugs for this issue:

Affects: fedora-all [bug 1260700]

Comment 2 Adam Mariš 2015-09-09 08:27:02 UTC

*** This bug has been marked as a duplicate of bug 1260642 ***

Comment 3 Fedora Update System 2015-09-14 22:19:58 UTC
php-5.6.13-1.fc21 has been pushed to the Fedora 21 stable repository. If problems still persist, please make note of it in this bug report.

Comment 4 Fedora Update System 2015-09-14 23:18:53 UTC
php-5.6.13-1.fc22 has been pushed to the Fedora 22 stable repository. If problems still persist, please make note of it in this bug report.

Comment 5 Fedora Update System 2015-09-18 18:43:56 UTC
php-5.6.13-1.fc23 has been pushed to the Fedora 23 stable repository. If problems still persist, please make note of it in this bug report.