From 2c5430326d12cf184845454a49a1731d0b3631a5 Mon Sep 17 00:00:00 2001 From: "s.zotov" Date: Sun, 12 Apr 2026 20:26:06 +0000 Subject: [PATCH] Add "Security" --- Security.md | 41 +++++++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 Security.md diff --git a/Security.md b/Security.md new file mode 100644 index 0000000..a194ef2 --- /dev/null +++ b/Security.md @@ -0,0 +1,41 @@ +# Безопасность + +## Аудит — апрель 2026 + +### Исправленные уязвимости + +#### 1. Pug Template Injection (CRITICAL → FIXED) +Пользовательский текст `#{process.cwd()}` выполнялся на сервере при Pug-рендере. +**Фикс:** Экранирование `#{` и `!{` в пользовательском pug перед записью. + +#### 2. XSS через iframe превью (HIGH → FIXED) +`` в HTML письма выполнялся в iframe. +**Фикс:** `sandbox="allow-same-origin"` на iframe. Click detection без инъекции скриптов. + +#### 3. FTP Path Traversal (HIGH → FIXED) +`folder: "../../"` позволял доступ к любой директории FTP-сервера. +**Фикс:** Валидация `folder` — запрет `..` и абсолютных путей. + +#### 4. Незащищённые настройки (HIGH → FIXED) +Любой юзер мог менять FTP-креды, feedUrl, Yonote-токен. +**Фикс:** Проверка `role === 'admin'` на PUT settings и PUT config. + +#### 5. SSRF (MEDIUM → FIXED) +`isPublicUrl()` пропускал IPv6, hex IP, `0.0.0.0`. +**Фикс:** Расширенная валидация URL. + +#### 6. Render DoS (MEDIUM → FIXED) +Неограниченные параллельные рендеры. +**Фикс:** `MAX_CONCURRENT_RENDERS = 3`, `try/finally`. + +#### 7. Info Disclosure (LOW → FIXED) +Stderr от рендера возвращался юзеру. +**Фикс:** Статическое сообщение об ошибке. + +### Nginx +Блокировка сканеров: `.env`, `.git`, `.php`, `passwd`, `wp-admin` и т.п. → return 444. + +### Рекомендации +- Регулярные бэкапы `data/` +- Обновление Node.js зависимостей +- Мониторинг uptime