Инцидент с расширением QuickLens наглядно демонстрирует одну из самых сложных проблем безопасности современного веба - уязвимость цепочки поставок браузерных расширений. Функциональный, проверенный и даже отмеченный самим Google инструмент для визуального поиска был продан на стороннем маркетплейсе, после чего новый анонимный владелец выпустил обновление, превратившее его в полноценную платформу для удаленного выполнения кода (RCE) на стороне клиента. Этот случай поднимает острые вопросы о доверии к автоматическим обновлениям и реальной эффективности рецензирования в официальных магазинах расширений.
Описание
Изначально QuickLens представлял собой удобную оболочку для Google Lens, позволявшую пользователям быстро искать информацию по изображениям на экране. Расширение обладало широким, но оправданным для своих задач набором разрешений, включая доступ к активной вкладке, управление скриптами и навигацией. Его код не содержал обфускации или подозрительных сетевых вызовов, а число установок достигло 7000. Однако, как следует из анализа компании Annex, судьба проекта резко изменилась после его продажи на площадке ExtensionHub в октябре 2025 года. В феврале 2026 года владельцем числилась сомнительная организация «LLC Quick Lens», а 17 февраля было выпущено обновление до версии 5.8, полностью изменившее функционал расширения.
Ключевым звеном атаки стало добавление в манифест разрешения "declarativeNetRequestWithHostAccess", которое позволяет модифицировать сетевые запросы. Хотя для его активации требуется согласие пользователя, подобные запросы часто воспринимаются как рутина. Новый файл "rules.json" содержал правило, которое глобально удаляло критически важные заголовки безопасности HTTP из всех ответов серверов. Список включал "Content-Security-Policy" (CSP), "X-Frame-Options" и "X-XSS-Protection". Таким образом, для всех вкладок и фреймов отключалась защита от межсайтового скриптинга (XSS) и кликджекинга, что создавало фундамент для следующего этапа атаки.
Параллельно в фоновом скрипте ("background.js") появился полноценный клиент командного центра (C2, Command and Control). Он отправлял на сервер "api.extensionanalyticspro.top" отпечаток устройства пользователя, включая данные о стране, браузере и операционной системе, после чего начинал опрашивать сервер каждые пять минут на предмет новых инструкций. Полученные с сервера строки JavaScript сохранялись в локальном хранилище браузера под ключом "cached-agents-data". Механизм выполнения скрывался в контент-скрипте ("content.js"), который внедрялся на каждую посещаемую пользователем страницу. Его функция "createImgPixel()" создавала скрытый элемент изображения ("<img>") с атрибутом "onload", куда подставлялся код из локального хранилища. Источником изображения выступала прозрачная GIF-картинка размером 1x1 в формате Data URI, которая загружалась мгновенно и не требовала сетевого запроса. В момент загрузки изображения браузер выполнял JavaScript, записанный в "onload", что является классическим методом XSS. После выполнения элемент немедленно удалялся из DOM, а все ошибки подавлялись.
Связка этих техник создавала мощный и скрытный вектор атаки. Удаление CSP было необходимо, так как политики безопасности современных сайтов по умолчанию блокируют выполнение встроенных обработчиков событий, подобных "onload". Получив возможность исполнять произвольный код в контексте любой веб-страницы, злоумышленники могли красть сессионные куки, токены аутентификации, отслеживать ввод данных и перенаправлять трафик. При этом статический анализ кода расширения не выявлял явного вредоносного поведения - опасные полезные нагрузки доставлялись динамически и хранились отдельно. Оригинальный функционал Google Lens при этом продолжал работать, не вызывая подозрений у пользователей.
Этот инцидент высвечивает системные риски, связанные с торговлей расширениями. Добросовестный разработчик создает легитимный продукт, набирает аудиторию и продает его на специализированной площадке. Покупатель, оставаясь анонимным, получает контроль над тысячами установок, которые автоматически обновляются через Chrome Web Store. Одно «тихое» обновление с добавлением, казалось бы, рутинных разрешений - и инструмент превращается в шпионское ПО. Платформа Google удалила расширение за «нарушение политик», однако это произошло уже после того, как обновление было развернуто. Для специалистов по информационной безопасности данный случай служит тревожным сигналом. Мониторинг только разрешений расширений недостаточен, так как запрос "declarativeNetRequestWithHostAccess" может выглядеть безобидно. Необходим более глубокий анализ сетевой активности расширений, отслеживание смены владельцев проектов и ревизия кода после критических обновлений. Корпоративным пользователям стоит рассмотреть политики, ограничивающие установку расширений из неконтролируемых источников, и уделять повышенное внимание расширениям, требующим прав на модификацию сетевых заголовков или веб-запросов.
Индикаторы компрометации
Extension ID
- kdenlnncndfnhkognokgfpabgkgehodd
Extension Name
- QuickLens - Search Screen with Google Lens
C2 Domain
- api.extensionanalyticspro.top
Developer Email
- support@doodlebuggle.top
Privacy Policy
- kowqlak.lat
Malicious Version
- 5.8
SHA256
- fa3d0c8c8e9f3dacaa9f34e42ad63dceeba16689e055b90e9a903fa274d35df0
