TGViewer
Четыре луча Четыре луча @four_rays · 4.02K subscribers
Post #85 6.73K
Ошибки конфигурирования API to SSTI to RCE на примере @fastify/view в node.js

@fastify/view — плагин для Fastify, который позволяет использовать шаблонизаторы (view engines) для генерации HTML-страниц на сервере.

Ранее в модуле @fastify/view для Node.js была зарегистрирована потенциальная уязвимость под идентификатором CVE-2025-47240. Однако после детального анализа выяснилось, что описанное поведение связано с неправильным использованием API со стороны разработчиков, а не с уязвимостью в самом программном обеспечении. В результате идентификатор CVE-2025-47240 был официально отозван.

Тем не менее некоторые эксплойты, опубликованные в открытом доступе, продолжают ссылаться на этот идентификатор — это может вводить в заблуждение.

CVE-2025-47240 Плагин @fastify/view, который используется с движком EJS и шаблоном reply.view({ raw: <user-controlled-string> }) , позволяет выполнять произвольные EJS. Это приводит к удаленному выполнению кода (RCE).

Детали неправильной конфигурации API
Ключевой ошибкой является небезопасное использование метода reply.view() из Fastify-плагина @fastify/view.

Рассмотрим следующий фрагмент уязвимого кода:

fastify.post('/render', (req, reply) => {
const template = req.body.text;
return reply.view({ raw: template }, { require }, { async: false });
});

🫡 Сервер принимает POST-запрос на эндпоинт /render.
🫡 const template получает шаблон из тела сообщения без фильтрации
🫡 reply.view используется для рендеринга шаблона с помощью движка EJS
🫡 { raw: template } интерпретирует пользовательский ввод как шаблон
🫡 { require } передаёт в шаблон функцию require, давая полный доступ к Node.js API
🫡{ async: false } асинхронный рендеринг

Эксплуатация
Для успешной эксплуатации этой конфигурационной уязвимости достаточно отправить POST-запрос с произвольным телом, содержащим следующий шаблон EJS:
<%= (this.constructor.constructor('return process.mainModule.require')())('child_process').execSync('ls'); %>

Этот код позволяет пользователю выполнять произвольный JavaScript-код на сервере. В нашем случае результатом выполнения кода станет вывод команды ls. Это классическая Server-Side Template Injection (SSTI), перерастающая в Remote Code Execution (RCE). Js-код внутри шаблона может быть любым❗️

Как защищаться
1️⃣ Никогда не используйте raw с пользовательским вводом
2️⃣ Используйте уже готовые шаблоны
3️⃣ Для детектирования попыток сканирования на эндпоинтах, использующих данную библиотеку, установите правило на обнаружение внедрения шаблона через подобное регулярное выражение ^<%.+%>$
  • 👍 13
  • 🔥 11
  • 🤓 3
  • ❤ 2
  • 👎 1
  • 👾 1
More from @four_rays
  1. Sep 23, 2026💣 Click2Shell Click2Shell — это цепочка уязвимостей в WordPress, которая может привести к…
  2. Sep 14, 2026💣 Ржавый код: почему все переходят на Rust и когда аналитику можно его не реверсить Rust…
  3. Sep 11, 2026😳 DFIR diggin’ deeper: неочевидные источники артефактов при расследовании атак Когда стан…
  4. Sep 7, 2026😀 Call for Papers на технострим SOC Forum 2026 еще открыт! Темы: 1️⃣ Offense: актуальные…
  5. Aug 31, 2026☀️ Zimbra, все еще скрывающая боль Ранее мы уже рассказывали о расследовании «Zimbra, скры…
  6. Aug 19, 2026💡 Разберемся с непопулярными артефактами на OffZone 2026 Выбираете, какие выступления пос…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →