Суть уязвимости AnyPwn
Команда V12 Security, в частности Рик де Йагер, обнаружила критическую уязвимость AnyPwn в AnyDesk версии 8.0.2 для Linux. Проблема заключается в обработке пакетов протокола сессии (mode-5 stream packet handler). Сервер доверяет длине полезной нагрузки от удаленного клиента, не проверяя её адекватно, что приводит к переполнению кучи (Heap Buffer Overflow) и удаленному выполнению кода (RCE) до того, как пользователь одобрит подключение к рабочему столу.
Уязвимость исправлена в версии 8.0.3. Примечательно, что производитель, по всей видимости, удалил билд 8.0.2 из публичного доступа сразу после публикации Proof-of-Concept (PoC), что затрудняет тестирование уязвимости на актуальных сборках.
Технические детали эксплуатации
Атака использует ошибку целочисленного переполнения при 32-битной арифметике. При добавлении 16-байтового заголовка объекта к заявленной длине пакета, значение может обернуться до нуля или очень малого числа, что приводит к выделению крошечного буфера в памяти. Однако указатель на объект сохраняет исходную большую логическую длину. Когда AnyDesk копирует данные из пакета, происходит запись за пределами выделенной памяти.
Уязвимый путь доступен как через прямое TCP-соединение на порту 7070, так и через ретрансляционные соединения AnyDesk. Поскольку сервис обычно запускается от имени root, успешная эксплуатация дает полный контроль над системой.
Механика атаки и PoC
Эксплойт AnyPwn использует две стратегии распыления кучи (heap spraying) для повышения надежности:
- Группировка аллокаторов: Отправка 100 персистентных объектов mode-5 разных размеров (от 0x1 до 0x17f1 с шагом 0x10) для заполнения классов размеров аллокатора.
- ROP-спрей: Размещение 20 объектов размером 0xf000 байт, содержащих длинную последовательность инструкций
ret(sled), за которой следует цепочка ROP. Это позволяет найти точку входа в цепочку выполнения даже при неточном совпадении адресов.
После переполнения буфера атакующий перезаписывает поля диспетчеризации в соседнем объекте-жертве, включая vtable и указатель на стек. Цепочка ROP записывает команду в память и вызывает функцию system() через PLT, выполняя произвольные команды с правами root.
Характеристики уязвимой среды
Для успешной эксплуатации PoC требует точного соответствия смещений (offsets) конкретной сборке. Ниже приведены параметры тестовой среды, в которой была подтверждена работа эксплойта:
| Параметр | Значение |
|---|---|
| Версия AnyDesk | Linux 8.0.2 |
| SHA-256 бинарного файла | 62ee04ad48dc039dd9c927f998e56143c87a9c5e12d28654f78c7f6340394f5a |
| Платформа | Linux x86_64 |
| Тестовая ОС | Linux Mint 22.3 (Zena), ядро 6.14.0-37-generic |
| Уязвимый порт | TCP/7070 |
| Статус исправления | Исправлено в версии 8.0.3 |
Рекомендации по безопасности
Владельцам AnyDesk на базе Linux настоятельно рекомендуется обновиться до версии 8.0.3 или новее. Если обновление невозможно, следует ограничить доступ к порту 7070 и убедиться, что сервис AnyDesk не доступен из внешних сетей, так как уязвимость позволяет обходить механизм подтверждения сессии.
Источник: Github ↗
