Xcheck是一个由腾讯公司CSIG质量部代码安全检查团队自研的静态应用安全测试(SAST,Static application security testing)工具,致力于挖掘代码中隐藏的安全风险,提升代码安全质量。
Xcheck现已支持Golang、Java、Nodejs、PHP、Python 五种语言的安全检查,其他语言支持还在开发中。覆盖漏洞包括SQL注入、代码注入、命令注入、跨站脚本、反序列化漏洞、路径穿越等多种漏洞。
在框架支持上,xcheck内置覆盖了常见的web框架,也可根据易编写易扩展的自定义规则模块自行编写规则对第三方框架进行覆盖支持。
语言
框架
Golang
Gin,Beego,Iris,net/http,fastrouter,httprouter,go-restful,mux
Java
Spring,HttpServlet,WebService,jax-rs
Nodejs
Koa,Express
PHP
Thinkphp,Laravel,CodeIgniter,Yii,Yaf
Python
Django,Flask,Tornado,Webpy,Bottle,BaseHTTPServer
Xcheck在基于成熟的污点分析技术与对抽象语法树的精准剖解上,通过巧妙优雅的实现来达到对污点的传递和跟踪的目的,更精准地发现隐藏在代码中的安全风险。同时赋予了Xcheck两大优势:快!低误报!
在4核16g的linux云主机上,Xcheck对项目的检查速度在 1w+/s ,部分项目可以达到 2w+/s。以28w行的wordpress项目为例,xcheck检查时间为18s。
经过团队对xcheck投喂大量的项目进行误报优化,现xcheck各语言的误报率低于10%。
以python为例,xcheck对github部分python开源项目检测结果如下:
传统的 SAST 需要比较长的扫描分析时间, 实时性比较差 ,一个稍大的项目扫描好几个小时,在版本迭代快速的web应用开发中严重拖慢流水线,同时 误报率也比较高 ,同一个漏洞报n次的情况更是常有发生, 需要投入大量的安全团队的资源来去除这些误报,因此 无法敏捷地融入到 DevOps 中 。但Xcheck基于这两大优势,可完美融入DevSecOps,加速流水线又快又安全地建设。
2020年7月份,京东安全团队发现了一个Apachec Kylin 远程命令执行漏洞,这里使用Xcheck对Kylin2.6.3的源码进行检查。耗时31s,检测出3个RCE漏洞,2.6.3版本不存在checkParameterWhiteList过滤函数,检测结果如下图。
检测结果
漏洞触发点:
其中一条触发路由:
路由
这是今年6月份Xcheck在对github部分开源项目检测中发现的0day漏洞,通过这个反序列化漏洞可实现任意代码执行的效果。漏洞代码位于app/admin/controller/api/Update.php
和app/wechat/controller/api/Push.php
,无需登录认证,此漏洞已第一时间告知开发者并申报CNVD,现已修复。
从git历史可以看到,程序对用户post进来的数据直接进行反序列化操作。
漏洞源码
xcheck部分检测结果
想了解Xcheck更多信息或者代码安全审计相关技术欢迎长按关注xcheck公众号~