High severity8.8NVD Advisory· Published Jan 26, 2016· Updated May 6, 2026
CVE-2015-8379
CVE-2015-8379
Description
CakePHP 2.x and 3.x before 3.1.5 might allow remote attackers to bypass the CSRF protection mechanism via the _method parameter.
Affected packages
Versions sourced from the GitHub Security Advisory.
| Package | Affected versions | Patched versions |
|---|---|---|
cakephp/cakephpPackagist | >= 2.0.0-alpha, < 3.1.5 | 3.1.5 |
Affected products
137cpe:2.3:a:cakephp:cakephp:2.0.1:*:*:*:*:*:*:*+ 136 more
- cpe:2.3:a:cakephp:cakephp:2.0.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.0:alpha:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.1.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.2.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.0:beta2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:alpha:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:dev:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.0.0:rc3:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.3.10:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.4.10:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.0:rc2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.5.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.0:beta:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.10:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.11:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.6.12:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.1:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.2:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.7.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:2.8.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:alpha1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:alpha2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:beta1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:beta2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:beta3:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:dev1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:dev2:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:dev3:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.0:rc1:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.3:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.4:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.5:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.6:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.7:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.8:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.9:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.10:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.11:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.12:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.13:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.14:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.0.15:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.0:*:*:*:*:*:*:*
- cpe:2.3:a:cakephp:cakephp:3.1.0:beta1:*:*:*:*:*:*
Patches
10f818a23a876Only allow GET, HEAD, OPTIONS to not have CSRF tokens.
2 files changed · +35 −27
src/Controller/Component/CsrfComponent.php+1 −1 modified@@ -94,7 +94,7 @@ public function startup(Event $event) if ($request->is('get') && $cookieData === null) { $this->_setCookie($request, $response); } - if ($request->is(['patch', 'put', 'post', 'delete'])) { + if (!$request->is(['head', 'get', 'options'])) { $this->_validateToken($request); unset($request->data[$this->_config['field']]); }
tests/TestCase/Controller/Component/CsrfComponentTest.php+34 −26 modified@@ -61,10 +61,11 @@ public function tearDown() */ public function testSettingCookie() { - $_SERVER['REQUEST_METHOD'] = 'GET'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); - $controller->request = new Request(['webroot' => '/dir/']); + $controller->request = new Request([ + 'environment' => ['REQUEST_METHOD' => 'GET'], + 'webroot' => '/dir/', + ]); $controller->response = new Response(); $event = new Event('Controller.startup', $controller); @@ -87,7 +88,7 @@ public function testSettingCookie() public static function httpMethodProvider() { return [ - ['PATCH'], ['PUT'], ['POST'], ['DELETE'] + ['PATCH'], ['PUT'], ['POST'], ['DELETE'], ['PURGE'], ['INVALIDMETHOD'] ]; } @@ -100,11 +101,14 @@ public static function httpMethodProvider() */ public function testValidTokenInHeader($method) { - $_SERVER['REQUEST_METHOD'] = $method; - $_SERVER['HTTP_X_CSRF_TOKEN'] = 'testing123'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); - $controller->request = new Request(['cookies' => ['csrfToken' => 'testing123']]); + $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => $method, + 'HTTP_X_CSRF_TOKEN' => 'testing123', + ], + 'cookies' => ['csrfToken' => 'testing123'] + ]); $controller->response = new Response(); $event = new Event('Controller.startup', $controller); @@ -122,11 +126,12 @@ public function testValidTokenInHeader($method) */ public function testInvalidTokenInHeader($method) { - $_SERVER['REQUEST_METHOD'] = $method; - $_SERVER['HTTP_X_CSRF_TOKEN'] = 'nope'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => $method, + 'HTTP_X_CSRF_TOKEN' => 'nope', + ], 'cookies' => ['csrfToken' => 'testing123'] ]); $controller->response = new Response(); @@ -144,10 +149,11 @@ public function testInvalidTokenInHeader($method) */ public function testValidTokenRequestData($method) { - $_SERVER['REQUEST_METHOD'] = $method; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => $method, + ], 'post' => ['_csrfToken' => 'testing123'], 'cookies' => ['csrfToken' => 'testing123'] ]); @@ -168,10 +174,11 @@ public function testValidTokenRequestData($method) */ public function testInvalidTokenRequestData($method) { - $_SERVER['REQUEST_METHOD'] = $method; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => $method, + ], 'post' => ['_csrfToken' => 'nope'], 'cookies' => ['csrfToken' => 'testing123'] ]); @@ -189,10 +196,11 @@ public function testInvalidTokenRequestData($method) */ public function testInvalidTokenRequestDataMissing() { - $_SERVER['REQUEST_METHOD'] = 'POST'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => 'POST', + ], 'post' => [], 'cookies' => ['csrfToken' => 'testing123'] ]); @@ -211,10 +219,11 @@ public function testInvalidTokenRequestDataMissing() */ public function testInvalidTokenMissingCookie($method) { - $_SERVER['REQUEST_METHOD'] = $method; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => [ + 'REQUEST_METHOD' => $method + ], 'post' => ['_csrfToken' => 'could-be-valid'], 'cookies' => [] ]); @@ -232,10 +241,9 @@ public function testInvalidTokenMissingCookie($method) */ public function testCsrfValidationSkipsRequestAction() { - $_SERVER['REQUEST_METHOD'] = 'POST'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => ['REQUEST_METHOD' => 'POST'], 'params' => ['requested' => 1], 'post' => ['_csrfToken' => 'nope'], 'cookies' => ['csrfToken' => 'testing123'] @@ -256,10 +264,11 @@ public function testCsrfValidationSkipsRequestAction() */ public function testConfigurationCookieCreate() { - $_SERVER['REQUEST_METHOD'] = 'GET'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); - $controller->request = new Request(['webroot' => '/dir/']); + $controller->request = new Request([ + 'environment' => ['REQUEST_METHOD' => 'GET'], + 'webroot' => '/dir/' + ]); $controller->response = new Response(); $component = new CsrfComponent($this->registry, [ @@ -290,10 +299,9 @@ public function testConfigurationCookieCreate() */ public function testConfigurationValidate() { - $_SERVER['REQUEST_METHOD'] = 'POST'; - $controller = $this->getMock('Cake\Controller\Controller', ['redirect']); $controller->request = new Request([ + 'environment' => ['REQUEST_METHOD' => 'POST'], 'cookies' => ['csrfToken' => 'nope', 'token' => 'yes'], 'post' => ['_csrfToken' => 'no match', 'token' => 'yes'], ]);
Vulnerability mechanics
Generated by null/stub on May 9, 2026. Inputs: CWE entries + fix-commit diffs from this CVE's patches. Citations validated against bundle.
References
9- github.com/cakephp/cakephp/commit/0f818a23a876c01429196bf7623e1e94a50230f0nvdPatchWEB
- blog.mindedsecurity.com/2016/01/request-parameter-method-may-lead-to.htmlnvdExploitWEB
- karmainsecurity.com/KIS-2016-01nvdExploitWEB
- packetstormsecurity.com/files/135301/CakePHP-3.2.0-CSRF-Bypass.htmlnvdExploitWEB
- seclists.org/fulldisclosure/2016/Jan/42nvdExploitWEB
- bakery.cakephp.org/2015/11/29/cakephp_315_released.htmlnvdVendor AdvisoryWEB
- github.com/advisories/GHSA-556q-h4vr-pgh2ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2015-8379ghsaADVISORY
- www.securityfocus.com/archive/1/537317/100/0/threadednvdWEB
News mentions
0No linked articles in our index yet.