Антироссийский призыв в консоли разработчика вместе с обновлением Microsoft Visual Studio Code
Компания «Доктор Веб» сообщила о выявлении подозрительного поведения при установке новой версии (1.116) редактора кода Microsoft Visual Studio Code. По данным специалистов, антивирус Dr.Web детектирует вредоносный JavaScript-файл, входящий в состав одной из зависимостей редактора (JS.Siggen5.44590).
Речь идет о библиотеке es5-ext, в которую еще в 2022 году был добавлен сторонний код. Несмотря на давность инцидента, данный фрагмент по-прежнему присутствует в библиотеке и распространяется вместе с рядом программных продуктов.
Что делает вредоносный JS-файл
Обнаруженный код не выполняет классических вредоносных действий (таких как кража данных или установка бэкдоров), однако демонстрирует сообщение в консоли разработчика с антироссийским политическим содержанием.
Скрипт активируется только при выполнении определенного условия — если системный часовой пояс пользователя соответствует одному из российских регионов. В список входят такие города, как Анадырь, Барнаул, Калининград, Самара и другие.
Почему это считается вредоносным поведением
Специалисты «Доктор Веб» классифицируют данный код как нежелательную и потенциально опасную вставку. Причины следующие:
- Код не имеет отношения к функциональности библиотеки;
- Он выполняет действия, зависящие от географического положения пользователя;
- Содержит политическую агитацию, что недопустимо для инфраструктурного ПО.
Хотя на текущий момент скрипт ограничивается выводом сообщения, эксперты отмечают, что разработчик библиотеки теоретически может изменить его поведение в любой момент. В таком случае последствия могут быть значительно серьезнее — вплоть до удаления данных или выполнения произвольного кода на устройстве пользователя.
Как это оказалось в Visual Studio Code
Несмотря на известность проблемы в профессиональном сообществе, библиотека es5-ext была включена в зависимости Visual Studio Code. Это означает, что при обновлении редактора пользователи автоматически получают и данный пакет.
Антивирусное ПО фиксирует проблему на этапе загрузки или распаковки обновления, в котором присутствует скомпрометированная библиотека.
Игорь Здобнов, руководитель антивирусной лаборатории «Доктор Веб»:
Мотивы, по которым Microsoft включила в зависимость заведомо сомнительный пакет, нам неведомы. Мы рекомендуем пользователям обратить внимание на срабатывания антивируса и, при необходимости, временно приостановить автоматическое обновление до выяснения обстоятельств со стороны разработчика.
Последствия для пользователей и рекомендации
Основной риск на данный момент заключается не в непосредственном вреде, а в самом факте наличия неконтролируемого кода в цепочке поставок программного обеспечения.
Пользователям рекомендуется:
- Внимательно относиться к предупреждениям антивируса;
- Проверять обновления перед установкой;
- При необходимости временно отключить автоматические обновления;
- Использовать проверенные версии программного обеспечения.
По информации «Доктор Веб», последняя версия Visual Studio Code, не содержащая данной проблемы, — 1.115.
Как отключить сторонний скрипт _postinstall.js в составе Visual Studio Code
В дистрибутив Visual Studio Code попадает npm-пакет es5-ext, в состав которого входит файл _postinstall.js. При определённых часовых поясах скрипт выводит в консоль разработчика антироссийский призыв; Dr.Web обнаруживает этот файл как JS.Siggen5.44590. На момент выхода Visual Studio Code 1.118 Microsoft пакет из состава редактора не удалила, автор es5-ext скрипт тоже не убрал. Отключить его можно сторонним исправлением vscode-es5ext-patch, которое заменяет _postinstall.js на заглушку и чистит хук postinstall в package.json.
Перед применением
- Закрыть Visual Studio Code.
- Запускать исправление с правами администратора (sudo на Linux и macOS, консоль с повышенными правами на Windows).
- Скрипт корректно обрабатывает отдельно установленные сборки Visual Studio Code, Visual Studio Code Insiders и Code OSS.
- Повторный запуск безопасен — уже исправленные файлы скрипт пропускает.
Применение через скрипт patch-es5ext.js
Клонирование репозитория либо загрузка файла patch-es5ext.js с GitHub.
Linux:
git clone https://github.com/Chumikov/vscode-es5ext-patch.git cd vscode-es5ext-patch sudo node patch-es5ext.js
macOS:
git clone https://github.com/Chumikov/vscode-es5ext-patch.git cd vscode-es5ext-patch sudo node patch-es5ext.js
Если Node.js не установлен отдельно, можно использовать Node.js из состава самого Visual Studio Code:
sudo "/Applications/Visual Studio Code.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/node" patch-es5ext.js
Windows (PowerShell от имени администратора):
git clone https://github.com/Chumikov/vscode-es5ext-patch.git cd vscode-es5ext-patch node patch-es5ext.js
Ручное исправление без Node.js
Если запускать сторонний скрипт нежелательно, те же действия можно выполнить вручную. Содержимое _postinstall.js заменяется на безопасную заглушку, а из package.json пакета es5-ext удаляется строка с postinstall.
Linux:
echo '#!/usr/bin/env node "use strict";' | sudo tee /usr/share/code/resources/app/node_modules/es5-ext/_postinstall.js sudo sed -i '/_postinstall/d' /usr/share/code/resources/app/node_modules/es5-ext/package.json
Для Visual Studio Code Insiders путь меняется на /usr/share/code-insiders/..., для Code OSS — на /usr/share/code-oss/...
macOS:
echo '#!/usr/bin/env node "use strict";' | sudo tee "/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/_postinstall.js" sudo sed -i '' '/_postinstall/d' "/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/package.json"
Windows (PowerShell от имени администратора):
Set-Content -Path "C:\Program Files\Microsoft VS Code\resources\app\node_modules\es5-ext\_postinstall.js" -Value "#!/usr/bin/env node`n`"use strict`";"
$file = "C:\Program Files\Microsoft VS Code\resources\app\node_modules\es5-ext\package.json"
$content = Get-Content $file | Where-Object { $_ -notmatch "_postinstall" -and $_ -notmatch '"postinstall"' }
Set-Content -Path $file -Value $content
После каждого обновления Visual Studio Code исправление нужно применять заново. Любое обновление редактора перезаписывает содержимое каталога resources/app/node_modules/es5-ext/ — файл _postinstall.js восстанавливается в исходном виде. Имеет смысл добавить запуск patch-es5ext.js в свой скрипт обслуживания системы.