Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit e1f817f

Browse files
committed
security #cve-2018-11408 [SecurityBundle] Fail if security.http_utils cannot be configured
* cve-2018-11408-3.3: [SecurityBundle] Fail if security.http_utils cannot be configured
2 parents 6ff5802 + 8e1b906 commit e1f817f

File tree

3 files changed

+16
-2
lines changed

3 files changed

+16
-2
lines changed

src/Symfony/Bundle/SecurityBundle/DependencyInjection/Compiler/AddSessionDomainConstraintPass.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,15 @@ class AddSessionDomainConstraintPass implements CompilerPassInterface
2626
*/
2727
public function process(ContainerBuilder $container)
2828
{
29-
if (!$container->hasParameter('session.storage.options') || !$container->has('security.http_utils')) {
29+
if (!$container->hasParameter('session.storage.options')) {
3030
return;
3131
}
3232

3333
$sessionOptions = $container->getParameter('session.storage.options');
3434
$domainRegexp = empty($sessionOptions['cookie_domain']) ? '%s' : sprintf('(?:%%s|(?:.+\.)?%s)', preg_quote(trim($sessionOptions['cookie_domain'], '.')));
3535
$domainRegexp = (empty($sessionOptions['cookie_secure']) ? 'https?://' : 'https://').$domainRegexp;
3636

37+
// if the service doesn't exist, an exception must be thrown - ignoring would put security at risk
3738
$container->findDefinition('security.http_utils')->addArgument(sprintf('{^%s$}i', $domainRegexp));
3839
}
3940
}

src/Symfony/Bundle/SecurityBundle/SecurityBundle.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ public function build(ContainerBuilder $container)
6060
$extension->addUserProviderFactory(new InMemoryFactory());
6161
$extension->addUserProviderFactory(new LdapFactory());
6262
$container->addCompilerPass(new AddSecurityVotersPass());
63-
$container->addCompilerPass(new AddSessionDomainConstraintPass(), PassConfig::TYPE_AFTER_REMOVING);
63+
$container->addCompilerPass(new AddSessionDomainConstraintPass(), PassConfig::TYPE_BEFORE_REMOVING);
6464
$container->addCompilerPass(new RegisterCsrfTokenClearingLogoutHandlerPass());
6565
}
6666
}

src/Symfony/Bundle/SecurityBundle/Tests/DependencyInjection/Compiler/AddSessionDomainConstraintPassTest.php

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,19 @@ public function testNoSession()
9696
$this->assertTrue($utils->createRedirectResponse($request, 'http://pirate.com/foo')->isRedirect('http://pirate.com/foo'));
9797
}
9898

99+
/**
100+
* @expectedException \Symfony\Component\DependencyInjection\Exception\ServiceNotFoundException
101+
* @expectedExceptionMessage You have requested a non-existent service "security.http_utils".
102+
*/
103+
public function testNoHttpUtils()
104+
{
105+
$container = new ContainerBuilder();
106+
$container->setParameter('session.storage.options', array());
107+
108+
$pass = new AddSessionDomainConstraintPass();
109+
$pass->process($container);
110+
}
111+
99112
private function createContainer($sessionStorageOptions)
100113
{
101114
$container = new ContainerBuilder();

0 commit comments

Comments
 (0)