
سيناريو يعتمد على CVE-2022-25845 ينتج عنه TP لـ SCA القائم على البيانات الوصفية ولكن FN إذا تم استخدام callgraph
يحتوي المشروع على تبعية fastjson مع CVE-2022-25845.
تحدث الثغرة عندما يتم تفسير الترميز في JSON على أنه Java beans، أي يتم إنشاء مثيلات للفئات وتعيين الخصائص عن طريق تنفيذ دوال setter. يتم ذلك باستخدام reflection. إذا كانت فئة موجودة في classpath حيث يمكن لدوال setter أن تؤدي إلى سلوك مثل تنفيذ التعليمات البرمجية (في المثال، هذه الفئة هي Trigger، والإدخال المقابل هو CVE-2022-25845.json)، فيمكن استغلال ذلك.
الجزء المثير للاهتمام هو استخدام reflection هنا، كما هو موضح في تتبع الاستدعاءات أدناه من تشغيل الاختبار المضمن المستخدم لتوضيح الثغرة.
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 القائمة على البيانات الوصفية القياسية أي مشكلة في تحديد الثغرة، هذا هو "العمل كالمعتاد". ومع ذلك، من المحتمل أن تفوتها الأدوات القائمة على رسوم الاستدعاءات لأن بناء رسوم الاستدعاءات يفشل عمومًا في نمذجة الاستدعاءات التأملية. بهذا المعنى، هذا هو كل من إيجابي حقيقي وسلبي كاذب، اعتمادًا على التحليلات المستخدمة.
لاحظ أن هناك اختبار إثبات الثغرة لإظهار الثغرة، هذا الاختبار (وبالتالي البناء مع mvn test) يفشل. راجع https://github.com/scabench/jsonorg-tp1 لمعرفة كيفية عمل الاختبار.
هناك العديد من نصوص sh لتشغيل تحليلات مختلفة، يمكن العثور على تقارير النتائج في scan-results.
يحتوي pom.xml على مكون إضافي لإنشاء SBOM بتنسيق CycloneDX. للقيام بذلك، قم بتشغيل mvn cyclonedx:makePackageBom، يمكن العثور على SBOM في target/ بتنسيق json و xml.