Mittwoch, 15. Oktober 2014

Sicherheitslücke in der Extension dmmjobcontrol und Workaround

Update 20.10.2014: Kevin Renskers arbeitet zwar nicht mehr an der Extension und sucht auch jemanden, der die Extension gerne "adoptiert", aber er hat die unten genannten Änderungen übernommen und hochgeladen. Einen Bug gibt es zwar noch, aber auch dieser wird gerade von jemand anderen bearbetet und demnächst hochgeladen: Zwar wird die Sicherheitslücke mit diesen Änderungen gestopft, aber die Suchfunktion ist dann nicht mehr Nutzbar.
----------------------------------

Ein Sicherheitsleck in der Extension dmmjobcontrol wurde auf typo3.org bekannt gegeben: http://typo3.org/teams/security/security-bulletins/typo3-extensions/typo3-ext-sa-2014-012/

Langfristig ist es sicherlich sinnvoller auf eine andere Extension aufzubauen, die auch gewartet wird, z.B. Job Fair, welches optisch fast eine 1:1 Kopie von dmmjobcontrol ist. Leider läuft diese Extension nur auf Typo3 6.x läuft, was den Umstieg etwas komplizierter macht, wenn man noch Typo3 4.5 nutzt. Manche Websites haben sehr viele Einträge in der Extension und eine Übertragung in eine andere Extension wird nicht so schnell funktionieren. Es scheint aber so, als würde Job Fair laut Angaben des Autors fast die gleiche Datenbankstruktur zu haben wie dmmjobcontrol - vielleicht ist es möglich, mit einer Art "Update-Script"

Auf http://seclists.org/fulldisclosure/2014/Sep/89 habe ich ein Workaround gefunden, wie ihr diese beiden Sicherheitslücken vorübergehend stopfen könnt. Dies sollte aber meiner Meinung nach nicht dauerhaft geschehen, sondern sollte solange, bis man es geschafft hat, auf eine andere Extension umzusteigen - wer weiß welche Sicherheitslücken in Zukunft auftauchen.


Öffnet die Datei typo3conf/ext/dmmjobcontrol/pi1/class.tx_dmmjobcontrol_pi1.php

Ersetzt die Zeile 112 mit folgendem Code gegen die XSS-Lücke
$markerArray['###KEYWORD_VALUE###'] = htmlspecialchars($session['search']['keyword'], ENT_QUOTES);

Ersetzt die Zeile 257 mit folgendem Code gegen die SQL-Injection-Lücke:
$whereAdd[] = $table.'.uid_local=tx_dmmjobcontrol_job.uid AND ('.$table.'.uid_foreign='.implode(' OR '.$table.'.uid_foreign=', intval($value)).')';