
un scénario basé sur CVE-2022-25845 produisant un TP pour une SCA basée sur les métadonnées mais un FN si le callgraph est utilisé
Le projet contient une dépendance fastjson avec CVE-2022-25845.
La vulnérabilité se produit lorsque le balisage dans JSON est interprété comme des beans Java, c'est-à-dire que des classes sont instanciées et que les propriétés sont définies en exécutant des méthodes setter. Cela se fait par réflexion. Si une classe se trouve dans le classpath dont les setters peuvent déclencher un comportement comme l'exécution de code (dans l'exemple, cette classe est Trigger, l'entrée correspondante est CVE-2022-25845.json), cela peut être exploité.
La partie intéressante est l'utilisation de la réflexion ici, comme le montre la trace de pile ci-dessous provenant de l'exécution du test inclus utilisé pour démontrer la vulnérabilité.
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)
Les SCA standard basées sur les métadonnées n'ont aucun problème à identifier la vulnérabilité, c'est « business-as-usual ». Cependant, les outils basés sur des graphes d'appels sont susceptibles de la manquer car les constructions de graphes d'appels ne modélisent généralement pas les appels réflexifs. En ce sens, c'est à la fois un vrai positif et un faux négatif, selon les analyses utilisées.
Notez qu'il existe un test de preuve de vulnérabilité pour démontrer la vulnérabilité ; ce test (et donc la construction avec mvn test) échoue. Voir https://github.com/scabench/jsonorg-tp1 pour le fonctionnement du test.
Il y a plusieurs scripts sh pour exécuter différentes analyses ; les rapports de résultats se trouvent dans scan-results.
Le pom.xml dispose d'un plugin pour générer un SBOM au format CycloneDX.
Pour ce faire, exécutez mvn cyclonedx:makePackageBom ; le SBOM se trouve dans
target/ aux formats json et xml.