В Telegram е открита експериментална система, която ще позволи изпълнението на JavaScript директно в съобщенията. Вместо обикновен текст в чатовете ще могат да се появяват интерактивни приложения, работещи без нуждата от отваряне на браузър. Новата възможност обаче повдига въпроси относно сигурността на кореспонденцията.
Подсистемата HTMLBubbles е открита в бета версията на Telegram 12.10.283300 за macOS. Разработчиците са предвидили поддръжка на HTML, CSS и JavaScript директно в полето за съобщения. Потребителят ще може да натиска бутони, да променя настройки, да работи с графики и да взаимодейства с други елементи, без да напуска чата. Засега функцията остава вътрешен експеримент и не е достъпна за обикновените потребители и ботовете.
В откритата версия са включени 64 демонстрационни сценария. Сред тях са картички на онлайн магазини с възможност за избор на цвят и размер на стоката, бордни карти, списъци със задачи, интерактивни графики и шах. Има и по-сложни примери за разработчици, включително преглед на код и панели за управление на софтуер с бутони за стартиране и отмяна на промени. На практика всяко съобщение се превръща в малък самостоятелен интерфейс. Основната разлика между HTMLBubbles и съществуващите Mini Apps се състои в начина на стартиране. В момента мини-приложенията се отварят като отделна уеб страница в Telegram и взаимодействат със сървъра.
Новият механизъм предвижда изпълнението на скриптове директно в съобщението, без отделен WebView прозорец. Този подход позволява вграждането на интерактивни елементи в обичайния поток на кореспонденцията, но същевременно пренася изпълнението на програмния код по-близо до основния интерфейс на месинджъра.За визуализиране на съдържанието разработчиците са избрали litehtml – компактен енджин за обработка на HTML и CSS. Библиотеката анализира структурата на документа и изчислява разположението на елементите, а текстът и изображенията се изобразяват от самото приложение чрез средствата на macOS. За разлика от пълноценен браузър, litehtml поддържа само част от уеб стандартите. Изпълнението на JavaScript се осигурява от отделен механизъм, а не от самата библиотека за визуализация.
Скриптовете се изпълняват в специален „пясъчник“, която трябва да изолира програмния код от останалата част на системата. Според описанието на прототипа, JavaScript няма достъп до обичайните браузърни обекти document и window, не може да изпраща заявки чрез fetch и XMLHttpRequest, нито да установява мрежови връзки. Също така WebSocket и localStorage са недостъпни. В резултат на това скриптовете не трябва да се обръщат директно към външни сървъри или към хранилището на браузъра.
Допълнителните ограничения се отнасят до зарежданото съдържание. HTMLBubbles блокира външни изображения по HTTP и HTTPS, а елементите video, audio, iframe и canvas се игнорират. За оформлението на картичките се предполага да се използват вградени ресурси и системни икони. Тази архитектура ограничава възможностите на програмния код, включително скритото зареждане на външно съдържание, макар че сама по себе си не гарантира липсата на уязвимости.
Telegram също така ограничи потреблението на изчислителни ресурси. Едно извикване на JavaScript може да отнеме не повече от 50 милисекунди, а общото време за изпълнение е ограничено до 200 милисекунди. Едновременно са разрешени до 16 таймера. Ако скриптът надвиши зададения лимит или приключи с грешка, съобщението трябва да превключи към статична HTML версия. За елементите, които не се виждат на екрана е предвидено спиране на анимацията.
Въпреки това, дори при такива ограничения, изпълнението на JavaScript в рамките на кореспонденцията създава нова възможност за атака. Ако злонамерен потребител успее да заобиколи изолацията или се възползва от грешка при обработката на HTML, CSS или събития на интерфейса, специално подготвено съобщение потенциално би могло да повлияе на работата на клиента. Мащабът на възможните последствия ще зависи от архитектурата на „пясъчника“, достъпните вътрешни функции на Telegram и от това колко надеждно програмата отделя съдържанието на съобщението от собствените си компоненти.
Тези опасения имат техническа основа. Наскоро стана известно за уязвимост в Telegram Desktop, която позволява внедряването на JavaScript чрез текста на бутон в HTML експорта на кореспонденцията. Зловредният код се изпълнява при отваряне на запазения архив в браузъра, а не при обикновено преглеждане на чата. Уязвимостта беше отстранена в Telegram Desktop 7.0.1, но този случай показа колко опасно може да се окаже недостатъчната обработка на недоверено съдържание.
Новият механизъм се различава принципно от предишната уязвимост. HTMLBubbles от самото начало предвижда програмируеми съобщения, поради което разработчиците трябва да защитят не само обработката на маркировката, но и самата среда на изпълнение. Особено важен остава въпросът дали скриптовете ще могат да се стартират автоматично при появата на съобщение на екрана или само след действие от страна на потребителя. Все още няма публично техническо описание на такова поведение.
Наличието на експериментален модул в кода на Telegram за macOS беше потвърдено независимо от специалисти от общността Telegram Info, но все още не е проверено действителното функциониране на всички обявени сценарии. Информацията за 64-те демонстрации и конкретните ограничения се основава предимно на проучването на тестовата версия. Все още няма официално обявяване на HTMLBubbles, резултати от независим одит за сигурност и потвърждения за практическото използване на уязвимостите на новата система.
Не е ясно също така как потребителите или разработчиците на ботове ще могат да създават интерактивни съобщения, дали ще има поддръжка на HTMLBubbles за Android, iOS и Windows и какви ограничения ще останат до публичното пускане. От Telegram не са обявили срокове за пускането на функцията. Разработчиците могат значително да променят механизма или изобщо да се откажат от експеримента. Засега HTMLBubbles показва възможна посока на развитие на месинджъра, при която съобщението престава да бъде просто текст и се превръща в изпълним интерфейс.