Emacs 任意代码执行及如何避免它

这是关于 Emacs 中 CVE-2024-53920 长期存在的任意代码执行漏洞的详细信息和建议:

  • TL;DR:在 Emacs 中查看或编辑 Emacs Lisp 代码可能会运行任意代码,漏洞源于不安全的 Lisp 宏扩展,大多数常见配置易受攻击,最佳安全措施包括避免访问不受信任的.el文件、在不受信任的.el文件中禁用自动错误检查和自动完成功能,以及将enable-local-eval设置为nil。此漏洞已存在数年但尚未得到解决,Emacs 维护人员正在努力制定对策。
  • 更新 2024-12-20

    • Emacs 29.4 及更早版本默认易受攻击:通过使用文件局部变量,攻击者可以在默认的 Emacs 设置中利用此问题,在 Emacs 29.4 及更早版本中,启用 Flymake 时可能会执行任意代码,为防止这种利用,应将enable-local-eval设置为nil
    • Emacs 30 将包含缓解措施:Emacs 维护人员已实现安全机制,在不受信任的文件中禁用 Flymake 和代码完成诱导的宏扩展,此机制已包含在最新的 Emacs 30“预测试”版本 30.0.93 中。
  • 背景:Lisp 中的宏是一种重要特性,但也是双刃剑,Emacs Lisp 也有宏,但其宏没有安全措施,可执行任意、无限制的 Emacs Lisp 代码,macroexpand函数可执行任意操作,macroexp.el库提供了更高层次的宏扩展例程,Emacs 还带有几个内置宏可执行任意代码。
  • 利用方式:攻击者可制作包含恶意宏调用的 Emacs Lisp 文件并发送给用户,当用户在 Emacs 中打开该文件时,代码诊断会自动触发,展开宏并执行任意代码,例如通过代码完成、Flymake 或 Flycheck 的字节编译等方式,常见的 POC 文件内容为(rx (eval (call-process "touch" nil nil nil "/tmp/owned"))),此漏洞自 Emacs 26.1 版本起存在,报告给 Emacs 维护人员后,他们请求 90 天来修复,现在已发布此安全咨询,建议在 ELisp 模式中不要自动启用 Flymake/Flycheck,仅在信任和控制的.el文件中允许自动宏扩展,并将enable-local-eval设置为nil
阅读 7
0 条评论