Skip to content

Chumikov/vscode-es5ext-patch

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 

Repository files navigation

vscode-es5ext-patch

Кроссплатформенный патчер для нейтрализации вредоносного скрипта _postinstall.js из npm-пакета es5-ext, встроенного в VS Code.

Что за скрипт и как он работает

В составе VS Code (версии 1.116.0 и другие) поставляется npm-пакет es5-ext. В корне этого пакета находится файл _postinstall.js, который автоматически вызывается при установке пакета через npm (npm install).

Логика работы скрипта

  1. Определение местоположения пользователя. Скрипт получает текущую часовую зону через вызов Intl.DateTimeFormat().resolvedOptions().timeZone.

  2. Проверка на российскую зону. Полученная зона сравнивается со списком из 27 российских часовых поясов:

    • Asia/Anadyr, Asia/Barnaul, Asia/Chita, Asia/Irkutsk, Asia/Kamchatka, Asia/Khandyga, Asia/Krasnoyarsk, Asia/Magadan, Asia/Novokuznetsk, Asia/Novosibirsk, Asia/Omsk, Asia/Sakhalin, Asia/Srednekolymsk, Asia/Tomsk, Asia/Ust-Nera, Asia/Vladivostok, Asia/Yakutsk, Asia/Yekaterinburg
    • Europe/Astrakhan, Europe/Kaliningrad, Europe/Kirov, Europe/Moscow, Europe/Samara, Europe/Saratov, Europe/Simferopol, Europe/Ulyanovsk, Europe/Volgograd
    • W-SU
  3. Если зона не российская — скрипт молча завершается (return), ничего не выводя.

  4. Если зона российская — скрипт выводит в консоль русскоязычное сообщение через process._rawDebug(), содержащее политические сообщения.

    Текст выводится с ANSI-форматированием (жирный шрифт, цвет).

  5. Обработка ошибок — весь код обёрнут в try/catch, поэтому при любой ошибке скрипт молча игнорируется.

Путь к файлу

Linux:   /usr/share/code/resources/app/node_modules/es5-ext/_postinstall.js
macOS:   /Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/_postinstall.js
Windows: C:\Program Files\Microsoft VS Code\resources\app\node_modules\es5-ext\_postinstall.js

Опасность

Хотя в текущем виде скрипт лишь выводит текст в консоль, сам механизм представляет угрозу:

  • Пакет es5-ext — популярная зависимость (миллионы загрузок в неделю), уже бывала объектом протестных акций
  • Механизм гео-таргетинга по часовому поясу может быть использован для доставки любого контента
  • Пользователь не информируется о наличии данного скрипта
  • Скрипт выполняется автоматически при установке/обновлении пакета

Как удалить вручную

Linux

# 1. Проверить наличие файла
ls -la /usr/share/code/resources/app/node_modules/es5-ext/_postinstall.js

# 2. Заменить содержимое на пустой no-op скрипт
echo '#!/usr/bin/env node
"use strict";' | sudo tee /usr/share/code/resources/app/node_modules/es5-ext/_postinstall.js

# 3. Удалить postinstall-хук из package.json
sudo sed -i '/_postinstall/d' /usr/share/code/resources/app/node_modules/es5-ext/package.json

Для Code Insiders путь: /usr/share/code-insiders/resources/app/node_modules/es5-ext/_postinstall.js Для Code OSS путь: /usr/share/code-oss/resources/app/node_modules/es5-ext/_postinstall.js

macOS

# 1. Проверить наличие файла
ls -la "/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/_postinstall.js"

# 2. Заменить содержимое
echo '#!/usr/bin/env node
"use strict";' | sudo tee "/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/_postinstall.js"

# 3. Удалить postinstall-хук из package.json
sudo sed -i '' '/_postinstall/d' "/Applications/Visual Studio Code.app/Contents/Resources/app/node_modules/es5-ext/package.json"

Для VS Code Insiders путь: /Applications/Visual Studio Code - Insiders.app/Contents/Resources/app/node_modules/es5-ext/_postinstall.js

Windows (PowerShell от имени Администратора)

# 1. Проверить наличие файла
Test-Path "C:\Program Files\Microsoft VS Code\resources\app\node_modules\es5-ext\_postinstall.js"

# 2. Заменить содержимое
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`";"

# 3. Удалить postinstall-хук из package.json
$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

Автоматический патчер (patch-es5ext.js)

Скрипт автоматизирует всё описанное выше:

  • Определяет ОС и ищет файл во всех возможных расположениях (VS Code, Code Insiders, Code OSS)
  • Заменяет содержимое _postinstall.js на безобидный no-op
  • Чистит postinstall-хук из package.json
  • Безопасен при повторном запуске — пропускает уже пропатченные файлы

Запуск

Linux

sudo node patch-es5ext.js

macOS

sudo node patch-es5ext.js

Если Node.js не установлен глобально, можно использовать Node.js из состава самого VS Code:

# Через встроенный Node.js
sudo "/Applications/Visual Studio Code.app/Contents/Frameworks/Electron Framework.framework/Versions/A/Resources/node" patch-es5ext.js

# Или через npx, если установлен
sudo npx node patch-es5ext.js

Windows (PowerShell от имени Администратора)

node patch-es5ext.js

Важно

  • Скрипт необходимо запускать после каждого обновления VS Code, так как обновление перезаписывает файлы
  • Если при запуске возникает ошибка EACCES (Linux/macOS) или EPERM (Windows) — запустите от имени суперпользователя / администратора

Лицензия

MIT

About

Cross-platform patcher to neutralize es5-ext _postinstall.js in VS Code

Resources

Stars

Watchers

Forks

Releases

Packages

Contributors

Languages