В Telegram для Android нашлась ошибка в коде звонков, через которую, по словам стартапа NebuSec, можно исполнить код на телефоне того, кто принял вызов. Исправлена она в версии 12.10.4 от 24 сентября. Касается это тех, у кого Telegram для Android старше этой версии: для атаки достаточно, чтобы собеседник взял трубку. Telegram о баге знал с августа, но с тем, что дело доходит до исполнения кода, не согласен.

Что делать

Обновить Telegram для Android до 12.10.4 или новее; последняя версия в исходниках клиента — 13.1.1 от 25 октября. Номер своей версии виден внизу экрана «Настройки». Пока обновиться нельзя, можно ограничить звонки в «Настройки → Конфиденциальность → Звонки» до «Мои контакты» или «Никто» и не принимать вызовы от незнакомых.

Свидетельств того, что ошибка затрагивает iOS, десктоп или групповые звонки, у NebuSec, по их словам, нет; проверяли они личные звонки на телефонах с процессорами ARM64.

Где ошибка

Во время звонка клиенты обмениваются служебными сообщениями о своём состоянии: включены ли микрофон и камера, как повёрнуто видео. Разбирает их библиотека звонков tgcalls, общая для клиентов Telegram. В функции разбора этого сообщения код проверял, что поле поворота видео есть и это число, — а значение затем брал из соседнего поля, состояния видео. Если собеседник присылал поворот без состояния видео, клиент обращался к элементу словаря, которого не существует, и читал его значение — поведение, которое язык C++ не определяет: программа может упасть или взять из памяти что угодно.

Исправление — по четыре строки в двух версиях протокола, где одно имя поля заменено другим. В общей библиотеке tgcalls оно появилось 21 апреля под заголовком «Fix camera rotation», в Telegram для Android — только в 12.10.4 24 сентября.

Что заявляет NebuSec

29 октября NebuSec объявили, что уязвимость нашёл их продукт NebuSec Code Security, работающий на модели GPT-5.4, — сами они называют её «динозавром». По их данным в пересказе SQ Magazine и kod.ru, уязвимы версии с 8.6.2 по 12.10.3, то есть выпущенные с марта 2022 по сентябрь 2026 года; атакующему нужен обычный аккаунт и принятый звонок.

Доказательство исполнения кода у NebuSec — видео; технического разбора и номера CVE нет, и цепочку никто независимо не проверил.

Что ответил Telegram

Представитель Telegram сообщил SQ Magazine, что об ошибке компании сообщили ещё в августе и исправление вышло раньше, чем пришёл отчёт NebuSec. По его словам, ни в одном из двух отчётов не было работающей цепочки, которая доводила бы до исполнения кода. Тот же ответ приводит kod.ru.