[BUGFIX] Reduce strictness for .pl files in fileDenyPattern 86/59886/5
authorOliver Hader <oliver@typo3.org>
Wed, 6 Mar 2019 16:46:56 +0000 (17:46 +0100)
committerMarkus Klein <markus.klein@typo3.org>
Thu, 7 Mar 2019 20:53:00 +0000 (21:53 +0100)
Files like "file.pl.txt" cannot be uploaded anymore since ".pl" is
considered as executable Perl file. In multilingual scenarios "pl"
is used as reference for Polish content. Since required modules
mod_perl or mod_cgid are not enabled by default, and limited to
be executable only when invoked in location "/cgi-bin/", now only
files ending with ".pl" (e.g. "file.pl") are denied.

Resolves: #87733
Releases: master, 9.5, 8.7
Change-Id: Ib9a69fd3ec04f51653857d2f7309e30b78932653
Reviewed-on: https://review.typo3.org/c/59886
Tested-by: TYPO3com <noreply@typo3.com>
Tested-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Tested-by: Susanne Moog <susanne.moog@typo3.org>
Tested-by: Markus Klein <markus.klein@typo3.org>
Reviewed-by: Wolfgang Klinger <wolfgang@wazum.com>
Reviewed-by: Anja Leichsenring <aleichsenring@ab-softlab.de>
Reviewed-by: Susanne Moog <susanne.moog@typo3.org>
Reviewed-by: Markus Klein <markus.klein@typo3.org>
typo3/sysext/core/Classes/Core/SystemEnvironmentBuilder.php
typo3/sysext/core/Configuration/DefaultConfigurationDescription.yaml
typo3/sysext/core/Tests/Unit/Utility/GeneralUtilityTest.php

index d849436..bca62ae 100644 (file)
@@ -133,7 +133,7 @@ class SystemEnvironmentBuilder
         defined('CRLF') ?: define('CRLF', CR . LF);
 
         // Security related constant: Default value of fileDenyPattern
-        define('FILE_DENY_PATTERN_DEFAULT', '\\.(php[3-7]?|phpsh|phtml|pht|phar|shtml|cgi|pl)(\\..*)?$|^\\.htaccess$');
+        define('FILE_DENY_PATTERN_DEFAULT', '\\.(php[3-7]?|phpsh|phtml|pht|phar|shtml|cgi)(\\..*)?$|\\.pl$|^\\.htaccess$');
         // Security related constant: List of file extensions that should be registered as php script file extensions
         define('PHP_EXTENSIONS_DEFAULT', 'php,php3,php4,php5,php6,php7,phpsh,inc,phtml,pht,phar');
 
index 8b17e55..63cda56 100644 (file)
@@ -327,7 +327,7 @@ BE:
             description: 'If set, make a loose comparison ('''' equals 0) when validating record values after saving in DataHandler.'
         fileDenyPattern:
             type: text
-            description: 'A perl-compatible regular expression (without delimiters!) that - if it matches a filename - will deny the file upload/rename or whatever. For security reasons, files with multiple extensions have to be denied on an Apache environment with mod_alias, if the filename contains a valid php handler in an arbitrary position. Also, ".htaccess" files have to be denied. Matching is done case-insensitive. Default value is stored in constant FILE_DENY_PATTERN_DEFAULT'
+            description: 'A perl-compatible and JavaScript-compatible regular expression (without delimiters "/"!) that - if it matches a filename - will deny the file upload/rename or whatever. For security reasons, files with multiple extensions have to be denied on an Apache environment with mod_alias, if the filename contains a valid php handler in an arbitrary position. Also, ".htaccess" files have to be denied. Matching is done case-insensitive. Default value is stored in PHP constant FILE_DENY_PATTERN_DEFAULT'
         interfaces:
             type: text
             description: 'This determines which interface options are available in the login prompt (All options: "backend,frontend")'
index 58d7c87..71fc6a4 100644 (file)
@@ -4022,17 +4022,32 @@ class GeneralUtilityTest extends UnitTestCase
             'Nul character in file with .php' => ['image.php' . "\0", '.gif'],
             'Nul character and UTF-8 in file' => ['Ссылка' . "\0", '.gif'],
             'Nul character and Latin-1 in file' => ['ÉÐØ' . "\0", '.gif'],
-            'Regular .php file' => ['file' , '.php'],
             'Lower umlaut .php file' => ['üWithFile', '.php'],
             'Upper umlaut .php file' => ['fileWithÜ', '.php'],
             'invalid UTF-8-sequence' => ["\xc0" . 'file', '.php'],
             'Could be overlong NUL in some UTF-8 implementations, invalid in RFC3629' => ["\xc0\x80" . 'file', '.php'],
-            'Regular .php5 file' => ['file', '.php5'],
+            'Regular .php file' => ['file' , '.php'],
             'Regular .php3 file' => ['file', '.php3'],
+            'Regular .php5 file' => ['file', '.php5'],
+            'Regular .php7 file' => ['file', '.php7'],
             'Regular .phpsh file' => ['file', '.phpsh'],
             'Regular .phtml file' => ['file', '.phtml'],
             'Regular .pht file' => ['file', '.pht'],
-            'PHP file in the middle' => ['file', '.php.txt'],
+            'Regular .phar file' => ['file', '.phar'],
+            'Regular .shtml file' => ['file', '.shtml'],
+            'Regular .cgi file' => ['file', '.cgi'],
+            'Regular .pl file' => ['file', '.pl'],
+            'Wrapped .php file ' => ['file', '.php.txt'],
+            'Wrapped .php3 file' => ['file', '.php3.txt'],
+            'Wrapped .php5 file' => ['file', '.php5.txt'],
+            'Wrapped .php7 file' => ['file', '.php7.txt'],
+            'Wrapped .phpsh file' => ['file', '.phpsh.txt'],
+            'Wrapped .phtml file' => ['file', '.phtml.txt'],
+            'Wrapped .pht file' => ['file', '.pht.txt'],
+            'Wrapped .phar file' => ['file', '.phar.txt'],
+            'Wrapped .shtml file' => ['file', '.shtml.txt'],
+            'Wrapped .cgi file' => ['file', '.cgi.txt'],
+            // allowed "Wrapped .pl file" in order to allow language specific files containing ".pl."
             '.htaccess file' => ['', '.htaccess'],
         ];
 
@@ -4085,7 +4100,8 @@ class GeneralUtilityTest extends UnitTestCase
             'UTF-8 .gif file' => ['Ссылка.gif'],
             'Lower umlaut .jpg file' => ['üWithFile.jpg'],
             'Upper umlaut .png file' => ['fileWithÜ.png'],
-            'Latin-1 .gif file' => ['ÉÐØ.gif']
+            'Latin-1 .gif file' => ['ÉÐØ.gif'],
+            'Wrapped .pl file' => ['file.pl.txt'],
         ];
     }