Найти в Дзене
Windows 11, 10, etc

🔓 О компрометации Notepad

++ Намедни автор приложения, Дон Хо, опубликовал новость о компрометации своего детища. Заявление не отличалось внятностью. Зато разработчик сходу возложил вину на китайских хакеров, а основное внимание уделил уязвимости в хостинге своего сайта. И особо подчеркнул, что взлом произошёл именно на уровне хостера, нежели кода Notepad++. Тут не поспоришь, но есть нюанс © Хостера взломали, чтобы эксплуатировать изъяны в процессе обновления N++! Автор механизма - Дон Хо 😎 Я думаю, дело было так. 1. Для проверки обновления N++ Дон Хо применяет свою же разработку WinGUP. Файл GUP.exe из папки \updater опирается на gup.xml, где прописано: <InfoUrl>https://notepad-plus-plus.org/update/getDownloadUrl.php</InfoUrl> WinGUP подставляет в запрос текущую версию N++ и получает в ответ манифест (XML) с параметрами обновления. Это - номер новой версии и путь к её установщику. 2. Манифест не имел цифровой подписи. А перед запуском скачанного установщика не проверялись его сертификат и цифровая под

🔓 О компрометации Notepad++

Намедни автор приложения, Дон Хо, опубликовал новость о компрометации своего детища.

Заявление не отличалось внятностью. Зато разработчик сходу возложил вину на китайских хакеров, а основное внимание уделил уязвимости в хостинге своего сайта. И особо подчеркнул, что взлом произошёл именно на уровне хостера, нежели кода Notepad++.

Тут не поспоришь, но есть нюанс © Хостера взломали, чтобы эксплуатировать изъяны в процессе обновления N++! Автор механизма - Дон Хо 😎

Я думаю, дело было так.

1. Для проверки обновления N++ Дон Хо применяет свою же разработку WinGUP. Файл GUP.exe из папки \updater опирается на gup.xml, где прописано:

<InfoUrl>https://notepad-plus-plus.org/update/getDownloadUrl.php</InfoUrl>

WinGUP подставляет в запрос текущую версию N++ и получает в ответ манифест (XML) с параметрами обновления. Это - номер новой версии и путь к её установщику.

2. Манифест не имел цифровой подписи. А перед запуском скачанного установщика не проверялись его сертификат и цифровая подпись. (Это вытекает из списка улучшений в новой версии N++, т.е. сейчас эти ошибки исправлены.)

4. Хостинг взломали и подменили манифест, указав путь на вредоносный установщик - неподписанный или с левой подписью. И отгружали его с июня по декабрь 2025 года 👀 Якобы, только определённым жертвам.

Теперь N++ на новом хостинге, а целостность процесса обновления укреплена. Рекомендуется установить последнюю версию программы.

////

Но остаётся вопрос: можно ли доверять встроенному механизму обновлений, завязанному на хостинг разработчика? 🤔 И не только N++, а более широкому кругу программ, в том числе с открытым исходным кодом.

Зачастую разработчикам-одиночкам куда интереснее пилить фичи своей программы, чем продумывать архитектуру её обновления и обеспечивать безопасность всего процесса.

👉 Хорошим компромиссом мог бы стать централизованный репозиторий под контролем разработчика ОС.

Это Google Play и Apple App Store, а также магазин Windows. Пусть он и откатился от первоначальной жёсткой UWP к "приходите к нам хоть с ярлыками", это всё ещё хороший вариант. Microsoft также внедряет механизм обновления приложений посредством Windows Update. Хотя не думаю, что он станет популярнее того же магазина.

⬇️ В качестве альтернативы можно рассматривать репозиторий winget. Команда winget show Notepad++.Notepad++ показывает выдержку из манифеста. Установщик загружается с GitHub:

Installer:

Installer Type: nullsoft

Installer Url: https://github.com/notepad-plus-plus/notepad-plus-plus/releases/download/v8.9.1/npp.8.9.1.Installer.x64.exe

Возможно, ссылка на GitHub была и у Дон Хо в манифесте, пока тот не подменили. В репо winget процесс обновления манифестов в какой-то степени автоматизирован ботами (пример N++). Само по себе это не гарантирует целостность цепочки поставок. Однако в контролируемом Microsoft репо всё-таки значительно ниже вероятность, что подмена ссылки останется незамеченной на протяжении полугода!

▶️ Я обновляю ряд программ, включая N++, именно с помощью winget: из репозиториев winget и msstore (магазин). Фактически запускаю из планировщика тот же скрипт #PowerShell, что и для установки приложений. Но с нюансами вроде qBittorent. Графические оболочки winget достойны отдельного поста.

Поэтому взлом встроенного механизма обновления N++ меня не затронул. Чего и вам желаю ✌️