Add "Security"
41
Security.md
Normal file
41
Security.md
Normal file
@@ -0,0 +1,41 @@
|
|||||||
|
# Безопасность
|
||||||
|
|
||||||
|
## Аудит — апрель 2026
|
||||||
|
|
||||||
|
### Исправленные уязвимости
|
||||||
|
|
||||||
|
#### 1. Pug Template Injection (CRITICAL → FIXED)
|
||||||
|
Пользовательский текст `#{process.cwd()}` выполнялся на сервере при Pug-рендере.
|
||||||
|
**Фикс:** Экранирование `#{` и `!{` в пользовательском pug перед записью.
|
||||||
|
|
||||||
|
#### 2. XSS через iframe превью (HIGH → FIXED)
|
||||||
|
`<script>alert('XSS')</script>` в 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
|
||||||
Reference in New Issue
Block a user