漏洞背景
LibreOffice是OpenOffice办公套件衍生版, 同样自由开源,以Mozilla Public License V2.0许可证分发源代码,但相比OpenOffice增加了很多特色功能。LibreOffice拥有强大的数据导入和导出功能,能直接导入PDF文档、微软Works、LotusWord,支持主要的OpenXML格式。软件本身并不局限于Debian和Ubuntu平台,OpenXML格式Windows、Mac、PRM packageLinux等多个系统平台。
漏洞描述
其中Word文档可以指定预安装的脚本可以在各种文档事件上执行,例如鼠标悬停等。默认情况下,LibreOffice随附LibreLogo,这是一个可编程移动Turtle矢量图形的宏。为了移动海龟,LibreLogo执行自定义脚本代码,该代码在内部转换为python代码并执行。这里的一个大问题是代码没有很好地编译,只是提供python代码作为脚本代码,经常在编译后产生相同的代码
漏洞影响
LibreOffice < 6.2.5 已在6.2.5 版本中修补。
经测试的操作系统:Windows + Linux(受影响)
漏洞复现
测试版本 LibreOffice_6.2.4.2 for Windows
下载地址 https://downloadarchive.documentfoundation.org/libreoffice/old/
Poc 注意英文全小写 否则会报错
import os
os.system('calc.exe')
run # 这里Run代表一个执行动作
新建OpenDocument Word文件
打开文档后输入Python命令的Poc 到文档中.
选中 run文字 再点击菜单栏处 插入-> 超链接
URL 处任意输入好啦,再点击右边的小齿轮。
选择事件 鼠标在对象之上
选择宏LibreLogo -> LibreLogo ->> run
记得双击run 指定操作处有代码后确定
返回到word文档 run已经变成蓝色 鼠标移动到run事件上 python 命令执行;
在我们的例子中,打开一个计算器,如下所示:
Success!
本篇文章来自安全脉搏:https://www.secpulse.com/archives/111552.html
漏洞分析
回到刚才添加的这段代码
使用onmouseover事件和与LibreOffice一起安装的python示例。 在分配此脚本(或在LibreOffice 中调用的事件)并保存此文件后,查看创建的文件结构:
vnd.sun.star.script:pythonSamples|TableSample.py$createTable?language=Python&location=share
这看起来像是从本地文件系统加载一个文件并且假设是正确的
C:\Program Files\LibreOffice\share\Scripts\pythonLibreLogo\LibreLogo.py
该文件包含createTable函数。所以打开创建的ODT文件并将鼠标移到链接上,令我惊讶的是python文件在没有任何警告对话框的情况下执行。需要注意的是 LibreOffice附带了自己的python解释器,因此不需要实际安装python。所以命令能够被触发。
参考:https://www.libreoffice.org/about-us/security/advisories/cve-2019-9848