游客发表
海康威视的命令Web服务器组件出过一次挺严重的命令注入漏洞,编号CVE-2021-36260。注入这个漏洞影响面很大,漏洞因为海康的命令设备在全球装了太多——摄像头、NVR、注入DVR,漏洞很多都跑着同一套Web服务。命令攻击者不用登录,注入构造一个特殊的漏洞HTTP请求,就能在设备上执行任意系统命令。命令听起来像电影情节,注入但确实是漏洞真的。
问题出在Web服务器处理某些请求参数的命令时候,没有对用户输入做足够的注入过滤。具体来说,漏洞是/SDK/webLanguage这个接口。正常请求大概是这样的:客户端发一个PUT请求,带上XML格式的语言配置数据。服务器解析XML,然后根据里面的内容去执行一些系统操作。漏洞在于,解析过程中把用户可控的字符串直接拼进了系统命令里。攻击者只要在XML的某个字段里塞入;或者|这样的shell元字符,后面跟一条命令,服务器就会老老实实执行。
我翻过一些公开的分析报告。有人构造了这样的请求体:<?xml version="1.0" encoding="UTF-8"?><language>$(id)</language>。服务器返回的响应里直接带出了命令执行结果。这说明不是盲注,攻击者能直接看到输出。更危险的是,这个接口不需要任何认证。也就是说,只要设备Web端口暴露在公网,任何人扫到就能打。
海康在2021年9月发布了修复补丁。但问题在于,大量设备根本没有升级。摄像头这种东西,装上去就没人管了,固件几年不更新是常态。Shodan上随便搜一下,至今还能找到几十万台暴露在公网的海康设备。有些是旧固件,有些是贴牌产品,厂商不同但底层代码一样。漏洞利用工具在GitHub上早就公开了,脚本小子都能拿来用。
真实攻击案例里,攻击者通常先扫IP段,识别海康的Web指纹,然后批量发送恶意请求。成功之后,他们会植入僵尸网络客户端,或者把设备当成跳板去攻击内网其他机器。有个案例是某国家电网的监控系统被入侵,源头就是一台没改默认密码、也没打补丁的海康NVR。攻击者通过命令注入拿到了root shell,然后横向移动到了管理服务器。
修复建议其实不复杂。能升级固件的立刻升级到最新版本。不能升级的,把设备从公网撤下来,放到内网或者VPN后面。如果非要远程访问,至少改掉默认密码,限制访问IP。海康后来还发了一个临时缓解措施,在Web服务器配置里禁用/SDK/webLanguage路径。但说实话,这种打补丁的方式治标不治本,因为谁也不知道下一个出问题的接口是哪个。
从开发角度看,这个漏洞的根因是命令拼接。不管什么语言,只要用system()、exec()、popen()这类函数,并且参数来自用户输入,就很容易出事。正确做法是用参数化调用,或者干脆避免在Web层执行系统命令。海康的代码里显然没做到这一点。更让人担心的是,这种问题在嵌入式设备里太常见了。厂商为了赶工期,安全评审往往走过场。一个命令注入漏洞可能潜伏好几年,直到被人挖出来。
我个人的判断是,海康这个漏洞不会是最后一个。物联网设备的安全现状就是这样:功能优先,安全靠后。用户能做的,就是别把设备直接扔公网上。至于厂商,补丁发了不等于问题解决了,真正的挑战是让几百万台设备都装上补丁。这件事,目前看还遥遥无期。
友情链接