1.5.2.1 Çoklu Güvenlik Açığı

ozansenkal

OpenCart-TR
Katılım
23 Ağu 2010
Mesajlar
139
Tepkime puanı
0
Puanları
0
Yaş
40
merhaba,

1.5.2.1 sürümünde bir çok dosyayı etkileyen bir dizi güvenlik açığı bulunmakta.

açıklardan birinde, bu sürümdeki sitelerinize uzaktan dosya yüklenebilir ve çalıştırılabilir.

mağaza mail adresini bilen saldırgan admin kullanıcısının şifresini resetleyebilir.
aynı şekilde müşteri ve ortak hesaplarının da şifresini resetleyebilir.

açıkların tam olarak ne olduğunu ve nasıl kullanıldıklarını buradan duyurmayacağım ancak şu an bazı sitelerde çalışan exploitlerin elden ele dolaştığını belirtmeliyim.

tavsiyem henüz güncellemediyseniz 1.5.2.1 sürümüne güncelleme yapmayın. "admin" dizininizin adını değiştirin ve değiştirdiğiniz klasöre hosting paneliniz üzerinden dizin şifresi belirleyin.

yönetici panelinizde "Sistem - Genel Ayarlar - Sunucu" sekmesinde bulunan "Şifreleme Anahtarı" adlı ayarın vaysayılan değeri olan "12345" i mutlaka ve mutlaka değiştirin.
 

alkanzaXn

OpenCart-TR
Katılım
28 Kas 2011
Mesajlar
21
Tepkime puanı
0
Puanları
0
Merhaba,

Güvenlik açığı mutlaka dikkate alınması gereken bir durum, ancak 1.5.2.1 kuırmuş olanların da bundan geri donmesi oldukça zor. Bu konuda opencart.com'un bir çalışması var mı? Bu çalışmaları takip edebileceğimiz bir adres verebilir misin? Daha önemlisi bu açık yakın zamanda düzeltilebilecek mi?

Ayrıca, şifreleme anahtarında rakamların dışında diğer alfanumerik karakterler kullanılabilir mi?

slml. Teşekkürler.
 

fofotara

OpenCart-TR
Katılım
24 Kas 2011
Mesajlar
79
Tepkime puanı
0
Puanları
0
Elimden geldiğince yardımcı olmaya çalışayım ;

Aşağıda yazdıklarım tarafımdan denendi. Ancak şiddetle yedek almanızı öneriyorum.

action.php yı bulun

PHP:
if (is_file(DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php')) {
				$this->file = DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php';


değiştirin

PHP:
if (is_file(DIR_APPLICATION . 'controller/' . str_replace(array('../', '..\\', '..'), '', $path) . '.php')) {
				$this->file = DIR_APPLICATION . 'controller/' . str_replace(array('../', '..\\', '..'), '', $path) . '.php';


Encryption.php açın

bulun
PHP:
$key = substr($this->key, ($i % strlen($this->key)) - 1, 1);
			$char = chr(ord($char) + ord($key));

değiştirin
PHP:
$keychar = substr($this->key, ($i % strlen($this->key)) - 1, 1);
			$char = chr(ord($char) + ord($keychar));


controller.php

bul
PHP:
	header('Location: ' . str_replace('&', '&', $url));
		exit();

değiştir:
PHP:
	header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
		exit();



admin/controller/common/forgotten.php aç

bul :

PHP:
$code = md5(rand());

değiştir:

PHP:
	$code = md5(mt_rand());

buldukça yamaları burdan yazmaya çalışacağım.
 

alkanzaXn

OpenCart-TR
Katılım
28 Kas 2011
Mesajlar
21
Tepkime puanı
0
Puanları
0
Merhaba fofotara,

Bu güvenlik açıklarını derli-toplu bir yere yazmak iyi fikir, ancak bu kodları değiştirmekle yapılmak isteneni biraz daha açabilirseniz bizler için daha iyi olur. Bir de bu kodlar sizin fark ettiğiniz açıklar mıdır yoksa opencart.com geliştiricilerinin düzelttiği kodlar mıdır? Çünkü svn de 1522 için çalışma yürütüyorlar. Bu sizin verdiğiniz kodlar orada mevcut mu?

slml. Teşekkürler.
 

fofotara

OpenCart-TR
Katılım
24 Kas 2011
Mesajlar
79
Tepkime puanı
0
Puanları
0
tüm kodlar opencart.com svn sitesinden alındı. Bu güncellemelerin hepsi 1.5.2.2 de olacak güncellemeler. Daha bir çok güvenlik önlemleri alınmış, ancak 1.5.2.1 in yapısını bozacağı için sadece güvenlik açığı olan sayfalarla ilgili düzeltmeleri yazmaya çalıştım.

.htaccess içinde

RewriteEngine On

hemen altına

RewriteCond %{QUERY_STRING} base64_encode.*\\(.*\\) [OR]
RewriteCond %{QUERY_STRING} (\\<|%3C).*script.*(\\>|%3E) [NC,OR]
RewriteCond %{QUERY_STRING} GLOBALS(=|\\[|\\%[0-9A-Z]{0,2}) [OR]
RewriteCond %{QUERY_STRING} _REQUEST(=|\\[|\\%[0-9A-Z]{0,2})
RewriteRule ^(.*)$ index.php?_route_=$1 [F,L]
 

gokhangunes

OpenCart-TR
Katılım
7 Eki 2010
Mesajlar
63
Tepkime puanı
0
Puanları
0
fofotara' Alıntı:
Elimden geldiğince yardımcı olmaya çalışayım ;

Aşağıda yazdıklarım tarafımdan denendi. Ancak şiddetle yedek almanızı öneriyorum.

action.php yı bulun

PHP:
if (is_file(DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php')) {
				$this->file = DIR_APPLICATION . 'controller/' . str_replace('../', '', $path) . '.php';


değiştirin

PHP:
if (is_file(DIR_APPLICATION . 'controller/' . str_replace(array('../', '..\\', '..'), '', $path) . '.php')) {
				$this->file = DIR_APPLICATION . 'controller/' . str_replace(array('../', '..\\', '..'), '', $path) . '.php';


Encryption.php açın

bulun
PHP:
$key = substr($this->key, ($i % strlen($this->key)) - 1, 1);
			$char = chr(ord($char) + ord($key));

değiştirin
PHP:
$keychar = substr($this->key, ($i % strlen($this->key)) - 1, 1);
			$char = chr(ord($char) + ord($keychar));


controller.php

bul
PHP:
	header('Location: ' . str_replace('&', '&', $url));
		exit();

değiştir:
PHP:
	header('Location: ' . str_replace(array('&', "\n", "\r"), array('&', '', ''), $url));
		exit();



admin/controller/common/forgotten.php aç

bul :

PHP:
$code = md5(rand());

değiştir:

PHP:
	$code = md5(mt_rand());

buldukça yamaları burdan yazmaya çalışacağım.

hocam ilginiz ve yardımınız için teşekkürler fakat dosya yollarını belirtirseniz çok memnun olurum.
 
Üst