Skip to content

Commit d1f0919

Browse files
author
Dale Sikkema
committed
MAGETWO-45226: RCE Vulnerability
- tighten serialized object detection regex
1 parent 180ca97 commit d1f0919

File tree

2 files changed

+21
-4
lines changed

2 files changed

+21
-4
lines changed

lib/internal/Magento/Framework/Unserialize/Test/Unit/UnserializeTest.php

Lines changed: 20 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,12 +25,29 @@ public function testUnserializeArray()
2525
}
2626

2727
/**
28-
* @expectedException Exception
28+
* @param string $serialized The string containing serialized object
29+
*
30+
* @expectedException \Exception
2931
* @expectedExceptionMessage String contains serialized object
32+
* @dataProvider serializedObjectDataProvider
3033
*/
31-
public function testUnserializeObject()
34+
public function testUnserializeObject($serialized)
3235
{
33-
$serialized = 'a:2:{i:0;s:3:"foo";i:1;O:6:"Object":1:{s:11:"Objectvar";i:123;}}';
3436
$this->assertFalse($this->unserialize->unserialize($serialized));
3537
}
38+
39+
public function serializedObjectDataProvider()
40+
{
41+
return [
42+
// Upper and lower case serialized object indicators, nested in array
43+
['a:2:{i:0;s:3:"foo";i:1;O:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
44+
['a:2:{i:0;s:3:"foo";i:1;o:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
45+
['a:2:{i:0;s:3:"foo";i:1;c:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
46+
['a:2:{i:0;s:3:"foo";i:1;C:6:"Object":1:{s:11:"Objectvar";i:123;}}'],
47+
48+
// Positive, negative signs on object length, non-nested
49+
['o:+6:"Object":1:{s:11:"Objectvar";i:123;}'],
50+
['o:-6:"Object":1:{s:11:"Objectvar";i:123;}']
51+
];
52+
}
3653
}

lib/internal/Magento/Framework/Unserialize/Unserialize.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@ class Unserialize
1414
*/
1515
public function unserialize($string)
1616
{
17-
if (preg_match('/o:\d+:"[a-z0-9_]+":\d+:{.*?}/i', $string)) {
17+
if (preg_match('/[oc]:[+\-]?\d+:"/i', $string)) {
1818
trigger_error('String contains serialized object');
1919
return false;
2020
}

0 commit comments

Comments
 (0)