干货分享 | 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需动态链接。
  • 需要已知服务器的架构,从而上传相对应的动态链接库文件。

风险等级

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

漏洞分析

环境搭建

cgi测试成功

漏洞定位

goahead/src/cgi.c:cgihandler

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

漏洞复现

payload.c

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

查看编译好的文件

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

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

验证poc:

漏洞分析

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

重复poc的命令

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

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

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

执行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

使用方法:

--server 指定服务器地址

--port 服务器端口

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

修复建议

3官方补丁

升级至最新版本

临时缓解措施

修改源码src/cgi.c

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

原文发布于微信公众号 - 安恒信息(DBAPP2013)

原文发表时间:2017-12-19

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏java思维导图

开源项目renren-fast解读,让java不再难懂(二)

1、百度百科的解释: XSS又叫CSS (Cross Site Script) ,跨站脚本攻击。它指的是恶意攻击者往Web页面里插入恶意html代码,当用户浏览...

2364
来自专栏Python攻城狮

MongoDB与python交互1.Pymongo2.安装3.使用4.mongoDB其它操作5.Mongodb与python交互6.完成命令行项目:学生信息管理(基于Python2.7)

PyMongo是Mongodb的Python接口开发包,是使用python和Mongodb的推荐方式。

1373
来自专栏谭广健的专栏

MVC 路由跳转

MVC路由跳转,基本上是MVC入门的必修课,但因为实际应用比较少,所以都遗忘得七七八八,今天突然想到要用一下,于是就重温一下吧.

2646
来自专栏编码小白

ofbiz初级教程

本教程是ofbiz 基本应用,它涵盖了OFBiz应用程序开发过程的基本原理。目标是使开发人员熟悉最佳实践,编码惯例,基本控制流程以及开发人员对OFBiz定制所需...

1.5K3
来自专栏Puppeteer学习

一步一步学Vue(七)

1583
来自专栏SpringBoot 核心技术

第二十六章:SpringBoot使用@Scheduled创建定时任务

1703
来自专栏安恒网络空间安全讲武堂

Python编写渗透工具学习笔记二 | 0x04编写程序分析流量检测ddos攻击

0x04编写程序分析流量 检测ddos攻击 1使用dpkt发现下载loic的行为 LOIC,即Low Orbit Ion Cannon低轨道离子炮,是用于压力测...

1.1K6
来自专栏程序员八阿哥

王老板Python面试(9):整理的最全 python常见面试题(基本必考)

1)迭代器是一个更抽象的概念,任何对象,如果它的类有next方法和iter方法返回自己本身。对于string、list、dict、tuple等这类容器对象,使用...

1561
来自专栏时序数据库专栏

Elasticsearch 底层系列之分片恢复解析

    我们是基础架构部,腾讯云 CES/CTSDB 产品后台服务的支持团队,我们拥有专业的ES开发运维能力,为大家提供稳定、高性能的服务,欢迎有需求的童鞋接入...

1615
来自专栏腾讯云Elasticsearch Service

Elasticsearch 底层系列之分片恢复解析

我们是基础架构部,腾讯云 CES/CTSDB 产品后台服务的支持团队,我们拥有专业的ES开发运维能力,为大家提供稳定、高性能的服务,欢迎有需求的童鞋接入,同时也...

8.4K0

扫码关注云+社区

领取腾讯云代金券