主页 > 网络知识 > Go语言代码安全审计分享(3)

Go语言代码安全审计分享(3)

 

Go语言代码安全审计分享

 

任意文件上传-数据流分析

在pkg/image/imageUploader.go里发现处理上传文件的方法,没有对文件名和文件内容进行校验

 

Go语言代码安全审计分享

 

可以上传任意文件,不过由于web路由的限制好像解析不了go语言代码,解析静态资源文件是可以的,这里尝试着目录穿越写文件到其他目录。

以下在实际环境中进行漏洞演示:

 

Go语言代码安全审计分享

 

利用条件挺苛刻,需要等着重启crontab服务,加载定时任务

 

Go语言代码安全审计分享

 

越权-数据流分析

以pkg/user/usermanager.go为例来看,这里的功能是展示用户个人信息,通过取出cookie里的uid在数据库进行查询得到用户基本信息,在查询前有对cookie的有效性进行校验,避免修改cookie实现水平越权。

 

Go语言代码安全审计分享

 

CheckSessionId里有一个ValidateCorrectCookie的方法校验cookie

 

Go语言代码安全审计分享

 

ValidateCorrectCookie通过将用户输入的cookie和后台数据库存储的信息进行比对,如发现uid被篡改就返回404页面。

 

Go语言代码安全审计分享

 

经过在实际环境验证,在读写操作数据库操作前使用cookie.CheckSessionID()对cookie做校验是不会存在越权问题,而这个安全校验一旦去掉,越权问题就出现了。

服务器敏感信息泄露-代码结构分析

数据库异常,go的异常都有捕获在服务端打印log,没有向前端web页面返回,web页面报错统一跳转自定义404页面,服务器敏感信息泄露问题不存在。

如下是main.go里统一的记录http异常日志的代码:

 

Go语言代码安全审计分享

 

不安全配置-配置文件分析

web路由配置正常,没有引用不安全的第三方库。

资源泄露、空指针分析-控制流分析

数据库、文件等资源文件使用完成后及时释放,未发现异常的控制流。

 

Go语言代码安全审计分享

 

总结

本次审计经过语义分析、数据流分析、代码结构分析、配置文件分析和控制流分析,共审计14类常见安全漏洞,发现存在10类漏洞,另外4类漏洞确认不存在,汇总信息如下:

 

Go语言代码安全审计分享

 

目前代码安全扫描工具存在对golang的规则数量比较少,存在漏报问题,另外还有一定的误报,仍有比较大的优化提升空间。

说点什么吧
  • 全部评论(0
    还没有评论,快来抢沙发吧!