CVE-2019-25098 (PHP, published 2023-01-05T08:15Z)
Description: value: A vulnerability was found in soerennb eXtplorer up to 2.1.12. It has been classified as critical. This affects an unknown part of the file include/archive.php of the component Archive Handler. The manipulation leads to path traversal. Upgrading to version 2.1.13 is able to address this issue. The identifier of the patch is b8fcb888f4ff5e171c16797a4b075c6c6f50bf46. It is recommended to upgrade the affected component. The identifier VDB-217437 was assigned to this vulnerability.
Severity: nan (CVSS v3 base score: 9.8)
Weakness: CWE-22 \u2014 Improper Limitation of a Pathname to a Restricted Directory ('Path Traversal')
The product uses external input to construct a pathname that is intended to identify a file or directory that is located underneath a restricted parent directory, but the product does not properly neutralize special elements within the pathname that can cause the pathname to resolve to a location that is outside of the restricted directory.
Repository: https://github.com/soerennb/extplorer
Files changed:
CHANGELOG.txt
admin.extplorer.php
include/archive.php
include/chmod.php
include/functions.php
include/init.php
include/mkitem.php
include/result.class.php
include/search.php
languages/turkish.php
languages/turkish_mimes.php
Commit message: - fixed various security issues reported by Mario Korth:
  * potential XSS
  * Arbitrary file read
  * Path traversal in listing directory contents
  * Path traversal in archive feature
- added new turkish translations


Vulnerable code:
					$selitem=stripslashes($GLOBALS['__POST']["selitems"][$i]);
			"value": "<?php echo $GLOBALS['item'] . '.'. $default_archive_type ?>",
				$item = $GLOBALS['__POST']["selitems"][$i];
		"title" : "<?php echo $text  ?>",
					"dir": "<?php echo stripslashes($GLOBALS['__POST']["dir"]) ?>", 
					"selitems[]": ['<?php echo implode("','", $GLOBALS['__POST']["selitems"]) ?>'], 
	if($real_home===false || $real_dir===false) {
		if(@stristr($abs_dir,"\\.\\.")) return false;
	} else if(strcmp($real_home,@substr($real_dir,0,strlen($real_home)))) {
	ext_Result::sendResult('', false, '"'.$abs_dir.'" - '.$GLOBALS["error_msg"]["direxist"]);
						$messagetxt .= $message .'<br/>';
						$messagetxt .= $error .'<br/>';
		$array[$i]['file'] = $s_item;
﻿<?php
// Turkish Language for eXtplorer (Translated by Sinan Ata, Tolga'(cumla.blogspot.com))
	"back"			=> "Geri Gel",
	"home"			=> "Ana klasör oluşturulmamış ayarlarınızı kontrol edin.",
	"permchange"		=> "İzin değiştirme başarısız. (sebebi dosya sahiplik sorunu olabilir)",
	"miscfilesize"		=> "Dosya maksimum boyutu aştı.",
	"extract_noarchive" => "The File is no extractable Archive.",
	'chmod_none_not_allowed' => 'Changing Permissions to <none> is not allowed',
	'archive_dir_notexists' => 'The Save-To Directory you have specified does not exist.',
	'archive_dir_unwritable' => 'Please specify a writable directory to save the archive to.',
	'archive_creation_failed' => 'Failed saving the Archive File'
	"homelink"		=> "Başa Dön",
	"comprlink"		=> "Depola",
	"extractlink"	=> "Extract Archive",
	'chmodlink'		=> 'İzinleri (chmod) Değiştir (Klasör/Dosya(lar))', // new mic
	'logolink'		=> 'eXtplorer Websitesine git (yeni pencerede)', // new mic
	'confirm_delete_file' => 'Bu dosyayı silmek istediğinize eminmisiniz? <br />%s',
	"miscconfpass"		=> "Şifreyi Onayla",
	"miscconfnewpass"	=> "Yeni Şifeyi Onayla",
	"miscshowhidden"	=> "Gizli öğeleri Göster",
	"miscadduser"		=> "Kullanıcı ekle",
	"miscedituser"		=> "'%s' kullanıcısını değiştir",
	"miscsubdirs"		=> "Alt kategorileri de ara",
	"miscchmod"		=> array("Sahip", "Grup", "Halk"),
	'miscownerdesc'		=> '<strong>Açıklama:</strong><br />User (UID) /<br />Group (GID)<br />Current rights:<br /><strong> %s ( %s ) </strong>/<br /><strong> %s ( %s )</strong>',
	'siphpupdate'		=> 'Bilgi: <span style="color: red;">The PHP version you use is <strong>not</strong> actual!</span><br />To guarantee all functions and features of '.$_VERSION->PRODUCT.' and addons,<br />you should use as minimum <strong>PHP.Version 4.3</strong>!',
	'siwebserver'		=> 'Webserver',
	'sisafemode'		=> 'Safe Mode',
	'sishortopentags'	=> 'Short Open Tags',
	'sifileuploads'		=> 'File Uploads',
	'siregglobals'		=> 'Register Globals',
	'sixmlenabled'		=> 'XML enabled',
	'sizlibenabled'		=> 'ZLIB enabled',
	'sidisabledfuncs'	=> 'Non enabled functions',
	'sieditor'			=> 'WYSIWYG Editor',
	'siconfigfile'		=> 'Config file',
	'sidirpermsmess'	=> 'To be shure that all functions and features of '.$_VERSION->PRODUCT.' are working correct, following folders should have permission to write [chmod 0777]',
	'sionoff'			=> array( 'On', 'Off' ),
	'extract_warning' => "Gerçekten bu dosyayı çıkartmak istiyormusunuz? Buraya?\\nThis will overwrite existing files when not used carefully!",
	'extract_success' => "Extraction was successful",
	'extract_failure' => "Extraction failed",
	
	'overwrite_files' => 'Varolan dosyanın üzerine yaz?',
	'recurse_subdirs'	=> 'Alt klasörlerede uygula?',
	'returndir'	=>	'Kaydettikten sonra dizine geri dön?',
	'line'		=> 	'Line',
	'column'	=>	'Column',
	'wordwrap'	=>	'Wordwrap: (IE only)',
	'copyfile'	=>	'Copy file into this filename',
	'bookmarkfile_not_writable' => "Failed to %s the bookmark.\n The Bookmark File '%s' \nis not writable.",
	'lbl_remove_bookmark' => 'Bu dizini yer imleri listesinden çıkart',
	'good_compression' => 'iyi sıkıştırma',
	'best_compression' => 'en iyi sıkıştırma',
	'ftp_header' => 'Local FTP Authentication',
	'ftp_login_lbl' => 'Please enter the login credentials for the FTP server',
	'ftp_hostname_port' => 'FTP Server Hostname and Port <br />(Port is optional)',
	'ftp_connection_failed' => "FTP servera bağlanılamadı. \nPlease check that the FTP server is running on your server.",
	'switch_file_mode' => 'Şimdiki mod: <strong>%s</strong>. Dilerseniz %s moduna geçebilirsiniz.',
	'symlink_target' => 'Target of the Symbolic Link',
	"permchange"		=> "CHMOD Success:",
	'browsing_directory' => 'Dizinlere Gözat',
	'filter_grid' => 'Filtrele',
	'password_warning_title' => 'Important - Change your Password!',
	'password_warning_text' => 'The user account you are logged in with (admin with password admin) corresponds to the default eXtplorer priviliged account. Your eXtplorer installation is open to intrusion and you should immediately fix this security hole!',
	'change_password_success' => 'Your Password has been changed!',
	'success' => 'Basarili',
	'dialog_title' => 'Website Dialog',
	'acttransfer' => 'Başka Sunucudan Transfer Et',
	'max_file_size' => 'Maksimum Dosya Boyutu',
	'max_post_size' => 'Maksimum Yükleme Sınırı',
	'archive_created' => 'The Archive File has been created!',
	'save_processing' => 'Saving File...',
	'current_user' => 'This script currently runs with the permissions of the following user:',
﻿<?php
// Turkish Language for QuiX (Translated by Sinan Ata 'From Turkey'(cumla.blogspot.com))
	"symlink"	=> "Symbolic Link",

Fixed code:

--- version 2.1.13 ---
- fixed various security issues reported by Mario Korth:
  * potential XSS 
  * Arbitrary file read
  * Path traversal in listing directory contents
  * Path traversal in archive feature
- added new turkish translations 

			if (!down_home(get_abs_dir($requestedDir))) {
			    ext_Result::sendResult('', false, $requestedDir.": ".$GLOBALS["error_msg"]["abovehome"]);
			    $requestedDir = '';
			}
					$selitem=basename(stripslashes($GLOBALS['__POST']["selitems"][$i]));
			"value": "<?php echo htmlspecialchars($GLOBALS['item'], ENT_QUOTES) . '.'. $default_archive_type ?>",
				$item = html_entity_decode($GLOBALS['__POST']["selitems"][$i], ENT_QUOTES);
		"title" : "<?php echo htmlspecialchars($text,ENT_QUOTES)  ?>",
					"dir": "<?php echo stripslashes(htmlentities($GLOBALS['__POST']["dir"],ENT_QUOTES)) ?>", 
					"selitems[]": ['<?php echo htmlentities(implode("','", $GLOBALS['__POST']["selitems"]),ENT_QUOTES) ?>'], 
	if( $real_dir == '' ) $real_dir = dirname( $abs_dir );
	if( $real_home == '' ) $real_home = $_SERVER['DOCUMENT_ROOT'];
	//echo 'NOW: $real_home = '.$real_home;
	//echo ', $real_dir = '.$real_dir;
	if(@stristr($abs_dir,"\\.\\.")) return false;
	if(strcmp($real_home,@substr($real_dir,0,strlen($real_home)))) {
//echo "Down home: ".down_home( "/etc/passwd" );exit;
	ext_Result::sendResult('', false, '"'.htmlspecialchars($abs_dir,ENT_QUOTES).'" - '.$GLOBALS["error_msg"]["direxist"]);
				if (!down_home(dirname($symlink_target))) {
				    ext_Result::sendResult('', false, $symlink_target.": ".$GLOBALS["error_msg"]["abovehome"]);
				}
					    $messagetxt .= htmlspecialchars($message, ENT_QUOTES ) .'<br/>';
					    $messagetxt .=  htmlspecialchars($error, ENT_QUOTES ) .'<br/>';
		$array[$i]['file'] = htmlentities($s_item, ENT_QUOTES );
<?php
// Turkish Language for eXtplorer v2.1.12 (Translated by Mehmet Taş)
	"back"			=> "Geri Al",
	"home"			=> "Ana klasör oluşturulmamış. Ayarlarınızı kontrol edin.",
	"permchange"		=> "İzin değiştirme başarısız. (Nedeni dosya sahiplik sorunu olabilir.)",
	"miscfilesize"		=> "Dosya en büyük boyutu aştı.",
	"extract_noarchive" => "Dosya uygun arşivlenmemiş.",
	'chmod_none_not_allowed' => 'İzinleri <hiçbiri> olarak değiştirmek yasaktır',
	'archive_dir_notexists' => 'Belirlediğiniz Kaydetme Dizini mevcut değil.',
	'archive_dir_unwritable' => 'Arşiv kaydetmek için lütfen yazılabilir dizin belirtin.',
	'archive_creation_failed' => 'Arşiv Dosyasını Kaydetme Başarısız'
	"homelink"		=> "Anadizin",
	"comprlink"		=> "Sıkıştır",
	"extractlink"	        => "Arşivi Çıkart",
	'chmodlink'		=> 'İzinleri (Chmod) Değiştir', // new mic
	'logolink'		=> 'eXtplorer Websitesine Git (yeni pencerede)', // new mic
	'confirm_delete_file' => 'Bu dosyayı silmek istediğinizden emin misiniz? <br />%s',
	"miscconfpass"		=> "Şifreyi Onaylayın",
	"miscconfnewpass"	=> "Yeni Şifeyi Onaylayın",
	"miscshowhidden"	=> "Gizli Öğeleri Gösterin",
	"miscadduser"		=> "Kullanıcı ekleyin",
	"miscedituser"		=> "'%s' kullanıcısını değiştirin",
	"miscsubdirs"		=> "Alt kategorileri de arayın",
	"miscchmod"		=> array("Sahip", "Grup", "Genel"),
	'miscownerdesc'		=> '<strong>Açıklama:</strong><br />Kullanıcı (UID) /<br />Grup (GID)<br />Mevcut Haklar:<br /><strong> %s ( %s ) </strong>/<br /><strong> %s ( %s )</strong>',
	'siphpupdate'		=> 'Bilgi: <span style="color: red;">Kullandığınız PHP sürümü <strong>güncel değil!</strong></span><br />'.$_VERSION->PRODUCT.' tüm ekleriyle fonksiyonlarını ve özelliklerini garantilemek için <br />en düşük <strong>PHP sürümü 4.3</strong> kullanmalısınız!',
	'siwebserver'		=> 'Web Sunucu',
	'sisafemode'		=> 'Güvenli Mod',
	'sishortopentags'	=> 'Kısa Açık Etiketler',
	'sifileuploads'		=> 'Dosya Yüklemeleri',
	'siregglobals'		=> 'Genel Kayıtlar',
	'sixmlenabled'		=> 'XML Etkin',
	'sizlibenabled'		=> 'ZLIB Etkin',
	'sidisabledfuncs'	=> 'Etkin Olmayan İşlevler',
	'sieditor'			=> 'WYSIWYG Editör',
	'siconfigfile'		=> 'Yapılandırma Dosyası',
	'sidirpermsmess'	=> 'Şu uygulamanın '.$_VERSION->PRODUCT.' tüm işlevleri ve özelliklerinin doğru çalıştığından emin olmak için, aşağıdaki klasörlerin yazma izinleri [chmod 0777] olmalıdır',
	'sionoff'		=> array( 'Açık', 'Kapalı' ),
	'extract_warning'	=> "Gerçekten bu dosyayı buraya çıkartmak istiyor musunuz?<br />Dikkatli kullanılmadığında varolan dosyaların üzerine yazılacak!",
	'extract_success'	=> "Arşiv Çıkartma Başarılı",
	'extract_failure'	=> "Arşiv Çıkartma Başarısız",
        


'overwrite_files' => 'Varolan dosyanın üzerine yaz?',
	'recurse_subdirs'	=> 'Alt Klasörlere Uygulansın mı?',
	'returndir'	=>	'Kaydettikten sonra dizine geri dönülsün mü?',
	'line'		=> 	'Satır',
	'column'	=>	'Sütun',
	'wordwrap'	=>	'Sözcük Kaydırma: (yalnız IE)',
	'copyfile'	=>	'Dosyayı, bu dosya adına kopyalayın',
	'bookmarkfile_not_writable' => "Yer imi % s konumuna getirilemedi. \n Yer İmi Dosyası '%s' \nis yazılabilir değil.",
	'lbl_remove_bookmark' => 'Bu dizini yer imleri listesinden çıkar',
	'good_compression' => 'İyi Sıkıştırma',
	'best_compression' => 'En İyi Sıkıştırma',
	'ftp_header' => 'Yerel FTP Kimlik Doğrulama',
	'ftp_login_lbl' => 'FTP Sunucusu Oturum Açma Kimlik Bilgilerini Giriniz',
	
	'ftp_hostname_port' => 'FTP Sunucusu',
	'ftp_connection_failed' => "FTP sunucusuna bağlanılamadı. \nFTP sunucusunun çalışıp çalışmadığını kontrol edin.",
	'switch_file_mode' => 'Şimdiki Mod: <strong>%s</strong>. Dilerseniz %s moduna geçebilirsiniz. <br/> Türkçe Çeviri: <a href="https://durualan.com" target="_blank" rel="noopener"><b>Mehmet TAŞ</b></a>',
	'symlink_target' => 'Sembolik Bağlantı Hedefi',
	"permchange"		=> "Yazma İzinleri Başarılı:",
	'browsing_directory' => 'Dizinlere Gözatın',
	'filter_grid' => 'Filtreleyin',
	'password_warning_title' => 'Önemli - Şifrenizi değiştirin!',
	'password_warning_text' => 'Giriş yapmış olduğunuz kullanıcı hesabı, varsayılan eXtplorer tarafından ayrılan hesaba karşılık gelir. EXtplorer kurulumunuz izinsiz girişe açık ve bu güvenlik açığını hemen düzeltmelisiniz!',
	'change_password_success' => 'Şifreniz değiştirildi!',
	'success' => 'Başarılı',
	'dialog_title' => 'Website Uyarısı',
	'acttransfer' => 'Başka Sunucudan Transfer Edin',
	'max_file_size' => 'En Büyük Dosya Boyutu',
	'max_post_size' => 'En Büyük Yükleme Sınırı',
	'archive_created' => 'Arşiv Dosyası Oluşturuldu!',
	'save_processing' => 'Dosya Kaydediliyor...',
	'current_user' => 'Bu uygulama şu anda aşağıdaki kullanıcıların izinleriyle çalışır:',
<?php
// Turkish Language for 2.1.12 (Translated by Mehmet Taş)
	"symlink"=> "Simgesel Bağlantı",