RCE via MVEL (полный доступ к JVM)
ClassProxy.java
Строки: 632-657
ClassProxy.java
Строки: 632-657
executeMvelMethod(Object obj, Object obj2, String str, String[] strArr, Object[] objArr)Выполняет произвольные выражения на языке MVEL 2.0
Любой Python-плагин или входящее выражение получает неограниченный доступ к классам и памяти процесса Telegram
Runtime-модификация методов через встроенный Xposed
PyMethodHook.java
Строки: 76-105
PyMethodReplacement.java
Строки: 60-75
PluginsController.java
Строки: 1050-1075
PyMethodHook.java
Строки: 76-105
PyMethodReplacement.java
Строки: 60-75
PluginsController.java
Строки: 1050-1075
В клиент встроен XposedBridge. Плагины могут перехватывать или полностью заменять вызовы любых методов внутри рантайма Android без root.
Принудительное тихое обновление Python SDK (
PythonPluginsEngine.java
Строки: 3056-3062
Поиск сообщений по тегу
Строки: 3073-3088
Логика флага
can_not_skip)PythonPluginsEngine.java
Строки: 3056-3062
Поиск сообщений по тегу
python_sdk в служебном канале @XS6GEcz5ZXMu82UvXQcСтроки: 3073-3088
Логика флага
can_not_skip:if (!ExteraConfig.getPluginsPySdkAutoUpdate() && !pythonSdkUpdateResponse.can_not_skip) {
// Показ диалога пользователю
}
if (!z) {
// Если can_not_skip == true, диалог ПРОПУСКАЕТСЯ!
companion.savePythonSdkArchive(pythonSdkUpdateResponse.getMessage(), pythonSdkUpdateResponse.document);
}Полное отсутствие проверки цифровой подписи, а так же возможность принудительного обновления что открывает вектор добавления вредоносного кода в Python SDK
Приватный канал обновлений и удалённого конфига
RemoteUtils.java
Строки: 187, 229, 290, 360
Захардкоженный ID канала:
Строки: 204, 326
Username канала:
Строки: 67-97
Парсинг постов с префиксом
RemoteUtils.java
Строки: 187, 229, 290, 360
Захардкоженный ID канала:
-2227431611LСтроки: 204, 326
Username канала:
XS6GEcz5ZXMu82UvXQcСтроки: 67-97
Парсинг постов с префиксом
remote_config для динамического переопределения любых настроек приложения из постов каналаПри компрометации прав постинга в канале или аккаунта владельца/администратора в память приложения заливается любой Python/нативный код или изменяется конфиг по желанию злоумышленника
Захардкоженный Trusted ID плагинов (
BadgesController.java
Строки: 85-94,181-183
2562664432L)BadgesController.java
Строки: 85-94,181-183
trustedPluginsCache = new CachedRemoteSet("trusted_plugins", SetsKt.setOf(2562664432L));Пользователь/канал с ID 2562664432 захардкожен в множестве доверенных источников плагинов
👎1
Обход предупреждений безопасности при установке плагинов
InstallPluginBottomSheet.java
Строки: 637-660,283-294
Если
InstallPluginBottomSheet.java
Строки: 637-660,283-294
Если
pluginInstallParams.getTrusted() == true, предупреждение о неизвестном источнике (unknown_source_hint) отключается.Возможная подмена кода плагина
❤2👎1