За последние годы мир программного обеспечения стал свидетелем нового явления, получившего название «протестное ПО» или protestware. Это специализированное программное обеспечение, внедряемое разработчиками с целью выражения политической или социальной позиции, иногда с последствиями, влияющими на пользователей. Недавнее открытие исследователей Socket Threat Research Team выявило такую форму протестного ПО, скрытую в 28 различных npm-пакетах, которые направлены на русскоязычных пользователей, посещающих сайты в доменных зонах России и Беларуси. Суть проблемы заключается в том, что в указанных пакетах содержится сложный код, предназначенный для обнаружения пользователей с российским языком браузера и посещающих российские или белорусские домены. Если все условия совпадают, то интерактивность страницы блокируется, а в фоновом режиме запускается воспроизведение украинского национального гимна.
По своей природе это код, который ограничивает привычное поведение веб-сайтов, делая взаимодействие пользователя невозможным. Это программное вмешательство удивительно изощрённо спрятано глубоко в коде, зачастую в больших пакетах, содержащих сотни тысяч строк программного текста. Примечательно, что разработчики, ответственные за некоторые из этих пакетов, не раскрывают присутствие такого кода ни в документации, ни в описании своих проектов. Это вызывает серьёзные вопросы о транспарентности и безопасности экосистемы npm. Одним из ключевых распространителей такой функциональности стал известный пакет sweetalert2.
Он с момента своего выпуска около трёх лет назад, вероятно совпадающего с началом военного конфликта в Украине, содержит официальное предупреждение о протестном поведении в русскоязычных доменных зонах. Однако, на основе его кода, без указания на наличие протестного скрипта, возникает эффект цепной реакции: разные сторонние пакеты копируют этот код и распространяют его дальше. Таким образом образуется широкое распространение протестного кода без согласия пользователей и понимания разработчиков. Этот механизм носит черты рисковой цепочки поставок, когда нежелательный функционал проникает во множество проектов вследствие копирования и распространения исходного кода без должной проверки. В результате, тысячи пользователей, устанавливая популярные npm-пакеты, могут сталкиваться с неожиданным блокированием интерфейса и аудио-плеером с гимном, что существенно нарушает опыт использования веб-ресурсов.
Спектр пострадавших пакетов очень широк: некоторые из них имеют значительную аудиторию с сотнями тысяч скачиваний в неделю и стабильной поддержкой, другие – малоизвестные, но все они объединены присутствием того самого протестного фрагмента. Примечательно, что многие из этих проектов продолжают получать обновления без какой-либо адаптации поведения по протестному коду или его удаления. Это говорит о недостаточной фильтрации и контроле качества на уровне сообщества и менеджеров пакетов. Эксперты подчеркивают, что протестное ПО – это двойственный феномен. С одной стороны, оно является способом выражения гражданской позиции отдельных разработчиков, что можно считать формой свободы слова и самовыражения в цифровом пространстве.
С другой стороны же, такое поведение поднимает вопросы ответственности, прозрачности и влияния на конечных пользователей, которые не всегда готовы к подобным ограничениям. Именно поэтому большинство исследователей и практиков в области безопасности квалифицируют такую «активность» как вредоносную, несмотря на политическую мотивацию. Отсутствие публичного уведомления о наличии замаскированного функционала делает это ПО опасным и способным вызывать недоверие к экосистеме npm и открытых источников в целом. Потенциально пострадавшими оказываются не только пользователи из России и Беларуси, но и русскоязычные исследователи, проживающие в других странах, а также люди, принимающие меры предосторожности и заботящиеся о своей цифровой безопасности. Применение такой протестной логики на уровне миллиона загрузок угрожает целостности и надежности платформы.
Для решения ситуации эксперты советуют разработчикам и пользователям более пристально анализировать зависимости своих проектов, обновлять пакеты только из проверенных источников и использовать инструменты автоматического сканирования безопасности. Современные решения, например, такие как Socket GitHub App, CLI-инструменты и расширения для браузеров, помогают выявить подозрительные или неординарные участки кода в реальном времени и предотвращают нежелательные установки. Кроме того, данная история служит поводом для обсуждения на уровне сообщества о необходимости повышения прозрачности при распространении кода, обязательного информирования пользователей о любых функциональных изменениях, особенно если они могут повлиять на работу приложения или нарушить пользовательский опыт. Немаловажно и законодательное регулирование, так как распространение протестного ПО без предупреждения о его последствиях может противоречить нормам пользовательского соглашения и законам о защите прав потребителей. Поднимается также вопрос ответственности технических площадок, таких как npm, за контроль качества публикуемого контента и предоставление инструментов для раннего выявления отклонений.
Возможно, стоит усилить процедуры проверки или ввести системы предупреждения для пакетов с нестандартным или вредоносным поведением. Таким образом, вопреки политической мотивации разработчиков, протестное ПО в ныне выявленных npm-пакетах оказывает негативное воздействие на пользователей и ведет к росту недоверия и рисков в экосистеме программного обеспечения. История с 28 затронутыми пакетами – яркий пример того, как несанкционированные изменения и распространение функционала могут привести к нежелательным последствиям. Выводы однозначны: прозрачность, ответственность и тщательный контроль должны стать приоритетами как для разработчиков, так и для менеджеров пакетов, чтобы сохранить доверие и безопасность цифровых продуктов. Для пользователей важно использовать передовые средства безопасности, регулярно проверять зависимости и быть осведомленными о рисках, связанных с программным обеспечением из открытых источников.
Новые вызовы требуют новых подходов, и только совместными усилиями сообщества возможно строить безопасное и открытое программное пространство, где свобода выражения не будет угрожать комфорту и безопасности пользователей.