VYPR
Medium severity4.3NVD Advisory· Published May 26, 2017· Updated May 13, 2026

CVE-2015-0269

CVE-2015-0269

Description

Directory traversal vulnerability in Contao before 3.2.19, and 3.4.x before 3.4.4 allows remote authenticated "back end" users to view files outside their file mounts or the document root via unspecified vectors.

Affected packages

Versions sourced from the GitHub Security Advisory.

PackageAffected versionsPatched versions
contao/corePackagist
>= 3.4.0, < 3.4.43.4.4
contao/corePackagist
>= 2.0.0, < 3.2.193.2.19

Affected products

6
  • Contao/Contao CMS6 versions
    cpe:2.3:a:contao:contao_cms:*:*:*:*:*:*:*:*+ 5 more
    • cpe:2.3:a:contao:contao_cms:*:*:*:*:*:*:*:*range: <=3.2.18
    • cpe:2.3:a:contao:contao_cms:3.4.0:*:*:*:*:*:*:*
    • cpe:2.3:a:contao:contao_cms:3.4.0:beta1:*:*:*:*:*:*
    • cpe:2.3:a:contao:contao_cms:3.4.1:*:*:*:*:*:*:*
    • cpe:2.3:a:contao:contao_cms:3.4.2:*:*:*:*:*:*:*
    • cpe:2.3:a:contao:contao_cms:3.4.3:*:*:*:*:*:*:*

Patches

1
0229e839b484

Fix a directory traversal vulnerability discovered by Arnaud Buchoux

https://github.com/contao/coreLeo FeyerFeb 12, 2015via ghsa
4 files changed · +57 1
  • system/docs/CHANGELOG.md+8 0 modified
    @@ -1,6 +1,14 @@
     Contao Open Source CMS changelog
     ================================
     
    +Version 3.2.19 (2015-02-XX)
    +---------------------------
    +
    +### Fixed
    +Fixed a directory traversal vulnerability discovered by Arnaud Buchoux. See
    +CVE-2015-0269 for more information.
    +
    +
     Version 3.2.18 (2015-01-30)
     ---------------------------
     
    
  • system/modules/core/classes/Backend.php+29 1 modified
    @@ -515,6 +515,8 @@ public static function findSearchablePages($pid=0, $domain='', $blnIsSitemap=fal
     	 * Add a breadcrumb menu to the page tree
     	 *
     	 * @param string
    +	 *
    +	 * @throws \RuntimeException
     	 */
     	public static function addPagesBreadcrumb($strKey='tl_page_node')
     	{
    @@ -523,7 +525,13 @@ public static function addPagesBreadcrumb($strKey='tl_page_node')
     		// Set a new node
     		if (isset($_GET['node']))
     		{
    -			$objSession->set($strKey, \Input::get('node'));
    +			// Check the path (thanks to Arnaud Buchoux)
    +			if (\Validator::isInsecurePath(\Input::get('node', true)))
    +			{
    +				throw new \RuntimeException('Insecure path ' . \Input::get('node', true));
    +			}
    +
    +			$objSession->set($strKey, \Input::get('node', true));
     			\Controller::redirect(preg_replace('/&node=[^&]*/', '', \Environment::get('request')));
     		}
     
    @@ -534,6 +542,12 @@ public static function addPagesBreadcrumb($strKey='tl_page_node')
     			return;
     		}
     
    +		// Check the path (thanks to Arnaud Buchoux)
    +		if (\Validator::isInsecurePath($intNode))
    +		{
    +			throw new \RuntimeException('Insecure path ' . $intNode);
    +		}
    +
     		$arrIds   = array();
     		$arrLinks = array();
     		$objUser  = \BackendUser::getInstance();
    @@ -653,6 +667,8 @@ public static function addPageIcon($row, $label, DataContainer $dc=null, $imageA
     	 * Add a breadcrumb menu to the file tree
     	 *
     	 * @param string
    +	 *
    +	 * @throws \RuntimeException
     	 */
     	public static function addFilesBreadcrumb($strKey='tl_files_node')
     	{
    @@ -661,6 +677,12 @@ public static function addFilesBreadcrumb($strKey='tl_files_node')
     		// Set a new node
     		if (isset($_GET['node']))
     		{
    +			// Check the path (thanks to Arnaud Buchoux)
    +			if (\Validator::isInsecurePath(\Input::get('node', true)))
    +			{
    +				throw new \RuntimeException('Insecure path ' . \Input::get('node', true));
    +			}
    +
     			$objSession->set($strKey, \Input::get('node', true));
     			\Controller::redirect(preg_replace('/(&|\?)node=[^&]*/', '', \Environment::get('request')));
     		}
    @@ -672,6 +694,12 @@ public static function addFilesBreadcrumb($strKey='tl_files_node')
     			return;
     		}
     
    +		// Check the path (thanks to Arnaud Buchoux)
    +		if (\Validator::isInsecurePath($strNode))
    +		{
    +			throw new \RuntimeException('Insecure path ' . $strNode);
    +		}
    +
     		// Currently selected folder does not exist
     		if (!is_dir(TL_ROOT . '/' . $strNode))
     		{
    
  • system/modules/core/dca/tl_templates.php+14 0 modified
    @@ -136,12 +136,20 @@ class tl_templates extends Backend
     
     	/**
     	 * Add the breadcrumb menu
    +	 *
    +	 * @throws RuntimeException
     	 */
     	public function addBreadcrumb()
     	{
     		// Set a new node
     		if (isset($_GET['node']))
     		{
    +			// Check the path (thanks to Arnaud Buchoux)
    +			if (Validator::isInsecurePath(Input::get('node', true)))
    +			{
    +				throw new RuntimeException('Insecure path ' . Input::get('node', true));
    +			}
    +
     			$this->Session->set('tl_templates_node', Input::get('node', true));
     			$this->redirect(preg_replace('/(&|\?)node=[^&]*/', '', Environment::get('request')));
     		}
    @@ -153,6 +161,12 @@ public function addBreadcrumb()
     			return;
     		}
     
    +		// Check the path (thanks to Arnaud Buchoux)
    +		if (Validator::isInsecurePath($strNode))
    +		{
    +			throw new RuntimeException('Insecure path ' . $strNode);
    +		}
    +
     		// Currently selected folder does not exist
     		if (!is_dir(TL_ROOT . '/' . $strNode))
     		{
    
  • system/modules/core/library/Contao/Validator.php+6 0 modified
    @@ -337,6 +337,12 @@ public static function isInsecurePath($strPath)
     		$strPath = str_replace('\\', '/', $strPath);
     		$strPath = preg_replace('#//+#', '/', $strPath);
     
    +		// Equals ..
    +		if ($strPath == '..')
    +		{
    +			return true;
    +		}
    +
     		// Begins with ./
     		if (substr($strPath, 0, 2) == './')
     		{
    

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

7

News mentions

0

No linked articles in our index yet.