
RCE в AI-агенте Zammad: вложенный тег шаблона и исправление в одну букву
- OrcaНОВИНКАOrcaCyber: MiniMax M3.1 Flash Abliterated / Uncensored2026-10-29100 tok/s
- OrcaНОВИНКАOrcaCyber: GLM 5.3 Flash Abliterated / Uncensored2026-10-27$0.80 / $1.60 за 1 млн токенов · 102 tok/s
- OrcaНОВИНКАOrcaCyber: Qwen3.8 Flash Next Abliterated / Uncensored2026-10-26$0.80 / $1.60 за 1 млн токенов · 283 tok/s
- OrcaНОВИНКАOrcaCyber: MiMo V2.6 Flash Abliterated / Uncensored2026-10-26$0.80 / $1.60 за 1 млн токенов · 93 tok/s
- MoonshotНОВИНКАMoonshotAI: Kimi K3.1 Pro2026-10-2446Интеллект
- OrcaНОВИНКАOrcaCyber: DeepSeek V4.1 Flash Abliterated / Uncensored2026-10-23$0.80 / $1.60 за 1 млн токенов · 106 tok/s
- minimaxНОВИНКАMiniMax: M3.1 Flash2026-10-1929Интеллект
- OrcaНОВИНКАOrca: OrcaCyber Ultra 1.02026-10-17$5.00 / $10.00 за 1 млн токенов · 70 tok/s
- deepseekНОВИНКАDeepSeek: DeepSeek V4.1 Flash 10172026-10-1733Интеллект
- DeepSeekНОВИНКАDeepSeek: DeepSeek V4.1 Flash2026-10-1740Интеллект
- OrcaOrca: OrcaCyber Zero 1.52026-10-10$3.00 / $7.50 за 1 млн токенов · 95 tok/s
- openaiOpenAI: GPT-6.1 Sol2026-09-2955Интеллект
- anthropicAnthropic: Claude Sonnet 5.52026-09-2854Интеллект
- typesafeTypeSafe: Jev 1.132026-09-24$0.04 / $0.00 за 1 млн токенов · 168 tok/s
- OpenAIOpenAI: GPT-6 Luna2026-09-2228Интеллект
- OpenAIOpenAI: GPT-6 Sol2026-09-2248Интеллект
- AnthropicAnthropic: Claude Opus 5.52026-09-2258Интеллект
- xiaomiXiaomi: MiMo-V2.6-Flash2026-09-2127Интеллект
- xiaomiXiaomi: MiMo-V2.6-Pro2026-09-2130Интеллект
- xAIGrok 4.72026-09-2134Интеллект
Zammad, открытая система службы поддержки, выпустила версию 7.1.2 4 августа 2026 года с восемнадцатью исправлениями безопасности; первое в списке закрывает уязвимость удалённого выполнения кода в полях конфигурации функции AI Agent. Уязвимость — CVE-2026-84462, раскрытая в рекомендации GitHub GHSA-gp3x-9xm8-rcj6 в тот же день, а её затрагиваемый диапазон — все самостоятельно размещённые установки на версии до 7.1.1 включительно. Администратор, имеющий право создавать или редактировать AI Agent, мог бы ввести специально подготовленный текст в одно из полей агента, обойти фильтр, предназначенный для нейтрализации этого текста, и выполнить произвольные команды на сервере, где размещён Zammad, — с потенциальной возможностью, согласно формулировке рекомендации, «читать, изменять или уничтожать все данные, хранящиеся на этом сервере». Ни от какого другого пользователя не требуется действий: в рекомендации указано, что «вредоносный код запускается автоматически при следующей обработке заявки затронутым AI Agent». GitHub оценивает её как High с оценкой 8,6 по CVSS 4.0. Запись, её теги серьёзности и ущерба, а также связанные с ней записи хранятся в Orca AI Incident Archive, где этот инцидент перечислен вместе с остальными из этой серии.
Что устанавливает консультативное заключение
Уведомление GitHub, опубликованное 4 августа 2026 года, краткое и необычайно конкретно описывает механизм и предварительные условия. В нём говорится о «фильтре безопасности, который защищает конфигурацию AI Agent в Zammad», который «можно обойти, введя специально подготовленный текст в одно из полей AI Agent», и точно называется действующее лицо: «Администратор с разрешением на создание или редактирование AI Agents мог воспользоваться этим для выполнения произвольных команд на сервере, на котором размещён Zammad». Диапазон затронутых версий указан как вплоть до 7.1.1 включительно, исправленная версия — 7.1.2. Автор сообщения, которому приписана заслуга, — colinthebomb1; аккаунт, опубликовавший документ, — fliebe92. В уведомлении не публикуется ни proof of concept, ни подробности об эксплойте.
GitHub оценивает эту уязвимость как High — 8,6 по CVSS 4.0, с вектором AV:N/AC:L/AT:N/PR:H/UI:N/VC:H/VI:H/VA:H и без изменения области действия. В развёрнутом виде это означает, что уязвимость достижима по сети при низкой сложности, без требований к атаке и без взаимодействия с пользователем, атакующим, который уже обладает высокими привилегиями внутри приложения, с высоким воздействием на конфиденциальность, целостность и доступность самого экземпляра Zammad. В рекомендациях перечислены три слабости: CWE-20 — ненадлежащая проверка входных данных; CWE-94 — инъекция кода; и CWE-1336 — класс уязвимостей, связанных с шаблонными движками, который MITRE определяет как неспособность нейтрализовать специальный синтаксис, «который может интерпретироваться как шаблонные выражения или другие директивы кода при обработке движком».
Исправление изменило одну букву.
Публичное исправление — это коммит e3b0c8df91ad2108c8305be23e8fe6f73fb9718d, отправленный с сообщением «Maintenance: Improve ERB sanitizer». GitHub указывает дату авторства 7 июля 2026 года и дату коммита 3 августа 2026 года — за один день до публикации рекомендации по безопасности и релиза. Коммит затрагивает два файла: одну строку lib/erb_sanitizer.rb и четырнадцать добавленных строк спецификации.
Вся правка состоит в одной строке. Метод escape_tag использовал Ruby-метод sub, который заменяет первое совпадение шаблона в строке; теперь он использует gsub, который заменяет каждое совпадение. В обеих версиях замена одинакова: открывающий тег, записанный как <% , становится <%%, то есть удвоенная форма, которую ERB, шаблонизатор Ruby, отображает как буквальный текст, а не вычисляет. В рекомендации не названо, какое поле AI Agent содержит этот шаблон; в коммите указан фильтр, который должен был сделать этот шаблон неактивным.

При использовании sub обезвреживался только первый открывающий тег в строке. Полезная нагрузка, помещающая второй открывающий тег сразу после первого, проходит фильтр: <%<%= 1 + 1 %> превращается в <%%<%= 1 + 1 %>, где ERB выводит ведущий открывающий тег как текст, а затем вычисляет внутренний тег. Регрессионный тест, добавленный в том же коммите, прямо называет этот трюк — «с вложенным открывающим тегом, протащенным внутрь одного тега (обход escape-all-openers)» — и утверждает, что и <%<%= 1 + 1 %>, и дважды вложенный <%<%<%= 1 + 1 %> должны выводиться как буквальный текст. Этот тест — самое ясное публичное описание того, как удалось обойти фильтр, поскольку сам бюллетень безопасности ничего об этом не сообщает.
Универсальность этого бага, а не любопытная особенность Zammad, проявляется в следующем: эскейпер, останавливающийся после первого совпадения, не справляется с любым вводом, содержащим вторую, вложенную копию последовательности, которую он удаляет. В сообщении коммита изменение названо обслуживанием — именно так обычно проходит патч усиления защиты, меняющий один символ; и именно поэтому предупреждение должно было содержаться в уведомлении, а не в диффе.
Семь недель от бюллетеня до NVD
NVD опубликовала свою запись для CVE-2026-84462 25 сентября 2026 года, через семь недель после публикации рекомендаций, и в последний раз изменяла её 28 сентября. Запись помечена как «Deferred», что означает, что агентство не опубликовало собственный анализ, а в её блоке метрик оценка 8.6 приписана security-advisories@github.com как вторичный показатель — оценка GitHub как органа нумерации CVE, а не независимая оценка NVD. В той же записи вообще отсутствует конфигурация CPE, поэтому она не сопоставляет уязвимость с идентификатором версии продукта.
Обе эти детали важны для всех, кто отслеживает ПО, размещённое на собственных серверах, по фидам, а не по примечаниям к выпуску. Исправление было опубликовано и доступно для применения 4 августа; машиночитаемая запись появилась 25 сентября; и даже тогда она появилась без идентификатора продукта, по которому сопоставляют данные сканеры на основе CPE. В течение семи недель авторитетным описанием уязвимости оставались уведомление производителя и примечание к выпуску производителя.

Что установлено, а что — нет
Установлено: уведомление о безопасности, исправленная версия, оценка CVSS и изменение кода — всё взято из Zammad и базы данных рекомендаций GitHub, и эти сведения согласуются между собой. Запись NVD воспроизводит описание органа, присвоившего номер, не добавляя собственного анализа. На этом основании архив присваивает записи оценку уверенности A, а сам инцидент не оспаривается.
Не установлено или не зафиксировано: в бюллетене нет PoC и нет сообщений об эксплуатации в реальных условиях. EPSS от FIRST присваивает CVE-2026-84462 вероятность эксплуатации в течение следующих тридцати дней 0,28 процента — 20-й процентиль — в оценке, опубликованной 29 октября 2026 года. Архив не фиксирует реального ущерба и относит запись к среднему уровню серьёзности — ниже собственной категории High, установленной бюллетенем. Это разные инструменты, отвечающие на разные вопросы — что могла бы позволить уязвимость по сравнению с тем, что известно о реально произошедшем, — и в этой статье сообщается об обоих, а не делается попытка их согласовать.
Независимое подтверждение скудно. Поиск публикаций об этой CVE выдаёт базы уязвимостей, которые перепечатывают текст органа, присваивающего номера, плюс собственное примечание к выпуску Zammad; похоже, ни одно новостное издание не сообщало об этой уязвимости независимо. Это вывод о самой записи, а не критика её: удалённое выполнение кода в системе техподдержки, требующее учётной записи администратора, не относится к событиям, которые привлекают прессу, и отсутствие независимого описания само по себе является частью того, что документирует запись.
Кто мог это запустить, и что изменилось
В примечании к выпуску Zammad 7.1.2 от 4 августа 2026 года перечислены восемнадцать уязвимостей, исправленных в этой версии, и на первом месте стоит обход шаблона AI Agent. Для клиентов хостинга там сказано: «Никаких действий не требуется. Ваши экземпляры уже исправлены и защищены нашей командой». Для самостоятельно размещённых установок формулировка более категорична: «Мы настоятельно рекомендуем немедленно обновиться до последней версии Zammad, чтобы обеспечить защиту вашей системы». В рекомендации не предлагается никаких обходных решений, и в записи нет иных мер по снижению риска, помимо обновления.

Требование к привилегиям заслуживает более пристального рассмотрения, чем это следует из вектора. PR:H означает, что злоумышленнику нужен значительный доступ, прежде чем уязвимость станет полезной, и здесь этот доступ — разрешение admin.ai_agent, которое, как указано в документации Zammad, вообще необходимо для работы с AI Agents. В службе поддержки это часто руководитель сервисной команды, который настраивает категоризаторы, теггеры и средства извлечения текста, — не обязательно лицо, администрирующее сервер. Формулировка в самом уведомлении — «администратор с разрешением на создание или редактирование AI Agents» — уже, чем «кто угодно», и шире, чем «root». Если обновление невозможно выполнить немедленно, сокращение круга лиц, обладающих этим разрешением, уменьшает число людей, которые могут достичь этого пути в коде; это вывод из вектора и документации, а не средство устранения, опубликованное поставщиком.
Ни один из основных документов не ставит языковую модель на путь эксплуатации. Команда выполняется внутри Ruby-процесса Zammad, когда отрисовывается конфигурация агента; ни в рекомендациях, ни в коммите, ни в примечании к выпуску не описывается, что модель создаёт полезную нагрузку. Функция AI Agent предоставляет доступное для записи администратором поле, обрабатываемое шаблоном, и ИИ здесь — поверхность, а не механизм. Именно на эту схему указывает запись: определение агента — его инструкции, шаблоны и фильтры — это исполняемая конфигурация, которую редактируют люди, чья работа — поддержка, а не проверка безопасности.
Исправление в Zammad соразмерно и прозаично: изменение одного метода, два регрессионных теста и повышение версии, которое вместе с этой уязвимостью закрывает ещё семнадцать других. То, что стоит перенести дальше, — это модель экспозиции. Служба поддержки, позволяющая руководителю поддержки задавать агента, также позволяет ему записать нечто, что будет выполнять сервер, и единственное, что стоит между этими двумя возможностями, — фильтр, который должен быть точен в отношении каждой вложенной копии синтаксиса, который он вырезает.
