Новости и разборы
Кого заденет обновление. Инструмент Netflix, TypeScript 7.1, Node 24.22 и 22 дыры в curl
Netflix измеряет радиус поражения библиотек, вышли TypeScript 7.1 beta, Node.js 24.22, Bun, Deno и патчи curl. Мой порядок: что обновлять сегодня, а что позже.
За десять дней октября накопилось обновлений: Node.js 24.22, Bun 1.4.4, Deno 2.9.8, бета TypeScript 7.1, curl закрыл 22 уязвимости, а Cloudflare начал порт TypeScript на Rust. Netflix в это же время рассказал об инструменте, который перед выпуском библиотеки показывает, кто её вызывает. Для владельца бизнеса, у которого работает своя система, вопрос простой: что из этого ставить сегодня, что через месяц, а что не трогать. Ответ зависит от того, кого обновление заденет.
Что вышло
Netflix 23 октября описал Quasar, инструмент для измерения радиуса поражения изменений в библиотеках. Автор общей Java-библиотеки видит диф своего API, но не видит, кто из множества репозиториев всё ещё вызывает удаляемый метод и на какой версии. Quasar индексирует определения и ссылки на символы по всем репозиториям и при проверке pull request считает, кто ссылается на удалённые или изменённые символы. Мне понравилась честность в описании: «ссылок не найдено» значит только, что их нет в проиндексированной части, а рефлексия и динамическая загрузка могут спрятать потребителя. Инструмент показывает риск и не запрещает релиз.
TypeScript 20 октября выпустил бету 7.1. В ней появились атрибуты импорта в объявлениях ambient-модулей: можно написать declare module "*" with { type: "css" } и получить ошибку, если атрибут в импорте забыли. Cloudflare в тот же день представил tsrs, порт TypeScript на Rust вместе с VoidZero и Max Schwenk из Owner.com. По их замерам tsrs до 8 раз быстрее и использует примерно на 70 % меньше памяти, чем TypeScript 7.0 при том же числе воркеров, а сама бета 7.1 до 2,5 раза быстрее 7.0. Статус экспериментальный, форком это не называют.
Node.js 14 октября выпустил 24.22.0 LTS. В списке заметного: crypto.parsePKCS12(), общий MAC API, util.throttle и util.debounce, StatementSync.close() в sqlite и передача net.BoundSocket в потоки и дочерние процессы. Из исправлений я бы отметил Hmac.digest(), который мог вернуть неинициализированную память.
Bun 22 октября выпустил 1.4.4 с 39 участниками; на странице релиза в GitHub только команды установки и ссылка на блог, содержание я по ней не разбирал. Deno 21 октября выпустил 2.9.8: deno compile теперь проверяет право на чтение для динамически импортируемых локальных файлов, из доверенных убрали скомпрометированные удостоверяющие центры eMudhra, а rand 0.9.x подняли до исправленной версии.
Ubuntu 14 октября опубликовал разбор исправлений для CVE-2026-92392 и других уязвимостей curl. Дэниел Стенберг 7 октября предупредил о выпуске с 22 уязвимостями, и 14 октября их раскрыли по плану. Одна оценена как высокая: CVE-2026-92392, у команды безопасности Ubuntu CVSS 8.1, с возможностью удалённого выполнения кода при подключении к вредоносному серверу. Она касается только Ubuntu 26.04 LTS, остальные закрыты для всех поддерживаемых выпусков в USN-8927-1 и USN-8932-1. Затронуты и утилита curl, и библиотека libcurl, то есть всё, что с ней собрано. Проверить пакеты они предлагают командой apt list '?installed ?source-package(^curl$)'.
Радиус поражения на одном сервере
У сервисной компании на одном сервере живут сайт, API, телефония и парсеры документов. Обновление Node задевает API и сайт, обновление системного curl задевает всё, что качает файлы по ссылке через libcurl, от скриптов до системных утилит. Вопрос Netflix «кто вызывает этот символ» здесь звучит проще: какие контейнеры собраны из этого образа и какие скрипты зависят от этой библиотеки.
Как это устроено у меня
Сайт kononov.dev работает на Next.js, Node.js 24, SQLite и Docker, так что ветка 24.22 касается меня напрямую. «Кофе вместе» написан на React и TypeScript и работает в рантайме Cloudflare Workers на том же сервере с 2 ГБ памяти. При обновлении старый экземпляр останавливается до запуска нового, а если сборке не хватает памяти, я собираю образ вне сервера. Так я ограничиваю радиус: образ собирается и проверяется отдельно, на сервер попадает готовый.
В PDR-компании в США вопросы безопасности идут ко мне, и при крупных уязвимостях в мире я проверяю, касается ли это нас. Серверы там на Debian в Google Cloud, не на Ubuntu, но curl стоит в любой системе. Внутренний API компании я довёл до третьей версии, и от него зависят несколько приложений: AppSheet, суперапп, сайт, TV-борд. Перед изменением API я смотрю, кто его вызывает, тем же методом, что Netflix, только без индекса: список приложений и поиск по коду. Бету TypeScript 7.1 и tsrs в выпуск я не беру; что у них внутри, сужу по описаниям.
Что я бы сделал
Составить список того, что стоит на сервере и из чего собрано: версии Node и Python и системные пакеты в базовых образах.
Обновить curl и остальные системные пакеты сегодня. Для Debian и Ubuntu это apt, для образов Docker пересборка базового слоя.
Node 24.22 поставить в образ, прогнать проверки и выпустить с готовым откатом.
Перед изменением собственного API найти всех потребителей и записать их рядом с версией. Удалять старый метод после того, как список опустел.
О фоновых процессах, которые тоже перезапускаются при обновлении, есть статья о воркерах. Про внутренний API есть страница о собственном API, про сервис на TypeScript кейс «Кофе вместе». Мой порядок установки патчей в обзоре о неделе патчей Node.js, Python и Next.js, версии чужих API в обзоре о датах отключения, локальный конвейер выпуска здесь. Выпуск Docker-приложения с возвратом версии я разбирал раньше. Направление: инфраструктура, которую можно выпускать и восстанавливать. Если у вас накопились обновления и непонятно, с чего начать, расскажите, что стоит на сервере. Обсудить задачу.