NLTK, ReDoS, CVE-2026-80205 (High) -DC-Sep2026-2241

Listen to this Post

NLTK(Natural Language Toolkit)是一个广泛使用的 Python 自然语言处理库,拥有超过 14000 个 GitHub Star 和超过十亿次的下载量。在其 3.10.0 之前的版本中,nltk.text 模块的 `Text.findall()` 和 `TokenSearcher.findall()` 方法存在一个正则表达式拒绝服务(ReDoS)漏洞,该漏洞被追踪为 CVE-2026-80205。
该漏洞的根本原因在于,这些方法接受用户提供的正则表达式模式,并将其直接传递给 Python 的 `re` 引擎执行,既没有进行超时限制,也没有对正则表达式的复杂度进行任何验证。TokenSearcher 在初始化时,会将每个 token 用尖括号包裹,构建一个内部字符串。当调用 `findall()` 方法时,它会将用户传入的正则表达式进行一系列预处理,比如将 `<` 替换为 (?:<(?:,将 `>` 替换为 )>)。然而,这一预处理过程纯粹是语法层面的转换,并不会检查或限制用户输入的正则表达式是否包含可能导致灾难性回溯(Catastrophic Backtracking)的恶意模式。
攻击者可以构造一个包含嵌套量词(如 ((a+)+))的正则表达式。当这个经过预处理的正则表达式通过 `re.findall()` 在内部字符串上执行时,如果字符串不匹配(例如,在大量 “a” 字符后跟一个 “!” 以确保匹配失败),Python 的正则引擎将被迫尝试指数级数量的路径,导致 CPU 占用率飙升到 100%,并使整个 Python 进程无限期挂起。成功利用此漏洞,一个未经认证的攻击者只需发送一个请求,就能造成拒绝服务(DoS),耗尽 CPU 资源,使该 Python 进程的所有其他用户都无法使用服务。
该漏洞影响 NLTK 3.10.0 之前的所有版本,并在 commit `d8e4753` 中被修复。该漏洞由 Offgrid Security 使用其 Kira 自主 AI 安全代理发现。

DailyCVE Form:

Platform: NLTK (Python)
Version: <= 3.9.4
Vulnerability: ReDoS
Severity: High (CVSS 8.7)
Date: 2026-08-12

Prediction: Already Patched (2026-08-12)

What Undercode Say:

漏洞验证与复现的核心在于构造一个能引发灾难性回溯的恶意正则表达式。以下概念验证(PoC)代码展示了 NLTK 3.9.4 及更早版本中的漏洞行为:

在漏洞环境中执行以下 Python 代码
python3 -c "
from nltk.text import Text
构造一个包含 25 个 'a' 的 token,后面加 '!' 确保匹配失败,触发回溯
text = Text(['aaaaaaaaaaaaaaaaaaaaaaaa!'])
恶意正则表达式,包含嵌套量词 ((a+)+)
此调用将导致 CPU 100% 并永久挂起
text.findall(r'<((a+)+)b>')
"

Expected output: 进程将进入无限循环,CPU 利用率达到 100%,并且永远不会返回。

Exploit: (Educational Purposes!)

  1. 识别目标:寻找一个使用 NLTK 库并对外暴露了 `Text.findall()` 或 `TokenSearcher.findall()` 方法输入点的 Web 应用或 API。

2. 构造 Payload:准备一个包含嵌套量词的正则表达式字符串,例如 `<((a+)+)b>`。

3. 发起攻击:将构造好的恶意正则表达式作为输入,提交给目标应用的漏洞函数。

  1. 触发漏洞:findall() 方法会预处理该正则表达式(如将 `<` 转为 (?:<(?:),但不会进行安全检查,直接将其传递给 Python 的 re.findall()

5. 造成 DoS:`re.findall()` 在处理时,由于表达式的嵌套量词和目标字符串的不匹配,会触发灾难性回溯,消耗大量 CPU 时间,导致应用挂起或崩溃。

Protection:

升级版本:将 NLTK 库升级到 3.10.0 或更高版本。此版本使用支持超时参数的 `regex` 库替换了标准库的 re,并为 `findall()` 方法添加了 `timeout` 参数。

pip install "nltk>=3.10.0"

输入验证:在将用户输入传递给 `findall()` 之前,实施严格的输入验证,拒绝任何包含复杂嵌套量词的可疑正则表达式模式。

Impact:

拒绝服务 (Denial of Service):攻击者可以利用一个请求使目标 Python 进程的 CPU 达到 100% 并永久挂起。

业务可用性:对于将 NLTK 用于 NLP 处理的后端服务,此漏洞可导致整个服务不可用,影响所有用户。

CVSS 评分:该漏洞的 CVSS v4 基础评分为 8.7 (High),攻击向量为网络(NETWORK),攻击复杂度低(LOW),且无需任何权限。

🎯Let’s Practice Exploiting & Learn Patching For Free:

🎓 Live Courses & Certifications:

Join Undercode Academy for Verified Certifications

🚀 Request a Custom Project:

Secure, high-velocity infrastructure and disruptive technological engineering. Contact our engineering team for high-tier development and proprietary systems:
[email protected]
💎 Smart Architecture | 🛡️ Secure by Design | ⭐ Trusted by Thousands

Sources:

Reported By: github.com
Extra Source Hub:
Undercode

🔐JOIN OUR CYBER WORLD [ CVE News • HackMonitor • UndercodeNews ]

💬 Whatsapp | 💬 Telegram

📢 Follow DailyCVE & Stay Tuned:

𝕏 formerly Twitter 🐦 | @ Threads | 🔗 Linkedin Featured Image

Scroll to Top