джихад в трубе
zer0wayIntro
Практически все мы сталкивались с сервисами туннелирования трафика, ngrok cloudlfared localtonet gsocket и т.п. Кто то их использует для проброса своих ресурсов мимо служб ИБ, кто то просто разработчик и ему удобно через них работать, а кто то ломает чужие сети и использует эти утилиты для закрепления.
Задумывался ли кто нибудь о безопасности сервисов туннелирования?(нет, даже их владельцы не думают о безопасности)
Используя данные сервисы люди дают неизвестному приложению доступ к своему устройству и корпоративной сети. Поговорим сегодня о сервисе localtonet. Я несколько раз пытался наладить контакт с службой поддержки сервиса, но они в глубочайшем обмороке.
localtonet умеет: организовывать туннели через tcp/udp/http, http/socks прокси, file server.
Я начну рассказывать об уязвимостях сервиса, каждая из них не очень то и интересна, но в конце мы соединим все три вулны и придем к rce у клиентов ))
vuln 1.
Управление чужим туннелем при наличии токена.
Токен приложения представляет из себя строку длинной более 30 рандомных символов. Для создания туннеля отправляется post запрос с выбранным токеном и настройками. Если в сервисе отправить чужой токен (его где то нужно взять) то туннель будет создан и им можно будет управлять.



vuln 2.
Классический idor (Небезопасная прямая ссылка на объект), две штуки. IDOR позволяет, перебирая Id туннеля или токена, менять его отображаемое имя. Перебирая значение параметра userRelayId (см скриншот), мы меняем значение title у чужих туннелей.

vuln 3.
При исследовании уязвимости под номером два, выяснилось, что приклад не фильтрует входящие данные и спокойно пропускает html тэги.
Значение title живет вот в такой конструкции
<a href="javascript:;" onclick="editCustomName(111111, 'TITLE')">TITLE <i class="fas fa-edit"></i></a>
Вставив заветный alert('1'); было получено ожидаемое сообщение. Но при добавлении полезной нагрузки возникла проблема:

значение переменной не принимало строку длиннее 30 символов. Используя сервис сокращения url, линк на js нагруз был сокращен и вставлен в конструкции:

javascript прекрасно выполнялся, была найдена хранимая XSS.
COMBO
Ну вот и подошли к финальной стадии, где я взял уязвимость два и три, прогнал по id вставив код своего нагруза и получил содержимое чужих страниц управления токенами доступа и туннелями. Используя которые, можно управлять чужими туннелями и получить доступ к чужим устройствам, т.е. банальное rce на устройствах.



Итоги
Не используйте сервисы туннелирования, блокируйте им доступ на уровне сети. Это не первый и не единственный подобный дырявый сервис. Служба поддержки до сих пор в коме, отвечать не отвечают, но после алларма от клиентов уязвимости исправляют.
Помимо токенов, были получены ip адреса и почты, особо ценная информация в связке с токенами =) Никто не пострадал, злого умысла не имел.