Zahlreiche Sicherheitslücken plagen die Standards zum Verschlüsseln und Signieren von XML-Daten. Obwohl die Lücken schon viele Jahre bekannt sind, finden sich nach wie vor viele verwundbare Produkte.
Einen Überblick über Sicherheitsprobleme in XML-Standards hat Juraj Somorovsky von der Ruhr-Universität Bochum auf der Black Hat Amsterdam präsentiert. Mit einem automatisierten Tool hat Somorovsky zusammen mit seinen Kollegen diverse Server-Implementierungen auf bekannte Sicherheitslücken getestet. Signature Wrapping
Das W3C hat für die Verschlüsselung und für digitale Signaturen in XML-Dateien jeweils separate Standards. Bereits 2005 wurde ein Angriff auf die digitalen Signaturen in zahlreichen Implementierungen entdeckt, der als Signature Wrapping bezeichnet wird.
Der XML-Signatur-Standard sieht vor, dass man nicht nur ganze Dokumente signieren kann, sondern auch einzelne Teile eines Dokuments. Beim Signature-Wrapping-Angriff manipuliert ein Angreifer ein existierendes Dokument mit gültigen, signierten Daten. Die signierten Daten werden in einen Teil des Dokuments verschoben, in dem sie keinen Effekt mehr haben. So kann man beispielsweise die signierten Daten in den Header verschieben. Anschließend werden unsignierte Daten in das Dokument eingefügt.
Wie sich herausstellte, prüfen zahlreiche Implementierungen zunächst die Signatur und parsen anschließend die Daten unabhängig davon, ohne zu prüfen, ob die entsprechenden Daten auch von der Signatur erfasst wurden. Dadurch können von einem Angreifer komplett unsignierte Daten eingeschleust werden. Dass dieser Angriff praktische Relevanz hatte, konnte Somorovsky zusammen mit anderen Sicherheitsforschern 2011 zeigen, ein Angriff erlaubte die Kontrolle von Amazon-EC2-Instanzen fremder Nutzer. Symmetrische und asymmetrische XML-Verschlüsselung unsicher
Die Verschlüsselung in XML-Dateien hat gleich mehrere Probleme, die Somorovsky bereits 2011 zusammen mit anderen Sicherheitsforschern publiziert hatte. Die asymmetrische Verschlüsselung erfolgt nach dem alten Standard PKCS #1 1.5. Dieser ist anfällig für den sogenannten Bleichenbacher-Angriff, den der Kryptograph Daniel Bleichenbacher 1998 entdeckt hat. Der Angriff ist jedoch vergleichsweise aufwendig.
Noch kritischer ist ein Angriff auf die symmetrische Verschlüsselung. Der ursprüngliche XML-Encryption-Standard sah nur eine Verschlüsselung mit dem AES-CBC-Verfahren vor. Bei AES-CBC lassen sich von einem Angreifer einzelne Bits manipulieren. Da die verschlüsselten Daten gültige XML-Tags enthalten müssen, ist die Zahl der gültigen Zeichen auf den ASCII-Zeichensatz beschränkt. Somit kann ein Angreifer gezielt Bits manipulieren und anhand der Fehlermeldungen eines Servers, der mittels XML-Verschlüsselung kommuniziert, Rückschlüsse auf die Daten erhalten. Für die Entschlüsselung eines Bytes genügen hierfür 14 manipulierte Datenpakete.
Dieser Angriff hat große Ähnlichkeit mit den Padding-Oracle-Angriffen, die vor allem bei TLS immer wieder zu Problemen geführt haben. Grundsätzlich sollten Verschlüsselungsprotokolle nie Daten entschlüsseln, ohne deren Echtheit vorher zu prüfen. Alte Angriffe, nach wie vor verwundbare Server
Mit einem automatisierten Tool hat Somorovsky zahlreiche Serveranwendungen, die die XML-Verschlüsselung nutzen, geprüft. Das Tool wurde auf Github veröffentlicht. Von fünf getesteten Produkten waren vier in der Standardkonfiguration für den CBC-Angriff verwundbar (Apache Axis2, Apache CXF, Axway Gateway, IBM Datapower). Lediglich Microsofts WCF-Server hatte gegen alle Angriffe wirksame Gegenmaßnahmen implementiert.
Vermeiden lässt sich dieser Angriff auf die CBC-Verschlüsselung, wenn eine Implementierung die verschlüsselten Daten nur innerhalb eines signierten Datenblocks akzeptiert. Wichtig ist hierbei, den oben erwähnten Signature-Wrapping-Angriff ebenfalls zu berücksichtigen und sicherzustellen, dass keine unsignierten Daten entschlüsselt werden. Auch die Angriffe auf die RSA-Verschlüsselung mit PKCS #1 1.5 lassen sich vermeiden.
Besser ist es allerdings, auf die alten Standards zu verzichten. Der XML-Encryption-Standard 1.1 erlaubt die XML-Verschlüsselung mit dem RSA-OAEP-Verfahren, das den Bleichenbacher-Angriff verhindert. Statt der unauthentifizierten CBC-Verschlüsselung steht außerdem das GCM-Verfahren (Galois/Counter-Mode) als Möglichkeit für symmetrische Verschlüsselungsoperationen zur Verfügung.
Apache CXF hat ein Update herausgegeben, das die Probleme behebt. Von IBM gab es als Reaktion Empfehlungen, wie man XML-Verschlüsselung sicher nutzt und die Konfiguration entsprechend anpasst.