2024年2月Lucee远程代码执行漏洞

2024年2月Lucee远程代码执行漏洞

💡 原文英文,约600词,阅读约需3分钟。
📝

内容提要

上周,安全研究人员发布了关于Lucee的三个漏洞的详细信息:isDefined、StructGet和Empty函数的远程代码执行漏洞;CF_CLIENT cookie值的远程代码执行漏洞;REST CFC请求的远程代码执行漏洞。建议修复漏洞的方法包括使用structKeyExists或keyExists函数替代isDefined函数,并禁用cookie存储机制。此外,还可以通过设置Application.cfc文件中的this.clientManagement和this.clientStorage参数来修复漏洞。同时,建议在Web服务器上添加阻止CF_CLIENT cookie的规则以增强安全防护。

🔎

延伸解读

漏洞影响范围与修复版本

文章指出,isDefined、StructGet和Empty函数的远程代码执行漏洞影响Lucee,修复需升级至Lucee 6.0.1.59或5.4.5.8及以上版本,并设置this.security.limitEvaluation=true。REST CFC请求漏洞已在2023年通过CVE-2023-38693修复。开发者应检查当前Lucee版本,及时应用更新和配置。

安全配置与纵深防御

针对CF_CLIENT cookie漏洞,文章建议禁用cookie存储机制,在Application.cfc中设置this.clientManagement=false和this.clientStorage="memory",或在Lucee Admin中调整默认存储。此外,可在Web服务器或WAF添加规则阻止包含CF_CLIENT的请求,如nginx返回404或CloudFlare规则,实现多层防护。

代码修复与工具支持

修复isDefined等函数漏洞时,可用structKeyExists或keyExists替代,并明确变量作用域。例如将isDefined("url.#x#")改写为structKeyExists(url, x)。Fixinator已更新以标记漏洞实例并建议添加安全设置,还支持engines=adobe参数避免误报,FuseGuard 3.6.0可检测CF_CLIENT cookie。

❓

Q&A

2024年2月Lucee远程代码执行漏洞涉及哪些具体漏洞?

涉及三个漏洞:isDefined、StructGet和Empty函数的远程代码执行漏洞;CF_CLIENT cookie值的远程代码执行漏洞;REST CFC请求的远程代码执行漏洞(CVE-2023-38693,已在2023年修复)。

如何修复Lucee中isDefined、StructGet和Empty函数的远程代码执行漏洞?

可以升级到Lucee >=6.0.1.59或>=5.4.5.8,并设置this.security.limitEvaluation=true(在Application.cfc中)、环境变量LUCEE_SECURITY_LIMITEVALUATION=true或系统属性lucee.security.limitEvaluation=true。同时,将代码中的isDefined替换为structKeyExists或keyExists函数。

如何修复Lucee中CF_CLIENT cookie值的远程代码执行漏洞?

建议禁用cookie存储机制,在Application.cfc中设置this.clientManagement=false和this.clientStorage="memory",或在cfapplication标签中设置clientManagement="false"和clientStorage="memory"。还可以在Lucee Admin中将默认客户端存储设置为内存,并确保默认不启用客户端管理。

如何通过Web服务器配置来防御Lucee的CF_CLIENT cookie漏洞?

可以在Web服务器上添加阻止CF_CLIENT cookie的规则,例如在nginx中配置:if ($http_cookie ~* CF_CLIENT) { return 404; },或在CloudFlare中添加规则:(upper(http.cookie) contains "CF_CLIENT")。

Fixinator工具针对Lucee漏洞做了哪些更新?

Fixinator已更新以标记isDefined、structGet和empty的漏洞实例,并检查this.security.limitEvaluation设置,建议添加到Application.cfc中。还新增了引擎特定问题功能,可以传递engines=adobe来避免在不使用Lucee时标记问题。

哪些Lucee代码示例是易受攻击的?

易受攻击的代码示例包括:isDefined(url.x)、isDefined("#url.x#")、isDefined("url.#x#"),因为它们将变量传递给了函数的第一个参数。而isDefined("url.x")是安全的,因为它传递的是静态字符串。

🏷️

标签

➡️

继续阅读