1、背景描述
2、必要信息的配置
3、匹配出包含敏感字段的类
4、检测Map类型的变量
5、检测ReturnType
6、检测ReturnStmt
7、查询展示
8、完整代码
用CodeQL检测响应包是否包含敏感信息的想法最开始是我的同学haoran分享给我的。
之前已经实现了SQLi跟XSS的检测,在翻阅SOC中的漏洞时感觉我也需要实现这样的一个功能,对安全漏洞以及隐私合规都会有用处。
文后附有完整代码。
首先需要根据自己项目的实际情况,配置关心的敏感字段的名称,后面会校验变量名、Map的key、类里面的字段名是否是这些值,如果是则认为是敏感的变量、类。
当然你也可以改用正则或者通配符的形式进行限制。
根据自己的情况,配置项目中映射URL的标注名,只关心可以通过URL直接访问到的方法
对于一些没有编译进CodeQL数据库的类,无法进入到类的内部比对字段名,可以手动配置这个类的类名
1)判断一个字段的字段名是否是敏感的
2)字段的类型是源码中定义的项目类型时,则进行递归校验
1)key是敏感字段时
2)valueType是敏感的类时
3)valueType是泛型,内嵌敏感的类时
通过检测ReturnType来判断是否包含敏感字段
1)ReturnType是敏感的类时
2)ReturnType是泛型,内嵌敏感的类时,支持上面这种多重嵌套的形式
有时ReturnType中只是一个像ArrayList的类型,所以还需要检测ReturnStmt
1)检测Return语句中的是否包含了敏感类
2)返回值是Map类型时,校验Map类型的变量
在公众号内回复:CodeQL001,即可获得下载链接。