
CVE-2022-25845를 기반으로 한 시나리오는 메타데이터 기반 SCA의 경우 TP를 나타내지만, callgraph를 사용할 경우 FN을 나타냅니다.
이 프로젝트에는 CVE-2022-25845 취약점이 있는 fastjson 의존성이 포함되어 있습니다.
취약점은 JSON 내의 마크업이 Java 빈(bean)으로 해석될 때 발생합니다. 즉, 클래스가 인스턴스화되고 setter 메서드를 실행하여 속성이 설정됩니다. 이는 리플렉션(reflection)을 사용하여 수행됩니다. setter가 코드 실행과 같은 동작을 유발할 수 있는 클래스가 클래스패스에 존재하는 경우(예제에서는 이 클래스가 Trigger이며, 해당 입력은 CVE-2022-25845.json입니다), 이를 악용할 수 있습니다.
흥미로운 부분은 아래의 취약점을 시연하는 포함된 테스트를 실행할 때 나타나는 스택트레이스에서 볼 수 있듯이 리플렉션이 사용된다는 점입니다.
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)
표준 메타데이터 기반 SCA(Software Composition Analysis)는 이 취약점을 식별하는 데 문제가 없으며, 이는 "일상적인 작업"입니다. 그러나 호출 그래프 기반 도구는 일반적으로 리플렉션 호출을 모델링하지 못하기 때문에 이를 놓칠 가능성이 높습니다. 이런 의미에서 이는 사용되는 분석 방법에 따라 참 긍정(true positive)이자 거짓 부정(false negative)입니다.
취약점을 입증하는 테스트가 있으며, 이 테스트(따라서 mvn test를 사용한 빌드)는 실패합니다. 테스트 작동 방식은 https://github.com/scabench/jsonorg-tp1에서 확인할 수 있습니다.
다양한 분석을 실행하는 여러 sh 스크립트가 있으며, 결과 보고서는 scan-results에서 확인할 수 있습니다.
pom.xml에는 CycloneDX 형식의 SBOM을 생성하는 플러그인이 있습니다. 이를 실행하려면 mvn cyclonedx:makePackageBom을 실행하면 SBOM이 target/ 디렉토리에 json 및 xml 형식으로 생성됩니다.