最近准备做一个关于未授权访问漏洞的系列。恰巧遇到InfluxDB的未授权,记录一下。

InfluxDB是什么?

InfluxDB是一个开源的分布式时序数据库,使用Go语言编写,无需外部依赖。

InfluxDB使用JWT作为鉴权方式,在用户开启了认证,但未设置参数shared-secret的情况下,JWT的认证密钥为空字符串,此时可以伪造任意用户身份在InfluxDB中执行SQL语句,从而可能造成敏感信息泄露或执行恶意数据库命令。

漏洞复现

漏洞影响版本:InfluxDB<1.7.6

InfluxDB默认端口是8086。在测试中,如果通过Nmap工具扫描到此端口,则可验证是否存在该漏洞。访问http://xx.xx.xx.xx:8086/debug/vars可以查看系统服务信息。如图:

InfluxDB API 未授权访问漏洞_信息安全

通过抓包工具可以在返回头中查看版本信息,本次测试版本是1.7.4。

InfluxDB API 未授权访问漏洞_信息安全_02

尝试执行SQL语句,可以执行成功。

查看用户

InfluxDB API 未授权访问漏洞_信息安全_03

查看数据库

InfluxDB API 未授权访问漏洞_InfluxDB_04

添加数据库

InfluxDB API 未授权访问漏洞_信息安全_05

InfluxDB API 未授权访问漏洞_未授权访问_06

漏洞建议

升级到最新版本,或设置shared-secret来加强JWT的安全性。

注:

部分版本在执行SQL语句时可能会遇到报错现象,此时需要通过https://jwt.io/来生成一个jwt token。

InfluxDB API 未授权访问漏洞_信息安全_07

在请求头中添加Authorization参数,参数值为生成的jwt token即可。