一台安防摄像头的登录页面,正常情况下不该跟公司内部代码仓库有任何关系。但一名安全研究者拆开韩华(Hanwha)旗下Hanwha Vision的摄像头固件后,发现事实并非如此:一个GitHub令牌被原样复制进了大约30个前端文件,而这个令牌能以管理员身份操作韩华GitHub组织下数百个代码仓库。

这不是谁手滑把密钥提交进了代码库。问题出在构建流程本身:固件用Vite打包前端资源时,一个变量被直接赋值成了整个process.env。CI环境里能读到的所有变量,包括那个GitHub令牌,就这样被原封不动地打进了每一份构建产物。

令牌是怎么进固件的

研究者一开始只是想看看韩华公开的固件包,拆开后发现里面还嵌套了一层没公开过解密方式的固件。他逆向了固件升级程序fwupgrader,找到写死在程序里、经过异或混淆的AES密钥和IV,拿到完整的根文件系统。

用trufflehog一扫,一个GitHub令牌几乎立刻跳出来。它不是零星出现,而是重复写入了约30个文件,且拥有对韩华GitHub组织数百个仓库的管理员权限。

研究者没有拿实机测试过这批摄像头,令牌是否真的通过管理界面下发给了终端用户,他自己也说不确定。但令牌本身、它的权限范围,都是确凿的。

500份固件复测,排除了偶然

为确认这不是单台设备的偶然失误,研究者又抓取了韩华官网上能找到的近500份固件,用同样方法尝试解密。约62%成功提取,其中3份查到了令牌——而且是同一个。

这个结果更像是同一套构建流程在多条产线上被复用出的系统性问题,不是某台设备走了运。但样本没覆盖韩华全部型号和固件版本,具体波及了多少在售设备,目前还看不清。

固件里还有几个被分配给美国国防部的IP地址。研究者自己强调这只是推测,更可能是集团内部误用了这段地址空间,跟真实的国防系统未必有实际联系,不宜过度解读。

好消息是响应速度。研究者报告后,韩华在12小时内确认并撤销了令牌,比大多数收到漏洞报告的企业都利索,这一点该明确记一功。

已经确认仍不确定
令牌重复写入约30个前端文件令牌是否真的通过管理页下发给了终端用户
令牌拥有数百个仓库的管理员权限具体波及哪些型号、哪些固件版本
抓取约500份固件,62%成功解密,3份查到同一令牌是否已有人用这个令牌访问过仓库
韩华12小时内确认并撤销令牌固件里的美国国防部IP地址是否只是内部误用

加密混淆挡得住看客,挡不住写错的脚本

固件本身做了不少保护:外层加密、内层再加密,连密钥和IV都被异或混淆过,普通人拆包看不到内容。这套防护挡住了看客,却挡不住一次写错的构建脚本。千里之堤,溃于蚁穴——加密只是让逆向多花几步功夫,真正暴露问题的,是CI和前端构建之间没有秘密隔离。

很多硬件厂商把"固件安全"理解成"别让人轻易读出源码",却没把CI/CD和设备固件当成同一条供应链来防守。摄像头这类设备现在跑更复杂的应用,也更深地嵌进企业网络,一台设备的管理界面,理论上已经足以成为供应链攻击的入口。

这件事对两类人是具体的提醒:

对象现在该做的事
企业安全与软件供应链团队把采购的IoT设备固件纳入供应链审计,问供应商CI/CD是否有秘密隔离,不能只做网络层准入检查
IoT厂商与采购管理者自查构建脚本是否也把完整环境变量打进了前端产物;采购清单里加一条"构建流程如何隔离密钥"

买设备的人过去只问"这摄像头安不安全"。现在还得多问一句:它背后的构建流程,会不会顺手把公司的钥匙也一起打包发出去。