Perl HTML::FormHandler 高危漏洞:请求数据可致远程代码执行与内存耗尽

CVE-2022-4993是Perl HTML::FormHandler库的高危漏洞(CVSS 9.1),攻击者利用请求数据注入Locale::Maketext模板,可触发任意方法分派和内存耗尽。本文解析攻击链、受影响版本及修复建议,帮助Perl应用防范此安全威胁。

🔓 Critical 漏洞利用

HTML::FormHandler 0.40068及更早版本存在严重漏洞,攻击者可通过构造特殊表单数据触发Locale::Maketext模板注入,导致攻击者选择的方法被动态调用,或利用sprintf超大宽度造成内存耗尽,最终可致拒绝服务或潜在代码执行。

来源:NVD-Latest | 2026-08-13 | 原文链接

🔍 关键发现

  • add_error将用户可控的请求数据作为Locale::Maketext括号模板的message key,配合默认_AUTO词条使得任意字符串被编译为模板,攻击者可控制首个token为语言处理方法名。
  • _apply_actions安装的__WARN__处理器会把包含原始提交值的警告文本存入$error_message,即使动作成功也会保留,构造如"[sprintf,%50000000d,0]"的输入可触发任意内存分配。
  • 类型约束失败消息会通过Devel::PartialDump等将数组值以括号逗号形式渲染,攻击者发送重复参数可构造无需方括号的模板,影响所有对不可信字段应用类型约束或转换的调用者。

⚔️ 攻击链分析

1. 向使用HTML::FormHandler的Perl应用提交特制表单字段值,如包含"[sprintf,%50000000d,0]"。 2. 触发类型约束或transform错误,或让验证器把包含该值的消息传给add_error,从而使其成为Locale::Maketext模板。 3. 模板编译执行时调用sprintf方法,分配超大内存或抛出未处理异常,导致进程崩溃或资源耗尽。 4. 若语言句柄子类存在副作用方法,攻击者可进一步控制方法名和参数进行调用。

🛡️ 缓解建议

  • ✅ 升级HTML::FormHandler至0.40069或更高版本,修复模板注入与资源耗尽问题。
  • ✅ 不要对不可信字段直接使用类型约束(如apply=>[Str])或自定义验证器;如必须使用,应在传入add_error前对值进行安全过滤。
  • ✅ 对Perl应用部署内存限制(如ulimit)和异常捕获机制,防止单请求耗尽内存或抛异常导致服务中断。

涉及漏洞:["CVE-2022-4993"]


⚠️ 本文仅供安全研究与学习,IOC 信息请勿用于非法目的。

🤖 常见问题解答(FAQ)

❓ 漏洞影响哪些Perl应用?

所有使用HTML::FormHandler <=0.40068处理用户提交字段,并应用类型约束、transform或自定义验证器的Web应用均受影响,特别是错误消息包含原始字段值的场景。

❓ 如何利用该漏洞实现任意方法调用?

攻击者构造类似"[sprintf,%50000000d,0]"的值,使其成为警告或类型约束错误消息,add_error将其作为Maketext模板,首token作为语言句柄方法名,如sprintf被调用且参数可控。

❓ 升级到哪个版本可修复漏洞?

安装HTML::FormHandler版本0.40069及以上,该版本修复了_apply_actions和add_error的错误消息处理逻辑,不再将用户数据作为模板键。

[!] CONTACT_CHANNELS

如需商务合作、技术咨询或漏洞反馈,请通过以下离岸节点联系作者。

> PING_AUTHOR (@A1RedTeam)