Node.js Digest #28: axios supply chain, Temporal, Node.js bug bounty, npm security, OWASP

Привіт, спільното! Олександр Зіневич та команда Avenga підготували для вас Node.js дайджест за квітень — місяць, який запам’ятається одним із найсерйозніших інцидентів у ланцюжку постачання, які коли-небудь бачила екосистема npm.

Короткі новини

👉 PR, що вмикає Temporal за замовчуванням у Node.js 26, апрувнули — він автоматично виявляє Rust/Cargo під час збірки та непомітно вимикає Temporal на машинах без нього, щоб не зламатиіснуючі CI-пайплайни. Розробники хочуть щоб Temporal був доступний в офіційних бінарниках Node.js 26.

👉 GitHub анонсував нативні Stacked PRs за допомогою розширення CLI gh stack — першокласний спосіб розбити великі зміни на невеликі шматочки, які легко перевіряти та мерджити в один клік. Наразі доступно в приватному прев’ю.

👉 Azure SDK для JavaScript припиняє підтримку Node.js 20.x 9 липня 2026 року — життєвий цикл Node 20 закінчується 30 квітня, тому якщо ви все ще використовуєте цю версію, вікно для оновлення до 22.x закривається.

👉 Програму винагород за пошук вразливостей (bug bounty) Node.js призупинено після того, як її зовнішній спонсор — Internet Bug Bounty — закрився. Звіти про вразливості через HackerOne все ще приймаються, але грошових винагород поки що немає.

Найбільша атака року

Атака на ланцюжок постачання через npm-пакет axios стала найгучнішою подією року у сфері безпеки: дві шкідливі версії axios були активними протягом ~3 годин і завантажували кросплатформний троян віддаленого доступу (RAT) через хук postinstall. Обліковий запис мейнтейнера був скомпрометований за допомогою складної кампанії соціальної інженерії — фейкова компанія, реальний робочий простір у Slack, дзвінок у Teams, встановлення програмного забезпечення — і бум, зараження. Більше деталей читайте тут.

Щось почитати

Шпаргалка з безпеки OWASP NPM Security Cheat Sheet оновилася двома новими розділами: slopsquatting (зловмисники публікують пакети з іменами, згенерованими ШІ-галюцинаціями) та публікація через OIDC (короткострокові токени, обмежені робочим процесом). Інші 10 пунктів — застосування локфайлів, —ignore-scripts, захист від dependency confusion, генерація SBOM — є завжди актуальними, і їх варто переглянути після інциденту з axios.

Encore опублікували статтю про створення рантайму на Rust для TypeScript: весь життєвий цикл HTTP, пулінг баз даних, pub/sub, трейсинг та вбудований API-шлюз Pingora працюють у тому ж процесі, що й Node.js, через NAPI.

Стаття про створення списку перегляду фільмів — це добре структурований посібник, що охоплює денормалізацію схеми бази даних, управління коннекшинами за патерном singleton із graceful shutdown, повнотекстовий пошук за допомогою $search у MongoDB та патерни soft-delete.

Легкий вступ до npm workspaces пояснює не лише як їх налаштувати, але й чому вони працюють.

Jank Busters Part Two: Orinoco — це стаття про V8 2016 року, яку варто переглянути зараз, коли Temporal затягує Rust у ланцюжок збірки (build toolchain) Node.js.

AWS Lambda «Kiss of Death» — це звіт про інцидент з InnoDB, коли пул з’єднань Lambda спричинив стрибок innodb_history_list_length до мільйонів, undo-логи розрослися до 80 ГБ, і запис завис. Першопричина: рівень ізоляції REPEATABLE READ означає, що view для читання живе протягом усього часу з’єднання — а з’єднання в пулі простоюють хвилинами. Рішення — SET SESSION transaction_isolation=READ-COMMITTED для користувача Lambda, щоб view для читання релізались після кожного запиту (statement), а не транзакції.

Ви не можете скасувати JavaScript-проміс (але іноді можете) — Promise, який ніколи не різолвиться, виявляється непоганим інструментом керування потоком для serverless рантаймів. Завислий Promise просто зупиняє асинхронну функцію, а оскільки event loop Node.js не тримає незарізолваних промісів, збирач сміття (GC) очищає все. Цікаве та елегантне рішення J

Що потрібно знати в JavaScript (Видання 2026) — це широкоформатний огляд JS екосистеми: фічі ES2025, основні моменти ES2026, оновлення рантаймів, зміни в інструментах збірки та TypeScript 6, який готує підґрунтя для компілятора на базі Go у v7.

Публікація на Reddit сповістила, що npm-пакет openmatrix використовував свій хук postinstall для запису файлів скіллів Claude Code у ~/.claude/commands/ — з позначкою always_load: true, priority: critical — включно з тим, який автоматично схвалює всі bash-операції та операції з файлами. Традиційні атаки через postinstall виконуються один раз; ця зберігається під час кожної майбутньої сесії програмування з ШІ. npm uninstall не видаляє ці файли.

Trigger.dev замінили Node.js на Bun і отримали замість 2,099 req/s до ~10,700 req/s за чотири раунди оптимізації: заміна перевантаженого SQL-запиту, перехід на Bun.serve(), видалення Zod з внутрішніх шляхів та компіляція в єдиний бінарник. Вони також знайшли специфічний для Bun витік пам’яті — кожен Promise<Response> в обробнику fetch у Bun повинен завершитися, інакше буде протікання пам’яті, на відміну від Node.js, де закриття сокета запускає очищення в будь-якому випадку. Bun випустили фікс через три дні.

Дослідник безпеки за допомогою Claude Code, що аналізував C++ кодову базу Node.js знайшов безпековий баг.

Практичний посібник зі створення крихітного середовища виконання JavaScript на базі QuickJS детально показує підключення console.log, process.uptime(), setTimeout і асинхронного fs.readFile допулу потоків worker-ів та event loop на базі select() — усе це мовою C.

Що подивитися

У серії «Beyond Node.js» від NodeSource поговорили з Улісесом Гальєгосом — делегатом TC39 та мейнтейнером Node.js, Express, Lodash і Yeoman — про те, що насправді ламається у продакшн-застосунках на Node.js:

Джон Хаммонд записав швидкий розбір атаки на ланцюжок постачання axios:

Хочете покращити свої знання про кешування? Ось нове відео на каналі Software Developer Diaries:

Метт Покок, один із найбільших фанатів Typescript, тепер переключився на ШІ, і ось його відео з AI Engineer Europe:

Оновлення / Релізи

Ще трохи цікавого

puru — це бібліотека пулу потоків (thread pool) без залежностей для Node.js та Bun, яка привносить у JavaScript примітиви паралелізму в стилі Go. Обмеження, про яке варто знати: функції, передані в spawn(), серіалізуються як текст, тому замикання на зовнішні змінні не зберігаються.

Windows 95 в Electron: так, повноцінна ОС. Повністю робоча Windows 95, що працює всередині Electron за допомогою емулятора ПК v86. Працює на macOS, Linux та Windows. Є кілька попередньо встановлених ігор. Автор просить «скоригувати свої очікування», враховуючи, що це написано повністю на JavaScript, що виглядає розумно.

Cloudflare запустив EmDash, serverless CMS на TypeScript, яку вони позиціонують як духовного спадкоємця WordPress. Побудована на Astro 6.0 та розроблена за два місяці за допомогою ШІ-агентів.

Google анонсував нову політику щодо спаму, спрямовану проти «перехоплення кнопки назад» (back button hijacking), яка набуває чинності 15 червня 2026 року. Якщо ваш сайт перехоплює кнопку"назад", щоб відправити користувачів туди, звідки вони не приходили — зокрема через сторонні рекламні скрипти або вбудовані бібліотеки — тепер до нього можуть застосовуватися санкції та зниження в рейтингу.

Щоб бути в курсі мемів:

Підписуйтеся на Telegram-канал «DOU #tech», щоб не пропустити нові технічні статті

👍ПодобаєтьсяСподобалось0
До обраногоВ обраному0
LinkedIn
Ctrl + Enter
Ctrl + Enter

Підписатись на коментарі