CVE-2026-80104, уязвимость path traversal и произвольной записи файлов с оценкой 9.8 в фреймворке ИИ-приложений DB-GPT, указывает v0.8.1 как версию, в которой она исправлена. Это верно — и при этом опасно неполно: v0.8.1 — единственная выпущенная версия, содержащая исправление.
Что мы проверили и как
Защита — это функция _validate_upload_filename, добавленная 21 мая 2026 года. Она отклоняет нулевые байты, абсолютные пути POSIX и Windows, а также любые имена файлов, содержащие более одного компонентa пути. Мы загрузили соответствующий исходный файл по тегу v0.8.1 и по тегу v0.8.2 и сравнили их. В v0.8.1 функция присутствует. В v0.8.2 — выпущенной сегодня утром — её нет, а обработчик напрямую читает filename = file.filename перед объединением его с каталогом загрузки и записью байтов. Никакой каноникализации, никакой проверки на выход за пределы каталога.
Как исправление исчезает
Потеря связана с feature-веткой, отрезанной до того, как исправление попало в код. Когда эту ветку слили в июне, её версия файла — более ранняя, чем 21 мая, — заменила исправленный вариант. Никакого сознательного отката не было; защиту просто перезаписала более старая копия той же функции, поэтому в changelog нет записи об этом.
Что неверно в распространённой трактовке
Поле уведомления patched version повсеместно читают как «эта версия и все последующие». Именно так это понимают сканеры, так действуют dependency-боты и так делает вывод оператор. Здесь же поле — точка, а не нижняя граница: команда, прочитав уведомление и обновившись до новейшего релиза, делает ровно то, чего не следовало, и оказывается на уязвимом коде, полагая, что проблема устранена. Уведомление не ошибочно — его читают с предположением, которое здесь не работает.
Аутентификация делает ситуацию хуже
Единственная зависимость маршрута загрузки — функция, в исходнике которой есть комментарий "Mock User Info" и которая возвращает объект пользователя с role="admin" независимо от того, передан ли заголовок пользователя. В обоих случаях — admin. Это текущий выпущенный код, а не устаревший тег, так что примитив произвольной записи файлов доступен без аутентификации.
