Sven Rautenberg: Cookies werden nicht korrekt gesetzt

Beitrag lesen

Moin!

$page = unserialize(base64_decode($_COOKIE[COOKIE_NAME]));
Sowas ist „böse“.

Find ich nicht.

In den Daten von Serialize ist abgelegt, welche Klasse als Objekt genutzt wurde. Manipuliere ich also die in unserialize gefütterten Daten, kann ich beliebig bestimmen, welche Klasse wiederhergestellt und mit den weiteren Eigenschaften gefüllt wird.

Bei allen anderen Variablentypen hat man es tatsächlich nur mit Daten zu tun - aber genau hier beeinflusst man direkt auch den zu nutzenden Code. Wenn an dieser Stelle keine exakte Validierung auf gültige Angaben greift, halte ich das für eine große Sicherheitslücke, wenngleich deren Ausnutzung ohne Frage eine Herausforderung ist, die ggf. Insiderwissen (sprich: Kenntnis des ausgeführten Codes) erfordert.

Es liefert einen Variablencontainer zurück, in dem jeder belibige PHP-Variablentyp enthalten sein kann. Der wird in dem Fall $page zugewiesen und fertig ist. Die einzige Code-Ausführung, die mir einfällt, wäre __wakeup() bei Objekten.

Ich kann halt jede beliebige andere Klasse, die dem Skript an dieser Stelle zur Verfügung steht, instanziieren lassen. Wenn Autoloading im Spiel ist, wird das richtig spannend.

- Sven Rautenberg