Go语言近几年开始越来越流行,凭借其强大的性能和跨平台的优势,对web和后台开发都是一个不错的选择。Xcheck支持Golang的代码安全检查,覆盖常用web框架,包括golang内建的net/http,以及一些流行的第三方web框架:gin,iris,mux,httprouter,fasthttp,fasthttprouter等。自然,也可以通过Xcheck的扩展能力,来适配其他框架。目前覆盖的Web漏洞类型包括但不限于以下:
我们在github上面选取了10000个golang项目进行安全检查,发现其中存在风险的项目182个,风险数317个,误报数19个,整体误报率6%左右。
使用Xcheck扫描内部golang项目19w次任务,其中耗时小于1分钟的项目占18万个,换句话说,90%以上的项目都在1分钟内扫描完毕。
这是整理的部分golang进行sql查询时不正确地使用方式会引发风险的函数。
以国外安全团队NemoSecurity在github的一个golang靶场项目GoVWA(https://github.com/0c34/govwa.git)为例:
靶场中共存在两个sql注入漏洞,以其中一个为例,触发漏洞的所用的package为database/sql
。数据流分析如下:
uid := r.FormValue("uid")
p := NewProfile()
err := p.UnsafeQueryGetData(uid)
这里我们也使用了github开源高星项目的gosec代码扫描工具进行检测,很遗憾,工具报错了未能得到结果。
对于命令注入,Golang引擎原生支持识别os/exec相关的函数和结构体,包括exec.Command,exec.CommandContext以及相关实际执行函数CombinedOutput/Output/Run/Start。
举一个实际项目的案例,图中317行是一个污点,318行是一个Cmd的实例,339行才是真实执行。值得注意的是,如果没有执行Start函数(319行),是不会报漏洞的。
对于扫描引擎来说,这两类漏洞的检测除了支持一些相关触发函数的识别外,难点在于对url字符串的精确判断和分析,如果能做到这个效果,就能降低一些误报。
来看一个SSRF案例,Xcheck识别出这是一个SSRF问题,但是在最后的触发点,“过滤”字段提示这个url的host部分不可控制,其实无法造成危害,对于这种无法被利用的风险,Xcheck给出的漏洞级别是“提示(可忽略)”,这也是Xcheck精准识别的一个体现。
专注于代码安全 | 公众号:腾讯代码安全检查Xcheck
本文作者:Xcheck
本文为安全脉搏专栏作者发布,转载请注明:https://www.secpulse.com/archives/158686.html