Zoom‑веб‑сервер на localhost открывает уязвимость через обход CORS
Zoom использовал загрузку изображения с localhost:19421, чтобы обойти CORS, открыв доступ всем сайтам. Автор предлагает правильную настройку заголовков Access‑Control‑Allow‑Origin и CSP.
Что случилось
Zoom запустил веб‑сервер на localhost:19421, который отвечает на запросы, посылаемые со страницы сайта. Чтобы обойти правила CORS, сервер отдаёт данные в виде изображения, размер которого кодирует статус‑код. Такой подход позволил любому сайту вызвать действия в нативном приложении Zoom.
Как это работает
- Сервер
localhost:19421слушает запросы отzoom.us. - Вместо обычного AJAX‑запроса страница загружает изображение с этим сервером.
- Размер изображения меняется в зависимости от кода ответа, что позволяет клиенту интерпретировать результат.
- Браузер, согласно заявлению автора, игнорирует CORS‑заголовки для
localhost, но в реальности Chrome соблюдает их.
Почему это опасно
- Любой сайт может отправить запрос к
localhost:19421и получить доступ к функционалу Zoom. - Это открывает возможность автоматического запуска встреч, чтения ответов и даже установки программного обеспечения.
- Пользователь, просто открыв ссылку Zoom, может оказаться в ситуации, где камера и микрофон активируются без его согласия.
Как правильно настроить сервер
- REST‑API – сервер должен отдавать JSON, а не изображения.
- Access‑Control-Allow‑Origin – установить значение
https://zoom.us. Это гарантирует, что только скрипты с домена Zoom могут обращаться к серверу. - Content Security Policy – добавить заголовок, запрещающий встраивание страницы в iframe, чтобы предотвратить автоматический запуск встреч из сторонних сайтов.
Что это значит для бизнеса
Если ваша компания использует локальный сервер для взаимодействия с клиентским приложением, настройте CORS‑заголовки и CSP‑политику. Это снизит риск, что сторонние сайты смогут управлять вашими внутренними сервисами. В случае Zoom, правильная конфигурация могла бы предотвратить открытие 1 млн+ потенциальных точек входа для злоумышленников.