
um cenário baseado no CVE-2022-25845 que gera um TP para SCA baseado em metadados, mas um FN se o grafo de chamadas for utilizado
O projeto contém uma dependência fastjson com CVE-2022-25845.
A vulnerabilidade ocorre quando a marcação em JSON é interpretada como Java beans, ou seja, classes são instanciadas e propriedades são definidas executando métodos setter. Isso é feito usando reflexão. Se uma classe estiver no classpath onde os setters podem desencadear comportamentos como executar código (no exemplo, essa classe é Trigger, a entrada respectiva é CVE-2022-25845.json), então isso pode ser explorado.
A parte interessante é o uso de reflexão aqui, como mostrado no stacktrace abaixo da execução do teste incluído usado para demonstrar a vulnerabilidade.
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)
Ferramentas SCA baseadas em metadados padrão não têm problemas em identificar a vulnerabilidade, isso é "business-as-usual". No entanto, ferramentas baseadas em grafo de chamadas provavelmente a perderão, pois as construções de grafo de chamadas geralmente falham em modelar chamadas reflexivas. Nesse sentido, isso é tanto um verdadeiro positivo quanto um falso negativo, dependendo das análises utilizadas.
Observe que há um teste de prova de vulnerabilidade para demonstrar a vulnerabilidade; esse teste (e portanto a compilação com mvn test) falha. Veja https://github.com/scabench/jsonorg-tp1 para saber como o teste funciona.
Existem vários scripts sh para executar diferentes análises; os relatórios de resultados podem ser encontrados em scan-results.