=IF(A1=200, eval("__import__('os').system( 开头的公式)执行代码。Pycel 是一个用于处理 Excel 工作表的 Python 库,其功能包括对 Excel 公式进行符号安全求值。该库存在一个代码执行漏洞:通过特制的 Excel 公式,可以执行原本被阻止的 Python 原生函数。攻击者可以提供恶意文档,当 Pycel 对其求值时,会导致代码执行。
使用 Pycel 文档 中的同一个演示脚本,分析 Excel 文档时本应对 Excel 函数求值并返回错误,例如 "Function EVAL is not implemented. EVAL is not a known Excel function" 并拒绝运行。
然而,我能够通过一个恶意的 Excel 公式绕过此限制,该公式在 Pycel 中运行时意外地导致任意代码执行。
Pycel 目前是不安全的,不能信任它来对来自不可信来源的工作表进行求值或处理。否则可能导致代码执行,造成灾难性后果。
=IF(A1=200, eval("__import__('os').system('calc.exe')"), @LINEST(C1:C18,B1:B18))
=A1*eval("__import__('os').system('calc.exe')")
pip install -r requirements.txt)此漏洞在最新的 Pycel 1.0b30 版本中仍然有效。