MDL-68443 xmldb: Improve path validation on view_xml action
authorBrendan Heywood <brendan@catalyst-au.net>
Sat, 18 Apr 2020 10:36:44 +0000 (20:36 +1000)
committerBrendan Heywood <brendan@catalyst-au.net>
Sat, 18 Apr 2020 10:50:03 +0000 (20:50 +1000)
admin/tool/xmldb/actions/view_xml/view_xml.class.php

index 9e6bd0c..58f023e 100644 (file)
@@ -68,13 +68,13 @@ class view_xml extends XMLDBAction {
 
         // Get the file parameter
         $file = required_param('file', PARAM_PATH);
-        $file = $CFG->dirroot . $file;
-        // File must be under $CFG->wwwroot and
-        // under one db directory (simple protection)
-        if (substr($file, 0, strlen($CFG->dirroot)) == $CFG->dirroot &&
-            substr(dirname($file), -2, 2) == 'db') {
+
+        $fullpath = $CFG->dirroot . $file;
+        // File param must start with / and end with /db/install.xml to be safe.
+        if (substr($file, 0, 1) == '/' &&
+            substr($file, -15, 15) == '/db/install.xml') {
             // Everything is ok. Load the file to memory
-            $this->output = file_get_contents($file);
+            $this->output = file_get_contents($fullpath);
         } else {
             // Switch to HTML and error
             $this->does_generate = ACTION_GENERATE_HTML;