Beosin 发现 Circom 验证库漏洞 CVE-2023-33252,Circom 是基于 Rust 开发的零知识证明电路编译器,该团队同时开发了 SnarkJS 库用于实现证明系统,包括:可信设置、零知识证明的生成和验证等,支持 Groth16、PLONK、FFLONK 算法。针对此漏洞,Beosin 安全团队提醒 zk 项目方,在进行 proof 验证时,应充分考虑算法设计在实际实现时,由于代码语言属性导致的安全风险。目前 Beosin 已将漏洞提交 CVE 漏洞披露平台(Common Vulnerabilities and Exposures)并获取认可。此前,Beosin 安全研究人员在 SnarkJS 0.6.11 及之前的版本的库中发现了一个严重漏洞,当该库在验证证明时未对参数进行完整的合法性检查,使得攻击者可以伪造出多个证明通过校验,实现双花攻击。Beosin 在提了这个漏洞以后,第一时间联系项目方并协助修复,目前该漏洞已修复完成。Beosin 提醒所有使用了 SnarkJS 库的 zk 项目方可将 SnarkJS 更新到 0.7.0 版本,以确保安全性。