近日国内安全公司发现Apache struts 出现基于content-type的value的远程可执行漏洞,由于漏洞不需要实质性的上传文件,普通的经过构造的请求都可以简单的实现攻击,因此危害较大。
针对此漏洞,BIGIP可以帮助客户快速部署防御措施,以下进行简单总结。
注意,由于攻击可能存在各种各样的变形特征,考虑到尽可能少的误杀,以及规避尽可能的逃逸技术,以下irule内容是在和Support安全工程师Bean以及SDM Jobs经过反复讨论及测试后的结果,非常感谢Bean搭建攻击环境及反复斟酌测试。
防御措施:
- 如果你正在使用ASM产品,恭喜,只要你确保在主动防御策略中启用了 illegal meta character in header 或者在被动防御中正确启用了与系统、语言相匹配的特征库,默认即可防御。测试表明,基本配置即可阻断攻击。
- 如果没有使用ASM,则可以在LTM上部署irule
12345678910when HTTP_REQUEST {if {[HTTP::header exists "Content-Type"]}{set ctheader [string tolower [HTTP::header "Content-Type"]]if {($ctheader contains "multipart/form-data") and (($ctheader contains "'") or ($ctheader contains "ognl") or ($ctheader contains "java.lang")) }{log local0. "Found Struts S2-045 attack! [HTTP::header "Content-Type"]"#if yuo want to reset the connection, pls remove the comment of the below line#reject}}}
备注:漏洞要被利用,value基本攻击特征包含 multipart/form-data,${...},%{....},考虑到可能的escape技术,未采用该特征。 以上特征匹配参考了ASM在防御时所匹配的特征以及漏洞实际要被使用时需包含OGNL命令。 - 另一个irule方法供参考
12345678910when HTTP_REQUEST {if {([HTTP::header exists "Content-Type"])}{set ctheader [string tolower [HTTP::header "Content-Type"]]if {($ctheader contains "multipart/form-data") and not($ctheader starts_with "multipart/form-data")}{log local0. "Found Struts S2-045 attack! Rejecting a request with Content-type [HTTP::header "Content-Type"] to [HTTP::uri] from [IP::client_addr]"#if you do not want to reset the connection, then comment out the lien belowreject}}}
- 对于F5 设备自身是否受该漏洞影响,请参考:https://support.f5.com/csp/article/K43451236 简单的说,F5所有产品不受影响