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.
| Package | Affected versions | Patched versions |
|---|---|---|
contao/corePackagist | >= 3.4.0, < 3.4.4 | 3.4.4 |
contao/corePackagist | >= 2.0.0, < 3.2.19 | 3.2.19 |
Affected products
6cpe: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
10229e839b484Fix a directory traversal vulnerability discovered by Arnaud Buchoux
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- contao.org/en/news/contao-3_2_19.htmlnvdVendor AdvisoryWEB
- contao.org/en/news/contao-3_4_4.htmlnvdVendor AdvisoryWEB
- contao.org/en/news/directory-traversal-vulnerability-cve-2015-0269.htmlnvdVendor AdvisoryWEB
- github.com/advisories/GHSA-4r6g-xhx7-fm36ghsaADVISORY
- nvd.nist.gov/vuln/detail/CVE-2015-0269ghsaADVISORY
- github.com/FriendsOfPHP/security-advisories/blob/master/contao/core/CVE-2015-0269.yamlghsaWEB
- github.com/contao/core/commit/0229e839b4849e402256b972eb62f89f2c29674dghsaWEB
News mentions
0No linked articles in our index yet.