新闻快讯
< >

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告

1.安全通告

GoAhead Web Server是为嵌入式实时操作系统(RTOS)量身定制的开源Web服务器。很多国际一线大厂商,包括IBM、HP、Oracle、波音、D-link、摩托罗拉等,都在其产品中使用了GoAhead,使用GoAhead的设备包括智能手机、宽带接入路由器、数字电视机顶盒等。

近日,安全研究人员发现如果启用了CGI并且动态链接了CGI程序的话,GoAhead中的安全漏洞可能允许远程执行任意代码。漏洞的起因是cgi.c文件中的cgiHandler函数使用了不可信任的HTTP请求参数初始化已fork的CGI脚本的环境。结合glibc动态链接器,攻击者就可以使用特殊的环境变量(如LD_PRELOAD)导致执行任意代码。

安恒信息应急响应中心也将对该漏洞进行持续关注,并第一时间为您更新相关漏洞信息。

2.漏洞信息

漏洞描述

近日GoAhead官方发出安全公告,服务器通过GET参数设置环境变量导致了恶意LD_PRELOAD环境变量设置,进而使得漏洞攻击者获得远程命令执行的权限,影响不容小觑。GoAhead官方发布了新版本3.6.5,对漏洞进行了补丁修复。

漏洞危害

攻击者可以直接在服务器上远程执行命令,获取服务器上所有数据。

影响版本

GoAhead 3.6.5之前版本

具体为:2.5.0 – 3.6.4

漏洞利用前置条件

服务器启用CGI且CGI需动态链接。

需要已知服务器的架构,从而上传相对应的动态链接库文件。

风险等级

安恒信息应急响应中心将此漏洞安全风险定级为:高危

漏洞分析

环境搭建

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

cgi测试成功

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

漏洞定位

goahead/src/cgi.c:cgihandler

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

定位代码153行,可以看到程序遍历了用户访问时所带的参数,验证如果参数不为REMOTE_HOST或HTTP_AUTHORIZATION,则将其存储至envp数组。该数组将作为接下来cgi调用的环境变量。可以看出正式这里对于参数的过滤不全,导致了用户可以修改CGI程序的LD_PRELOAD环境变量。

漏洞复现

payload.c

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

将payload.c编译成动态链接库.so文件

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

查看编译好的文件

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

如果用该文件作为LD_PRELOAD动态链接库文件运行,运行任意程序则会有如下效果。

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

可以看到payload.so中的代码成功运行。

验证poc:

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

漏洞分析

我们修改payload以便于接下来的调试

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

重复poc的命令

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

由于在执行poc时CGI进入了sleep,我们可以方便地查看当前CGI的状态,ps查看其pid。

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

查看CGI程序中的0号fd文件,发现这是一个符号链接,指向一个tmp文件,我们再查看该tmp文件,最终确认该文件正是我们上传的恶意动态链接库文件。

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

查看源码可知( goahead/src/cgi.c:launchCgi):

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

执行CGI之前,程序通过dup2将CGI的标准输入(即fd为0的文件)指向了创建的tmp文件。

所以我们发送的

/proc/self/fd/0 à /tmp/cgi-xxx.tmp == payload.so

最终造成了任意代码执行。

漏洞自查

漏洞发布者已经提供了对应的测试工具,已包含多种架构的payload,下载地址如下:

https://github.com/elttam/advisories/tree/master/CVE-2017-17562

使用方法:

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

--server 指定服务器地址

--port  服务器端口

--payload 根据对方服务器的架构选择相应.so文件

3.修复建议

官方补丁

升级至最新版本

临时缓解措施

修改源码src/cgi.c

干货分享|GoAhead服务器远程命令执行漏洞(CVE-2017-17562) 分析报告-E安全

根据官方补丁修改161行左右的if内,除了过滤REMOTE_HOST和HTTP_AUTHORIZATION,添加过滤IFS、CDPATH、PATH和以LD_开头的字符串。

- END -