首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

CVE-2018-1000156:GNU Patch任意代码执行漏洞分析

漏洞背景

使用格式并用开头的补丁,会导致代码执行

影响版本

GNU Patch 2.7.6及以下

(笔者下载了GNU Patch 2.7.1~6源码编译测试,都存在该问题)

GNU Patch 源码下载地址:https://ftp.gnu.org/gnu/patch/

漏洞分析

Poc代码

调试过程

gdb 设置参数运行:

set args test

b do_ed_script

漏洞成因

函数原型

FILE *popen(const char *command, const char *type);

如果type是则文件指针连接到command的,会将的内容传入的输入中,是之前创建的临时文件。

函数通过创建一个管道,调用产生一个子进程,执行一个shell以运行命令来开启一个进程

启动的进程为,而在编辑器中表示后面跟的是操作系统命令,从而导致代码执行。

漏洞demo

popen处fork了父进程和子进程,父进程通过fwrite将运行的命令传入管道,子进程此时打开了/bin/ed,接受了命令,并执行。

运行结果

补丁分析

补丁是创建了临时文件来代替pipe操作,使用文件的方式会使得ed因为无效的命令而退出,而之前的pipe操作遇到无效的命令后会继续执行。但popen的内部实现其实也是通过先fork,再dup2(fd,0),最后执行execl,补丁只是模拟了这一过程,并用文件的方式代替了管道操作。

其他缓解措施:以/bin/ed -r的形式启动,而-r参数的含义是:

-r, –restricted run in restricted mode

运行在严格的模式下,它禁止从当前目录编辑文件和执行shell命令。

参考链接

https://savannah.gnu.org/bugs/index.php?53566

https://www.ibm.com/support/knowledgecenter/zh/ssw_aix_71/com.ibm.aix.cmds2/ed.htm

好了

作为一个懒癌患者

我终于完成了我对老m的承诺

笔芯

去耍了

❤️

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20180515G1VWHH00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券