VYPR
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.

PackageAffected versionsPatched versions
cakephp/cakephpPackagist
>= 2.0.0-alpha, < 3.1.53.1.5

Affected products

137
  • Cakephp/Cakephp137 versions
    cpe: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

1
0f818a23a876

Only allow GET, HEAD, OPTIONS to not have CSRF tokens.

https://github.com/cakephp/cakephpMark StoryNov 26, 2015via ghsa
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

News mentions

0

No linked articles in our index yet.