* Fixed bug #12310: Encryption key can be recalculated when using normal mailform...
authorErnesto Baschny <ernst@cron-it.de>
Thu, 22 Oct 2009 09:24:20 +0000 (09:24 +0000)
committerErnesto Baschny <ernst@cron-it.de>
Thu, 22 Oct 2009 09:24:20 +0000 (09:24 +0000)
git-svn-id: https://svn.typo3.org/TYPO3v4/Core/trunk@6255 709f56b5-9817-0410-a4d7-c38de5d9e867

ChangeLog
typo3/sysext/cms/tslib/class.tslib_fe.php

index c228321..772303c 100755 (executable)
--- a/ChangeLog
+++ b/ChangeLog
@@ -2,6 +2,7 @@
 
        * Fixed bug #11586: Potential SQL injection in frontend editing (thanks to Oliver Klee)
        * Fixed bug #12309: It was possible to gain access to the Install Tool by only knowing the md5 hash of the password.
+       * Fixed bug #12310: Encryption key can be recalculated when using normal mailform when [FE][strictFormmail] == 0 (thanks to Oliver Klee)
        * Fixed bug #12303: XSS vulnerability due to not proper sanitizing in function t3lib_div::quoteJSvalue (thanks to Oliver Klee)
        * Fixed bug #12304: Frame inclusion in the backend through alt_mod_frameset (thanks to Oliver Klee)
        * Fixed bug #12305: XSS vulnerability in view_help.php / tfID parameter (thanks to Oliver Klee)
index 535b17e..ccd10e5 100644 (file)
@@ -4108,20 +4108,27 @@ if (version == "n3") {
        }
 
        /**
-        * Encrypts a strings by XOR'ing all characters with the ASCII value of a character in $this->TYPO3_CONF_VARS['SYS']['encryptionKey']
-        * If $this->TYPO3_CONF_VARS['SYS']['encryptionKey'] is empty, 255 is used for XOR'ing. Using XOR means that the string can be decrypted by simply calling the function again - just like rot-13 works (but in this case for ANY byte value).
+        * Encrypts a strings by XOR'ing all characters with a key derived from the
+        * TYPO3 encryption key.
         *
-        * @param       string          Input string
-        * @return      string          Output string
+        * Using XOR means that the string can be decrypted by simply calling the
+        * function again - just like rot-13 works (but in this case for ANY byte
+        * value).
+        *
+        * @param string $string string to crypt, may be empty
+        *
+        * @return string binary crypt string, will have the same length as $string
         */
-       function roundTripCryptString($string)  {
+       protected function roundTripCryptString($string) {
                $out = '';
-               $strLen = strlen($string);
-               $cryptLen = strlen($this->TYPO3_CONF_VARS['SYS']['encryptionKey']);
 
-               for ($a=0; $a < $strLen; $a++)  {
-                       $xorVal = $cryptLen>0 ? ord($this->TYPO3_CONF_VARS['SYS']['encryptionKey']{($a%$cryptLen)}) : 255;
-                       $out.= chr(ord($string{$a}) ^ $xorVal);
+               $cleartextLength = strlen($string);
+               $key = sha1($this->TYPO3_CONF_VARS['SYS']['encryptionKey']);
+               $keyLength = strlen($key);
+
+               for ($a = 0; $a < $cleartextLength; $a++) {
+                       $xorVal = ord($key{($a % $keyLength)});
+                       $out .= chr(ord($string{$a}) ^ $xorVal);
                }
 
                return $out;