Der erste XSS Wurm für WordPress

Wie man die XSS-Lücke ausnutzt und wie man den Wurm indiziert, das erklärt mybeNi. Das ganze basiert auf WordPress Version 2.2.1.

Was man davon halten soll - das muss jeder selbst entscheiden. In jedem Fall lohnt es sich, die Hinweise zu lesen. Es handelt sich um einen „freundlichen“ Wurm, der nur die Lücke aufzeigen will - ein Trost? Schön ist, dass der Wurm dem Admin hilft, die nötigen Lücken zu patchen.

Im weiteren werden alle 7 Lücken erläutert und als Beispiel dargelegt. Die Lücken sind im WP trac registriert und vielleicht erwartet uns bald ein Update. Wer sich händisch an die Arbeit machen will, der liest die Lösungen. In der Regel kommt die WordPress eigene Sicherheits-Funktion attribute_escape() zum Einsatz. Es sind 5 Lücken zu schließen - kurz und bündig im Folgenden.

wp-admin/upload-functions.php Zeile 109


<form<?php echo $enctype; ?> id="upload-file" method="post" action="<?php echo get_option('siteurl') . "/wp-admin/upload.php?style=$style&tab=upload&post_id=$post_id"; ?>"> 

wird zu:


<form<?php echo $enctype; ?> id="upload-file" method="post" action="<?php echo get_option('siteurl') . "/wp-admin/upload.php?style=" . attribute_escape($style) . "&tab=upload&post_id=" . attribute_escape($post_id); ?>"> 

wp-includes/functions.php Zeile 206


function get_option($setting) { 
global $wpdb; 

$setting = $wpdb->escape($setting); 

// Allow plugins to short-circuit options. 
$pre = apply_filters( 'pre_option_' . $setting, false ); 

wp-includes/functions.php Zeile 386


function delete_option($name) { 
global $wpdb; 

$name = $wpdb->escape($name); 

wp_protect_special_option($name);

wp-admin/link-import.php Zeile 76


$cat_id = $_POST['cat_id']; 
if ( $cat_id == '' || $cat_id == 0 ) 

wird zu:


$cat_id = (int) $_POST['cat_id']; 
if ( $cat_id < 1 ) 

wp-admin/edit-comments.php Zeile 78


if ( isset( $_GET['apage'] ) )

wird zu:


if ( isset( $_GET['apage'] ) ) { 
	$page = (int) $_GET['apage']; 
	if($page < 1) 
	$page = 1; 
}

39 Comments

  1. Hey! das tolle an meinem wurm ist ja, das er nicht nur die Lücken zeigt sondern interaktiv mit dem Administrator zusammen die Lücken patcht! :o)

    Gruß beni

  2. Habe gerade mal deinen Wurm rein gelassen - ist schon erschreckend. Aber dass du alle Patches auf diesem Weg einspielst macht die Arbeit sehr schnell. Das ungute Gefühl dabei bleibt. Im Endeffekt bleibt nur das Vertrauen in deinen Wurm 😉 oder die händische Arbeit.

  3. Da ich mich gerade zu Tode gesucht habe, kurz die Rückinfo :

    nicht in wp-admin/includes/upload.php Zeile 109 suchen (die gibt es erst in WP 2.3)
    sondern wp-admin/upload-functions.php Zeile 109

  4. Pingback: alles was bewegt
  5. Pingback: mynethome.de
  6. leider passiert bei mir nach dem klick auf "secure my blog" nichts - bin ich dann schon sicher ? oder was kann ich machen, das nach dem Klick auch etwas passiert (der klich verarbeitet wird)

  7. Sorry, aber da solltest du lieber den Autor des Wirms fragen. Ich habe ihn nur auf einem Tesblog laufen lassen, rein aus Interesse. Die Patches habe ich händisch eingespielt.

  8. Pingback: datenschmutz.net
  9. Alles klar, hab nicht genau genug hingesehen... thx für den Post... bueltge wird ja immer mehr zum "inoffiziellen" offiziellen wp-deutschland blog 🙂

  10. sorry... noch ne Frage: wenn ich den angebenen Code für edit-comments.php ersetze, dann bekomme ich im backend zwar keine fehlermeldung, aber immer "Es wurden keine Kommentare gefunden, die deinen Suchkriterien entsprechen." Da hat's irgendwo was.

  11. Vielen Dank für die klärenden Infos, aber ich erhalte nach dem Editieren der wp-admin/edit-comments.php bei Aufruf einen Datenbankfehler.

    WordPress Datenbank-Fehler: [You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '-20, 25' at line 1]
    SELECT SQL_CALC_FOUND_ROWS * FROM wp_comments WHERE comment_approved = '0' OR comment_approved = '1' ORDER BY comment_date DESC LIMIT -20, 25

    Es wurden keine Kommentare gefunden, die deinen Suchkriterien entsprechen.

    Der Fehler tritt nach dem Reaktivieren der alen Datei nicht mehr auf.
    Ich benutze WP 2.2.1, PHP Version 5.2.3 und MySQL-Client-Version: 5.0.32
    Gruß Thorsten

  12. Pingback: CS Internet Blog
  13. Habe die meisten meiner Blogs bereits auf die aktuelle WP Version aktualisiert...auf den anderen habe ich mal dein Plugin implementiert...danke für den Fix. Funktioniert einwandfrei.

    Mark

Comments are closed.