From 2b3648c725f82efc1f1b12e8e3e35c76df990b58 Mon Sep 17 00:00:00 2001 From: Benjamin Eberlei Date: Mon, 31 Aug 2015 13:57:29 +0200 Subject: [PATCH] [DCOM-293] Fix security misconfiguration vulnerability allowing local remote arbitrary code execution. --- lib/Doctrine/ORM/Cache/Region/FileLockRegion.php | 3 ++- .../ORM/Tools/Console/Command/ConvertMappingCommand.php | 2 +- .../ORM/Tools/Console/Command/GenerateProxiesCommand.php | 2 +- lib/Doctrine/ORM/Tools/EntityGenerator.php | 3 ++- lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php | 3 ++- lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php | 5 +++-- 6 files changed, 11 insertions(+), 7 deletions(-) diff --git a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php index 69167bc901a..d8d4b26948d 100644 --- a/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php +++ b/lib/Doctrine/ORM/Cache/Region/FileLockRegion.php @@ -61,7 +61,7 @@ class FileLockRegion implements ConcurrentRegion */ public function __construct(Region $region, $directory, $lockLifetime) { - if ( ! is_dir($directory) && ! @mkdir($directory, 0777, true)) { + if ( ! is_dir($directory) && ! @mkdir($directory, 0775, true)) { throw new \InvalidArgumentException(sprintf('The directory "%s" does not exist and could not be created.', $directory)); } @@ -242,6 +242,7 @@ public function lock(CacheKey $key) if ( ! @file_put_contents($filename, $lock->value, LOCK_EX)) { return null; } + chmod($filename, 0664); return $lock; } diff --git a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php index 1f97a5074c7..b229f4a6c08 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/ConvertMappingCommand.php @@ -137,7 +137,7 @@ protected function execute(InputInterface $input, OutputInterface $output) // Process destination directory if ( ! is_dir($destPath = $input->getArgument('dest-path'))) { - mkdir($destPath, 0777, true); + mkdir($destPath, 0775, true); } $destPath = realpath($destPath); diff --git a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php index 52211879411..21edb9dab83 100644 --- a/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php +++ b/lib/Doctrine/ORM/Tools/Console/Command/GenerateProxiesCommand.php @@ -79,7 +79,7 @@ protected function execute(InputInterface $input, OutputInterface $output) } if ( ! is_dir($destPath)) { - mkdir($destPath, 0777, true); + mkdir($destPath, 0775, true); } $destPath = realpath($destPath); diff --git a/lib/Doctrine/ORM/Tools/EntityGenerator.php b/lib/Doctrine/ORM/Tools/EntityGenerator.php index ec83c4e4949..9027d9aa5b7 100644 --- a/lib/Doctrine/ORM/Tools/EntityGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityGenerator.php @@ -364,7 +364,7 @@ public function writeEntityClass(ClassMetadataInfo $metadata, $outputDirectory) $dir = dirname($path); if ( ! is_dir($dir)) { - mkdir($dir, 0777, true); + mkdir($dir, 0775, true); } $this->isNew = !file_exists($path) || (file_exists($path) && $this->regenerateEntityIfExists); @@ -389,6 +389,7 @@ public function writeEntityClass(ClassMetadataInfo $metadata, $outputDirectory) } elseif ( ! $this->isNew && $this->updateEntityIfExists) { file_put_contents($path, $this->generateUpdatedEntityClass($metadata, $path)); } + chmod($path, 0664); } /** diff --git a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php index f94292afc01..f431588fb09 100644 --- a/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php +++ b/lib/Doctrine/ORM/Tools/EntityRepositoryGenerator.php @@ -147,11 +147,12 @@ public function writeEntityRepositoryClass($fullClassName, $outputDirectory) $dir = dirname($path); if ( ! is_dir($dir)) { - mkdir($dir, 0777, true); + mkdir($dir, 0775, true); } if ( ! file_exists($path)) { file_put_contents($path, $code); + chmod($path, 0664); } } diff --git a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php index 3e96af821b9..b2ed435bc42 100644 --- a/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php +++ b/lib/Doctrine/ORM/Tools/Export/Driver/AbstractExporter.php @@ -130,7 +130,7 @@ public function setOutputDir($dir) public function export() { if ( ! is_dir($this->_outputDir)) { - mkdir($this->_outputDir, 0777, true); + mkdir($this->_outputDir, 0775, true); } foreach ($this->_metadata as $metadata) { @@ -139,12 +139,13 @@ public function export() $path = $this->_generateOutputPath($metadata); $dir = dirname($path); if ( ! is_dir($dir)) { - mkdir($dir, 0777, true); + mkdir($dir, 0775, true); } if (file_exists($path) && !$this->_overwriteExistingFiles) { throw ExportException::attemptOverwriteExistingFile($path); } file_put_contents($path, $output); + chmod($path, 0664); } } }