docs: session handoff 2026-07-24 23:48 (security audit)

This commit is contained in:
treamz 2026-07-24 23:49:09 +03:00
parent 626a28f750
commit a3fb5a2dcc
2 changed files with 53 additions and 0 deletions

View File

@ -4,4 +4,5 @@
с итогами, решениями, открытыми вопросами и инструкцией «как продолжить». Ведётся скиллом с итогами, решениями, открытыми вопросами и инструкцией «как продолжить». Ведётся скиллом
`/session-handoff`. `/session-handoff`.
- [2026-07-24 23:48 — Аудит безопасности (19 фиксов) + снятие лимитов /compress, деплой на VPS](sessions/2026-07-24-2348.md)
- [2026-07-24 17:43 — Локальная копия, снятие лимитов /compress, скилл деплоя под VPS](sessions/2026-07-24-1743.md) - [2026-07-24 17:43 — Локальная копия, снятие лимитов /compress, скилл деплоя под VPS](sessions/2026-07-24-1743.md)

View File

@ -0,0 +1,52 @@
# 2026-07-24 23:48 — Аудит безопасности + снятие лимитов /compress, деплой на VPS
**Сделано:**
- **Снят лимит в `/compress` для админа** (без лимита размера/количества/rate-limit) — задеплоено на прод, работает.
- **Security-аудит всего сервиса** (4 code-reviewer агента): 6 CRITICAL, 9 HIGH, ~15 MEDIUM, 8 LOW + 36 npm-уязвимостей.
- **Исправлено и задеплоено на VPS 19 находок** (пакет 1 + пакет 2), проверено функционально.
- **Зафиксировано в git:** VPS локальный commit `18c9fd7` (снапшот прода), локаль + Gitea commit `626a28f`.
- Бэкапы всех правок на VPS: `*.bak-audit20260724` (пакет 1) и `*.bak-audit20260724b` (пакет 2), плюс `*.bak-20260724` (compress).
**Изменённые / созданные файлы (все на VPS-версиях, синхронизированы в локаль):**
- [lib/ssrf.js](../../lib/ssrf.js) — переписан: IPv6/mapped, A+AAAA, fail-closed, CGNAT
- [lib/ws.js](../../lib/ws.js) — авторизация на upgrade + maxPayload + owner-check при subscribe
- [lib/queue.js](../../lib/queue.js) — `user_id` в jobs + миграция ALTER TABLE + reaper зависших `processing`
- [lib/session.js](../../lib/session.js) — fail-fast без SESSION_SECRET/DB_PASSWORD
- [lib/admin.js](../../lib/admin.js) — admin-гейт сужен до `/frontend/`-ассетов
- [lib/logger.js](../../lib/logger.js) — ротация лога 5MB
- [routes/compress.js](../../routes/compress.js) — admin без лимитов; archiver `.on('error')`; SVG убран из sharp
- [routes/parser.js](../../routes/parser.js) — ревалидация редиректов; потоковое чтение 2MB; санитайз `javascript:`/`data:`
- [routes/httpclient.js](../../routes/httpclient.js) — ревалидация каждого редиректа
- [routes/redirects.js](../../routes/redirects.js) — ревалидация каждого хопа
- [routes/pdf.js](../../routes/pdf.js) — archiver `.on('error')`; dpi clamp 36-300; rate-limit на весь роутер
- [routes/svgeditor.js](../../routes/svgeditor.js) — `safeColor()` (XSS)
- [routes/video.js](../../routes/video.js) — rate-limit `/convert`; owner-check в `/convert` и `/progress`
- [routes/auth.js](../../routes/auth.js) — session fixation в register; dummy-hash против timing
- [routes/api.js](../../routes/api.js) — publicLimiter; скрыты сырые ошибки БД
- [server.js](../../server.js) — error-handler ПОСЛЕ AdminJS; `/health` публично только `{status:ok}`
- [public/compress.html](../../public/compress.html) — admin-детект (`/auth/me`), снятие клиентской отсечки
**Решения:**
- **Прод = VPS 195.140.146.84** (Docker-контейнер `wadevelop`), rpi4 — двойник. Деплой SFTP + `docker restart wadevelop` (см. скилл `/deploy-wadevelop`).
- Правки делались от **актуальных VPS-версий** файлов (скачаны в scratchpad), т.к. локаль/rpi4 расходятся с VPS.
- **CSP `unsafe-inline` НЕ трогали** — переход на nonce требует правки всех 21 HTML, риск сломать фронт непропорционален выигрышу.
- **DNS-rebinding pinning (HIGH-14) отложен** — нужен кастомный fetch-agent; сейчас закрыт fail-closed + ревалидацией.
- npm-зависимости не обновляли — отдельная задача с риском ломающих изменений.
**Открытые вопросы / следующие шаги:**
- [ ] **Проверить вручную под залогиненной сессией:** video-конвертация (прогресс через WS + owner-check не сломал легитимный поток).
- [ ] Полный DNS-rebinding pinning (HIGH-14) — кастомный fetch-agent/`request-filtering-agent`.
- [ ] Утечки `err.message` в pdf.js (~13 мест) → generic + лог.
- [ ] Обновить уязвимые npm-зависимости (sharp/ws/undici, 36 шт.) с прогоном.
- [ ] LOW: plaintext-пароль в payload admin.js new-action; prompt injection в api.js regex; утечка таймера в api.js.
- [ ] Свести две расходящиеся копии (VPS-прод vs rpi4-двойник) в один git; решить судьбу rpi4.
**Как продолжить (для чистой сессии):**
- Контекст: память `project-wa-dev-tools.md`, `server-195-140-146-84.md`. **Прод = VPS 195.140.146.84 / контейнер `wadevelop` / `/opt/sites/www/wadevelop.ru/`.** rpi4 — двойник, НЕ деплоить.
- Деплой: скилл `/deploy-wadevelop` (SFTP + `docker restart wadevelop`). SSH: `python3 C:/Users/tream/.claude/ssh_cmd.py root@195.140.146.84 "<cmd>"`.
- Проверка прода: `curl -s -o /dev/null -w "%{http_code}\n" https://wadevelop.ru/` (200); `docker logs wadevelop --tail 10`.
- Откат правок: бэкапы `*.bak-audit20260724*` в `/opt/sites/www/wadevelop.ru/` или `git reset` на VPS (снапшот `18c9fd7`).
**Ссылки:**
- Прод: https://wadevelop.ru — VPS 195.140.146.84 (FirstVDS, treamz.fvds.ru), контейнер `wadevelop`
- Git: Gitea rpi4:3002 `treamz/wa-dev-tools`, локаль на коммите `626a28f`; VPS-снапшот `18c9fd7`