安全研究/和中谈安全/语言大模型应用下的 WeKnora 框架命令注入 CVE-2026-22688
语言大模型应用下的 WeKnora 框架命令注入 CVE-2026-22688
2026-01-22 07:41分享

漏洞概述:

CVE-2026-22688 是 WeKnora 框架中披露的一处高风险安全漏洞,WeKnora 是一款基于大语言模型(LLM)的应用框架,主要用于复杂文档的深度理解、语义解析与检索,在智能搜索、知识问答及企业知识库等场景中被广泛使用。

研究发现,在 WeKnora 0.2.5 之前的版本中,其对 MCP(Model Context Protocol)标准输入输出配置的安全校验存在缺陷。已通过身份认证的攻击者可在 stdio_config 配置项中注入恶意的 command 或 args 参数,从而影响后端子进程的启动行为。

漏洞影响:

在特定条件下,服务器在启动子进程时会直接使用被篡改的参数执行系统命令,导致命令注入风险,攻击者可能借此在服务器环境中执行任意指令,进而引发主机失陷、数据泄露或服务被进一步利用等安全问题。

目前,该漏洞已在 WeKnora 0.2.5 版本中完成修复。官方通过加强对 MCP 配置参数的校验与限制,避免不可信输入被用于子进程执行,从根本上消除了该安全隐患。

全球资产分布图如下:

漏洞编号:CVE-2026-22688

漏洞等级:严重

受影响版本:WeKnora < 0.2.5。

漏洞类型:远程命令执行

复现流程图:

漏洞环境搭建:

1.创建独立实验目录

mkdir WeKnora && cd WeKnora

2.获取 WeKnora 源码并切换漏洞版本

从官方仓库拉取 WeKnora 项目代码,并切换至存在漏洞的版本:

git clone https://github.com/Tencent/WeKnora.gitcd WeKnora git checkout v0.2.4

确认当前代码版本:git describe --tags

输出结果应为:v0.2.4

3.固定 Docker 镜像版本

默认 docker-compose.yml 中部分镜像使用 latest 标签,为确保漏洞可稳定复现,需统一调整为 v0.2.4 版本。

检查并修改相关镜像配置:

image: wechatopenai/weknora-ui:v0.2.4

image: wechatopenai/weknora-app:v0.2.4

image: wechatopenai/weknora-docreader:v0.2.4

4.配置环境变量文件(.env)

在项目根目录创建 .env 文件,完成基础运行参数配置。以下为复现环境使用的示例配置(敏感字段仅用于测试环境):

# ========= 基础配置 =========

GIN_MODE=release

DISABLE_REGISTRATION=false

 

# ========= 数据库 =========

DB_DRIVER=postgres

DB_USER=weknora

DB_PASSWORD=WeKnora@2026!SecurePass

DB_NAME=weknora

 

# ========= 向量与存储 =========

RETRIEVE_DRIVER=postgres

STORAGE_TYPE=local

LOCAL_STORAGE_BASE_DIR=/data/files

AUTO_RECOVER_DIRTY=true

 

# ========= Redis =========

STREAM_MANAGER_TYPE=redis

REDIS_PASSWORD=Redis@2026!StreamPass

REDIS_DB=0

REDIS_PREFIX=weknora:

 

# ========= 安全密钥 =========

JWT_SECRET=9f3b1a8c5e7d2f6a4c0b9e1d8f3a7c5b2e6d9f0a1c4b8e3d7f2a5c9b6e0d4f1a

TENANT_AES_KEY=k3x9LmQpR7vYzN2sA5tG8wE1uH4jC6bF

 

# ========= Ollama =========

OLLAMA_BASE_URL=http://host.docker.internal:11434

 

# ========= 并发控制 =========

CONCURRENCY_POOL_SIZE=3

 

# ========= 服务端口 =========

APP_PORT=8080

FRONTEND_PORT=80

DOCREADER_PORT=50051

 

# ========= 其他 =========

APK_MIRROR_ARG=mirrors.tencent.com

ENABLE_GRAPH_RAG=false

NEO4J_ENABLE=false

5.启动服务组件

使用 Docker Compose 拉取镜像并启动所有服务(包含 MinIO 组件):

docker compose --profile minio up -d

6.检查容器运行状态

确认所有服务容器均已正常启动:

docker ps

7.日志验证(报错检查)

查看后端服务日志,确认无异常报错:

docker logs -f weknora-app

8.Web 访问与初始化

http://xxx.xxx.xx.x

漏洞复现:

已部署 WeKnora 0.2.5 之前版本的环境中,攻击者需首先获取一个合法的登录身份。完成身份认证后,使用获取到的访问令牌(Bearer Token),向系统提供的 MCP 服务管理接口发起请求。

攻击过程中,攻击者通过向 /api/v1/mcp-services 接口发送 POST 请求,在创建 MCP 服务时,将 transport_type 设置为 stdio,并在 stdio_config 参数中人为构造恶意配置。通过篡改 command 与 args 字段,使其不再是预期的安全执行参数,而是包含系统命令的执行指令。

由于后端在处理 MCP 标准输入输出配置时,未对 stdio_config.command 和 args 参数进行有效校验与限制,服务器在启动子进程时直接使用了攻击者提交的参数,最终导致系统命令被执行。

复现结果显示,恶意命令可在服务器本地成功执行,并生成对应的文件或写入系统信息,表明攻击者已具备在目标服务器上执行任意命令的能力,漏洞复现成功。

创建服务流程

访问Test-CVE-2026-22688服务,在web设置中选择MCP服务进行激活

 

进入docker验证是否执行成功

 

修复建议:

1.立即升级至安全版本

建议受影响用户第一时间将 WeKnora 升级至 v0.2.5 及以上版本,该版本已对 MCP stdio_config 参数的处理逻辑进行了安全加固,可有效防止恶意命令被注入并执行。

2.严格限制 MCP 执行参数

对 stdio_config.command 与 args 参数实施白名单策略,仅允许预期的可执行程序与参数组合,禁止直接调用系统 Shell(如 bash、sh 等),避免用户可控输入参与子进程命令构造。

3.强化运行权限与审计能力

建议将 WeKnora 服务运行在最小权限账号下,限制对系统关键目录的访问权限,并同步开启子进程创建、命令执行等关键行为的日志审计,便于及时发现异常操作并进行追溯。

 

和中科技作为互联网网络安全服务企业,以维护网络安全为己任,为全周期守护数字安全!做到预防有手段、阻击有利器、溯源有依据、恢复有保障,从灵鹫峰到战鹰、从工业网关到日志溯源,用科技铸就网络安全的铜墙铁壁,让您的安全您做主!