Zum Hauptinhalt springen

4. Security Considerations (Sicherheitsüberlegungen)

4. Security Considerations (Sicherheitsüberlegungen)

Sicherheitsaspekte von JSONPath können herrühren von:

  • Angriffsvektoren auf JSONPath-Implementierungen,

  • Angriffsvektoren auf die Art, wie JSONPath-Abfragen gebildet werden, und

  • der Verwendung von JSONPath in sicherheitsrelevanten Mechanismen.

4.1. Attack Vectors on JSONPath Implementations (Angriffsvektoren auf JSONPath-Implementierungen)

Historisch wurde JSONPath oft implementiert, indem Teile der Abfrage an eine zugrunde liegende Programmiersprachen-Engine übergeben wurden, z. B. an JavaScripts eval()-Funktion. Dieser Ansatz führt bekanntlich zu Injection-Angriffen und würde perfekte Eingabevalidierung erfordern, um sie zu verhindern (siehe Abschnitt 12 von [RFC8259] für ähnliche Überlegungen zu JSON selbst). Stattdessen MÜSSEN JSONPath-Implementierungen die gesamte Syntax der Abfrage implementieren, ohne sich auf Parser von Programmiersprachen-Engines zu stützen.

Angriffe auf die Verfügbarkeit können versuchen, ungewöhnlich teure Laufzeit-Performance auszulösen, die bestimmte Implementierungen in bestimmten Fällen zeigen. (Siehe Abschnitt 10 von [RFC8949] zu Hash-Tabellen-Implementierungen und Abschnitt 8 von [RFC9485] zu Performance-Problemen bei regulären Ausdrücken.) Implementierer müssen sich bewusst sein, dass gute Durchschnittsperformance nicht ausreicht, solange ein Angreifer speziell präparierte JSONPath-Abfragen oder Abfrageargumente einreichen kann, die überraschend hohen, möglicherweise exponentiellen CPU-Verbrauch oder z. B. bei naiver rekursiver Implementierung des Nachfahren-Segments einen Stack-Overflow auslösen. Implementierungen benötigen angemessenes Ressourcenmanagement zur Abschwächung solcher Angriffe.

4.2. Attack Vectors on How JSONPath Queries Are Formed (Angriffsvektoren bei der Bildung von JSONPath-Abfragen)

JSONPath-Abfragen sind oft nicht statisch, sondern werden aus Variablen gebildet, die Indexwerte, Mitgliedsnamen oder Vergleichswerte in einem Filterausdruck liefern. Diese Variablen müssen validiert (z. B. nur bestimmte Konstrukte wie .name erlauben, wenn die gegebenen Werte das zulassen) und übersetzt (z. B. durch Escapen von Zeichenkettenbegrenzern) werden. Werden diese Validierungen und Übersetzungen nicht korrekt durchgeführt, kann das zu unerwarteten Fehlern führen, die wiederum Verfügbarkeit, Vertraulichkeit und Integrität gefährden können, insbesondere wenn ein Gegner die Werte kontrolliert (z. B. durch Eingabe in ein Webformular). Die resultierende Angriffsklasse, Injections (z. B. SQL-Injections), gehört durchgängig zu den häufigsten Ursachen von Anwendungssicherheitslücken und erfordert besondere Aufmerksamkeit.

4.3. Attacks on Security Mechanisms That Employ JSONPath (Angriffe auf Sicherheitsmechanismen, die JSONPath einsetzen)

Wo JSONPath Teil eines Sicherheitsmechanismus ist, können Angreifer versuchen, unerwartetes oder unvorhersagbares Verhalten auszulösen oder Unterschiede im Verhalten zwischen JSONPath-Implementierungen auszunutzen.

Unerwartetes oder unvorhersagbares Verhalten kann aus einem Abfrageargument mit bestimmten von [RFC8259] als unvorhersagbar beschriebenen Konstrukten entstehen. Vorhersagbares Verhalten ist zu erwarten – außer bezüglich der Ordnung von Objekten – für jedes Abfrageargument, das [RFC7493] entspricht.

Weitere Angriffe können das Verhalten zugrunde liegender Technologien anvisieren, wie UTF-8 (siehe Abschnitt 10 von [RFC3629]) und den Unicode-Zeichensatz.