Das "JSON-Schema Specification Draft" ist der aktuelle Standard zur Verifizierung von JSON-Datenstrukturen. Leider enthält die Spezifikation eine Schwachstelle, mit der man eine Applikation komplett blockieren kann. In meinem Vortrag zeige ich, wie man reguläre Ausdrücke für eine einfache DOS-Attacke ausnutzt, und warum ein Schutz davor immer die Spezifikation verletzt.
Der Zuhörer lernt auch, weshalb die Situation bei JSON-Schema noch schwieriger ist als beim älteren XML-Standard. Denn XML-Schema-Bibliotheken sind anfällig für dieselbe Attacke, aber nur deshalb, weil sie von der W3C-Spezifikation abweichen.
Die Code-Snippets für XML- und JSON-Validierung sind online unter https://github.com/rkeytacked/java-redos .
Weitere Links aus den Slides:
- XML-Schema Regular Expression definition, https://www.w3.org/TR/xmlschema-2/#dt-regex
- Russ Cox' paper on regular expression engines, https://swtch.com/~rsc/regexp/regexp1.html
- ReDoS on OWASP, https://www.owasp.org/index.php/Regular_expression_Denial_of_Service_-_ReDoS
- .net Regular Expressions, https://docs.microsoft.com/en-us/dotnet/standard/base-types/backtracking-in-regular-expressions
- JSON Schema Definition of Regular Expressions, http://json-schema.org/latest/json-schema-validation.html#rfc.section.4.3
- java.util.regex.Pattern, https://docs.oracle.com/javase/7/docs/api/java/util/regex/Pattern.html
- RE2/J, https://github.com/google/re2j
- PR to fix json-schema, https://github.com/everit-org/json-schema/pull/148
- PR to fix nakadi, https://github.com/zalando/nakadi/pull/853
- json-schema handling of Regular Expressions, https://github.com/everit-org/json-schema#regexp-implementations