了解TiDB数据库的人可能并不多,今天记录下TiDB-PD未授权漏洞主要原因有:
- TiDB目前应用越来越广泛,特别是目前k8s和各类云快速发展
- 网上baidu甚至google对TiDB-PD漏洞基本文章很少
- 扫到TiDB-PD端口服务很容易将其和etcd混淆
ps:漏洞本身比较简单,文章就简单记录下
TiDB简介
TiDB 是 PingCAP 公司自主设计、研发的开源分布式关系型数据库,主要特性如下:
- 高度兼容mysql协议,迁移成本低,支持ACID事务
- 故障自恢复的高可用,可水平线性弹性扩展
- TiDB同 k8s深度耦合,支持公有云等,部署、配置和维护十分简单
TiDB由三个组件构成:
- TiDB Server
TiDB Server 负责接收 SQL 请求,处理 SQL 相关的逻辑,并通过 PD 找到存储计算所需数据的 TiKV 地址,与 TiKV 交互获取数据,最终返回结果。 TiDB Server 是无状态的,其本身并不存储数据,只负责计算,可以无限水平扩展 - PD Server
Placement Driver (简称 PD) 是整个集群的管理模块,其主要工作有三个: 一是存储集群的原信息;二是对 TiKV 集群进行调度和负载均衡;三是分配全局唯一且递增的事务 ID - TiKV Server
TiKV Server 负责存储数据,TiKV 是一个分布式的提供事务的 Key-Value 存储引擎,存储数据的基本单位是 Region
TiDB-PD未授权利用
- PD服务默认开在2379端口(和etcd服务一样),服务起来后一般用于客户端通过2379的http服务进行通信。
- 扫描器如果扫到了,很容易将其和etcd混淆
- 通过PD的API和服务端进行交互,如调用
pd/api/v1/config
接口,查看服务端集群配置,一般不会只有1台,这边是有3台
- 查看标签
- 还有很多其他api,可以对服务端进行增删改操作,如对Schedule进行更新和删除、对PD成员设置优先级和对region进行删除等,具体API详情见官网:https://download.pingcap.com/pd-api-doc.html
修复建议
- 关闭TiDB-PD的2379端口对公网访问
- 配置启用身份验证:https://docs.pingcap.com/zh/tidb/stable/enable-tls-between-clients-and-servers