TWiki: Programmierfehler ermöglichen Cross-Site-Skripting

TWiki ist eine umfangreiche Wiki-Lösung, die zu großen Teilen in Perl programmiert ist. Da TWiki eher technisch orientiert ist, kommt es vor allem im Intranet von Unternehmen als Dokumentenmanagement-System zum Einsatz. Zwei kürzlich entdeckte Programmierfehler in TWiki haben zur Folge, dass ein entfernter Angreifer Attacken per Cross-Site-Skripting (XSS) durchführen kann.

Anfällig für XSS-Attacken sind das TWiki-Login sowie bestimmte Wiki-Seiten. Derartige Angriffe führen dazu, dass ein entfernter Angreifer unberechtigt Javascript-Befehle ausführen kann, die innerhalb der Sicherheitsdomäne der Ursprungsseite ablaufen. Hierdurch ist ein Angreifer beispielsweise in der Lage, an in HTTP-Cookies abgelegte Authentifikationsdaten zu gelangen. Verwundbar sind zwei verschiedene Teile von TWiki: die Seite zum Anlegen eines neues Themas und das
Spreadsheet-Plugin. In beiden Fällen handelt es sich um Fehler bei der Kontrolle von Benutzereingaben.

Eine Exploit-URL für die Schwachstelle in dem Code zum Anlegen eines neues Themas könnte folgendermaßen aussehen:

http://example.com/do/view/Main/Jump?create=on&newtopic=%27%22--%3E%3C/style%3E%3C/script%3E%3Cscript%3Ealert%280x0051D1%29%3C/script%3E&template=WebCreateNewTopic&topicparent=3
http://example.com/do/view/TWiki/ATasteOfTWiki?'"--></style></script><script>alert(0x002B48)</script>

Diese URL öffnet lediglich eine Alert-Box via Javascript, aber ein Angreifer könnte hier auch beliebigen anderen Javascript-Code einfügen.

Für beide Schwachstellen sind Patches verfügbar, die die Benutzereingaben genauer prüfen. So wurde beispielsweise die fehlherhafte Datei “lib/TWiki/Plugins/SlideShowPlugin/SlideShow.pm” des SlideShow-Plugins folgendermaßen korrigiert:

 # Build query string based on existingURL parameters my $qparams = '?slideshow=on;skin=print'; foreach my $name ( $query->param ) {
- next if ( $name =~ /(text|keywords|web|topic|slideshow|skin|\#)/ );
+ next if ( $name =~ s/[^a-zA-Z0-9_\-]//go ); # Item6789: Santize parameter name
+ next if ( $name =~ /^(text|keywords|web|topic|slideshow|skin)$/ ); $qparams .= ';' . $name . '=' . urlEncode( $query->param($name) ); }

Hier werden nun zusätzliche Kontrollen der Variablen “$name” durchgeführt, die die XSS-Attacke effektiv verhindern.

Betroffen sind die Versionen 5.0.2 und älter.

Nach oben