Skip to content

Commit 6bf4c31

Browse files
security #cve-2021-32693 [SecurityHttp] Fix "Authentication granted with multiple firewalls" (wouterj)
This PR was merged into the 5.3 branch.
2 parents 746321a + 04c9d1a commit 6bf4c31

File tree

2 files changed

+5
-5
lines changed

2 files changed

+5
-5
lines changed

Firewall/ContextListener.php

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,7 @@ public function authenticate(RequestEvent $event)
9595
$request = $event->getRequest();
9696
$session = $request->hasPreviousSession() && $request->hasSession() ? $request->getSession() : null;
9797

98-
$request->attributes->set('_security_firewall_run', true);
98+
$request->attributes->set('_security_firewall_run', $this->sessionKey);
9999

100100
if (null !== $session) {
101101
$usageIndexValue = $session instanceof Session ? $usageIndexReference = &$session->getUsageIndex() : 0;
@@ -169,7 +169,7 @@ public function onKernelResponse(ResponseEvent $event)
169169

170170
$request = $event->getRequest();
171171

172-
if (!$request->hasSession() || !$request->attributes->get('_security_firewall_run', false)) {
172+
if (!$request->hasSession() || $request->attributes->get('_security_firewall_run') !== $this->sessionKey) {
173173
return;
174174
}
175175

Tests/Firewall/ContextListenerTest.php

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@ public function testOnKernelResponseWithoutSession()
106106
$tokenStorage = new TokenStorage();
107107
$tokenStorage->setToken(new UsernamePasswordToken('test1', 'pass1', 'phpunit'));
108108
$request = new Request();
109-
$request->attributes->set('_security_firewall_run', true);
109+
$request->attributes->set('_security_firewall_run', '_security_session');
110110
$session = new Session(new MockArraySessionStorage());
111111
$request->setSession($session);
112112

@@ -212,7 +212,7 @@ public function testOnKernelResponseListenerRemovesItself()
212212
$listener = new ContextListener($tokenStorage, [], 'key123', null, $dispatcher);
213213

214214
$request = new Request();
215-
$request->attributes->set('_security_firewall_run', true);
215+
$request->attributes->set('_security_firewall_run', '_security_key123');
216216
$request->setSession($session);
217217

218218
$event = new ResponseEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST, new Response());
@@ -370,7 +370,7 @@ protected function runSessionOnKernelResponse($newToken, $original = null)
370370
{
371371
$session = new Session(new MockArraySessionStorage());
372372
$request = new Request();
373-
$request->attributes->set('_security_firewall_run', true);
373+
$request->attributes->set('_security_firewall_run', '_security_session');
374374
$request->setSession($session);
375375
$requestStack = new RequestStack();
376376
$requestStack->push($request);

0 commit comments

Comments
 (0)