Dotclear

Changeset 3354:a9db771a5a70 for inc


Ignore:
Timestamp:
10/05/16 17:14:00 (9 years ago)
Author:
franck <carnet.franck.paul@…>
Branch:
2.10
Children:
3357:9bbeb2691a23, 3358:8c3a4eda8e2b
Message:

Fix CVE-2016-7902: Dotclear <= 2.10.2 (Media Manager) Unrestricted File Upload — Thank's Hongkun Zeng for report

File:
1 edited

Legend:

Unmodified
Added
Removed
  • inc/core/class.dc.media.php

    r3299 r3354  
    943943          $zip = new fileUnzip($f->file); 
    944944          $zip->setExcludePattern($this->exclude_pattern); 
    945           $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); 
     945          $list = $zip->getList(false,'#(^|/)(__MACOSX|\.svn|\.DS_Store|\.directory|Thumbs\.db)(/|$)#'); 
    946946 
    947947          if ($create_dir) 
     
    968968          $zip->unzipAll($target); 
    969969          $zip->close(); 
     970 
     971          // Clean-up all extracted filenames 
     972          $clean = function ($name) { 
     973               $n = text::deaccent($name); 
     974               $n = preg_replace('/^[.]/u','',$n); 
     975               return preg_replace('/[^A-Za-z0-9._\-\/]/u','_',$n); 
     976          }; 
     977          foreach ($list as $zk => $zv) { 
     978               // Check if extracted file exists 
     979               $zf = $target.'/'.$zk; 
     980               if (!$zv['is_dir'] && file_exists($zf)) { 
     981                    $zt = $clean($zf); 
     982                    if ($zt != $zf) { 
     983                         rename($zf,$zt); 
     984                    } 
     985               } 
     986          } 
     987 
    970988          return dirname($f->relname).'/'.$destination; 
    971989     } 
Note: See TracChangeset for help on using the changeset viewer.

Sites map