×

[CVE-2017-15690]Codiad 漏洞挖掘笔记 (0x05) [任意文件读写漏洞]

96
王一航
2017.08.28 21:56* 字数 736

本文首发地址 :

https://xianzhi.aliyun.com/forum/read/2045.html

先知技术社区独家发表本文,如需要转载,请先联系先知技术社区授权;未经授权请勿转载。
先知技术社区投稿邮箱:Aliyun_xianzhi@service.alibaba.com


简介 :

之前做过一道CTF的题目( 还是 facebook 的一个漏洞 ? ) , 具体是什么比赛忘记了
那个题目大概是让用户上传一个 tar 压缩包 , 然后会将其中的 txt 文件的内容显示出来
正解是先本地创建一个符号链接指向某一个敏感文件的绝对路径 (/etc/passwd)
然后使用 tar 打包后上传给具有漏洞的程序 , 然后 , 经过程序处理以后就会 follow 符号链接将文件内容显示出来
这个漏洞大概也如此

在审计和测试 Codiad 这个开源程序的时候 , Codiad 开发者自己维护了一个用于展示 Codiad Demo 的网站

demo.codiad.com

测试的时候使用了该网站进行测试


漏洞分析 :

漏洞主要出现在 Codiad 打开文件的函数中 , 由于对打开的文件类型缺乏判断 , 因此可以被恶意攻击者利用

components/filemanager/class.filemanager.php

image.png

这里在打开文件的时候并没有检查文件是否是一个符号链接文件 , 直接就将其内容获取并显示
这样就给了攻击者利用符号链接文件读取任意文件的机会
攻击者可以构造一个符号链接文件指向敏感文件 , 然后就可以利用这个文件读取到目标服务器上的任意文件

由于笔者知识储备有限 , 并不是很了解符号链接文件的结构 , 暂时还不能手动创建一个符号链接文件

但是 Codiad 提供了从 github 导入 git 仓库的功能

因此笔者找到一个这个漏洞的利用方式
就是先创建一个仓库 , 在仓库中创建一个符号链接文件 , 指向某一个敏感文件 (例如 /etc/passwd)

然后将其推送到 github

image.png

github 对符号链接文件的保护还是比较好 , 并没有出现类似的漏洞


image.png

最后再使用 Codiad 的从 github 导入仓库的功能将这个仓库导入
最后就直接在 Codiad 中打开这个文件即可得到这个文件的内容
利用成功截图如下 :


image.png
image.png

最后又测试了一下是否可以将一整个目录作为符号链接来挂载到 Codiad 的目录中
发现确实是可以的

image.png

这里直接将 /etc 目录挂载到了 Codiad 的项目下

image.png

本地测试的时候更是直接将系统根目录直接挂载


image.png

修补方案 :

在打开文件之前 , 使用 is_link 函数对被打开的文件进行判断

参考资料 :

https://github.com/WangYihang/Codiad-pentest

代码审计
Web note ad 1