
ein auf CVE-2022-25845 basierendes Szenario, das einen TP für metadatenbasierte SCA liefert, aber einen FN, wenn der Callgraph verwendet wird
Das Projekt enthält eine fastjson-Abhängigkeit mit CVE-2022-25845.
Die Schwachstelle tritt auf, da Markup in JSON als Java-Beans interpretiert wird, d. h. Klassen werden instanziiert und Eigenschaften werden
durch das Ausführen von Setter-Methoden gesetzt. Dies geschieht mithilfe von Reflection. Befindet sich eine Klasse im Klassenpfad, bei der Setter
Verhalten wie das Ausführen von Code auslösen können (im Beispiel ist diese Klasse Trigger, der entsprechende Input ist CVE-2022-25845.json), kann dies ausgenutzt werden.
Das Interessante hierbei ist die Verwendung von Reflection, wie der folgende Stacktrace zeigt, der beim Ausführen des enthaltenen Tests zur Demonstration der Schwachstelle entsteht.
setName:11, Trigger
invoke0:-1, NativeMethodAccessorImpl (jdk.internal.reflect)
invoke:62, NativeMethodAccessorImpl (jdk.internal.reflect) [2]
invoke:43, DelegatingMethodAccessorImpl (jdk.internal.reflect)
invoke:566, Method (java.lang.reflect)
setValue:167, FieldDeserializer (com.alibaba.fastjson.parser.deserializer)
deserialze:155, ThrowableDeserializer (com.alibaba.fastjson.parser.deserializer)
parseObject:405, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:1430, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:1390, DefaultJSONParser (com.alibaba.fastjson.parser)
parse:181, JSON (com.alibaba.fastjson)
parse:191, JSON (com.alibaba.fastjson)
parse:147, JSON (com.alibaba.fastjson)
main:18, CheckJSON (scabench)
confirmCVE202225845:39, ConfirmVulnerabilitiesTests (scabench)
Metadaten-basierte Standard-SCA haben keine Probleme, die Schwachstelle zu identifizieren; das ist "business-as-usual". Allerdings werden Callgraph-basierte Tools sie wahrscheinlich übersehen, da Callgraph-Konstruktionen im Allgemeinen keine reflektierenden Aufrufe modellieren können. In diesem Sinne ist dies sowohl ein True Positive als auch ein False Negative, je nachdem, welche Analysen verwendet werden.
Beachten Sie, dass es einen Proof-of-Vulnerability-Test gibt, um die Schwachstelle zu demonstrieren; dieser Test (und damit der Build mit mvn test)
schlägt fehl. Siehe https://github.com/scabench/jsonorg-tp1, um zu erfahren, wie der Test funktioniert.
Es gibt mehrere sh-Skripte, um verschiedene Analysen auszuführen; Ergebnisberichte finden Sie in scan-results.