fix(deps/site-finder): 19 уязвимых пакетов во фронт-локе — пересборка без правки package.json #3210
No reviewers
Labels
No labels
Fable 5 ревью
GG-форсайт
admin
analytics
auth
automation
bug
business
chore
ci
compliance
data
data-moat
docs
duplicate
dx
enhancement
feedback/max
generative
needs-discussion
needs-human
observability
pause-bots
performance
priority/p0
priority/p1
priority/p2
priority/p3
scope/backend
scope/db
scope/devops
scope/frontend
scope/qa
scrapers
security
site-finder
stage/1
stage/2
status/blocked
status/done
status/needs-analysis
status/needs-fix
status/qa
status/ready
status/review
status/wip
tech-debt
tradein
ux
week ревью 1
wontfix
ИРД
вторичка
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference: lekss361/gendesign#3210
Loading…
Add table
Reference in a new issue
No description provided.
Delete branch "fix/deps-sitefinder-frontend-cve"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Лок не пересобирали с 3 июля (у «Меры» — 7 августа). Весь разрыв по уязвимостям между двумя фронтендами объясняется этим одним фактом.
package.jsonне тронут — все фиксы влезли в существующие каретки.Измерение
OSV batch API по локу до и после:
Главное: Next закрывается патчем, а не мажором
У
next@15.5.15висело 21 advisory, 10 из них HIGH — обходы middleware/proxy, SSRF в Server Actions и в rewrites, набор DoS. Максимальныйfixed_inсреди всех — 15.5.21, то есть все они закрываются внутри ветки 15.5.x.Переход на Next 16 для безопасности не нужен. Это отдельная миграция (тянет eslint-config-next 16 → eslint 10 → flat config), и здесь её нет.
Что поднялось
.mapпоsourceMappingURLДерево схлопнулось на 261 пакет
1010 → 749. Это следствие двухмесячной давности лока, а не косметика — поэтому приёмка шла через полный
npm ciс нуля, а не по диффу.Приёмка
npm ci --legacy-peer-depsс нуля — проходит (566 пакетов).npm run build— проходит, Next 15.5.24 + tailwind 4.3.3 + sentry 10.72 отдают все маршруты.npm run testлокально — 13 падений в 4 файлах, все видаTypeError: Cannot read properties of undefined (reading 'getItem')вsessionId.ts:8, то естьlocalStorageundefined при определённомwindow.Про эти 13: версии тестового стека в диффе не менялись — jsdom 25.0.1, vitest 2.1.9, vite 5.4.21, @testing-library/dom 10.4.1 остались теми же (менялся только
@testing-library/react16.3.2→16.3.3). Локально здесь node 26, jsdom 25 его старше; CI гоняет node 20. Считаю это локальным окружением, но гейт — CI, и еслиfrontend-testsпокраснеет, PR не мержится, а причина разбирается.Что осталось открытым (не чинится здесь)
postcss 8.4.31— Next вендорит его внутри своегоnode_modules, нашими средствами не поднять.vitest 2.1.9 → vite 5.4.21 → esbuild 0.21.5— dev-цепочка, требует мажора vitest. Отдельная задача (CRITICAL у vitest нам неприменим:@vitest/uiне установлен, скриптов с--uiнет).Заметка для тех, кто повторит локально
npm 12 по умолчанию режет remote-загрузки (
allow-remote=none) и спотыкается об опциональную@tailwindcss/oxide-wasm32-wasi. Обходится флагом--allow-remote=allна время команды. В CI npm 10 — там этого ограничения нет, в репозиторий ничего не добавлено.Лок не пересобирали с 3 июля (у «Меры» — 7 августа), и весь разрыв по уязвимостям между двумя фронтендами объясняется этим. Прогон OSV: было 19 уязвимых пакет-версий, стало 4. package.json не тронут — все фиксы влезли в существующие каретки. Главное — Next: у 15.5.15 висело 21 advisory, 10 из них HIGH (обходы middleware/ proxy, SSRF в Server Actions и rewrites, набор DoS). Максимальный fixed_in среди них — 15.5.21, то есть ВСЕ закрываются внутри ветки 15.5.x. Переход на 16 для безопасности не требуется, это отдельная миграция. next / eslint-config-next 15.5.15 -> 15.5.24 sharp 0.34.5 -> 0.35.4 унаследованные дыры libvips postcss 8.5.10 -> 8.5.26 чтение произвольного .map по sourceMappingURL nanoid 3.3.11 -> 3.3.18 js-yaml 4.1.1 -> 4.3.2 квадратичный CPU на merge-key form-data 4.0.5 -> 4.0.6 CRLF-инъекция brace-expansion ... -> 1.1.18 три DoS @babel/core 7.29.0 -> 7.29.7 @opentelemetry/core 2.7.1 -> 2.10.0 echarts 6.0.0 -> 6.1.0 @sentry/nextjs 10.53.1 -> 10.72.0 tailwindcss + postcss-плагин 4.2.4 -> 4.3.3 react / react-dom 19.2.5 -> 19.2.8 Дерево схлопнулось с 1010 до 749 пакетов — это следствие двухмесячной давности лока, а не косметика, поэтому приёмка шла через полный npm ci, а не по диффу. Остаются 4 и не чинятся здесь: postcss 8.4.31 Next вендорит ВНУТРИ своего node_modules, а vitest 2.1.9 -> vite -> esbuild требуют мажора vitest — отдельная задача. Проверено локально: npm ci с нуля и npm run build проходят, сборка Next 15.5.24 + tailwind 4.3.3 + sentry 10.72 отдаёт все маршруты. npm run test локально даёт 13 падений в 4 файлах (localStorage undefined при определённом window) — это jsdom 25 под здешним node 26; версии тестового стека в диффе НЕ менялись (jsdom 25.0.1, vitest 2.1.9, vite 5.4.21 те же), CI гоняет node 20 и он тут гейт. NB для тех, кто повторит локально: npm 12 по умолчанию режет remote-загрузки (allow-remote=none) и спотыкается об опциональную @tailwindcss/oxide-wasm32-wasi. Обходится флагом --allow-remote=all на время команды; в CI npm 10, там этого нет.