
uno scenario basato su CVE-2022-25845 che produce un TP per la SCA basata sui metadati ma un FN se viene utilizzato il callgraph
Il progetto contiene una dipendenza fastjson con CVE-2022-25845.
La vulnerabilità si verifica quando il markup in JSON viene interpretato come Java beans, cioè le classi vengono istanziate e le proprietà vengono impostate eseguendo i metodi setter. Questo viene fatto usando la reflection. Se una classe è nel classpath e i suoi setter possono innescare comportamenti come l'esecuzione di codice (nell'esempio, questa classe è Trigger, l'input corrispondente è CVE-2022-25845.json), allora può essere sfruttata.
La parte interessante è l'uso della reflection qui, come mostrato dallo stacktrace sottostante ottenuto eseguendo il test incluso usato per dimostrare la vulnerabilità.
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)
Gli SCA standard basati su meta-dati non hanno problemi a identificare la vulnerabilità, è "business-as-usual". Tuttavia, gli strumenti basati su callgraph probabilmente non la rilevano, poiché le costruzioni di callgraph generalmente non riescono a modellare le chiamate riflessive. In questo senso, questo è sia un vero positivo che un falso negativo, a seconda delle analisi utilizzate.
Nota che c'è un test proof-of-vulnerability per dimostrare la vulnerabilità, questo test (e quindi la build con mvn test) fallisce. Vedi https://github.com/scabench/jsonorg-tp1 per come funziona il test.
Ci sono diversi script sh per eseguire diverse analisi, i report dei risultati si trovano in scan-results.