wa-dev-tools/docs/sessions/2026-07-24-2348.md

5.7 KiB
Raw Permalink Blame History

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 — переписан: IPv6/mapped, A+AAAA, fail-closed, CGNAT
  • lib/ws.js — авторизация на upgrade + maxPayload + owner-check при subscribe
  • lib/queue.js — user_id в jobs + миграция ALTER TABLE + reaper зависших processing
  • lib/session.js — fail-fast без SESSION_SECRET/DB_PASSWORD
  • lib/admin.js — admin-гейт сужен до /frontend/-ассетов
  • lib/logger.js — ротация лога 5MB
  • routes/compress.js — admin без лимитов; archiver .on('error'); SVG убран из sharp
  • routes/parser.js — ревалидация редиректов; потоковое чтение 2MB; санитайз javascript:/data:
  • routes/httpclient.js — ревалидация каждого редиректа
  • routes/redirects.js — ревалидация каждого хопа
  • routes/pdf.js — archiver .on('error'); dpi clamp 36-300; rate-limit на весь роутер
  • routes/svgeditor.js — safeColor() (XSS)
  • routes/video.js — rate-limit /convert; owner-check в /convert и /progress
  • routes/auth.js — session fixation в register; dummy-hash против timing
  • routes/api.js — publicLimiter; скрыты сырые ошибки БД
  • server.js — error-handler ПОСЛЕ AdminJS; /health публично только {status:ok}
  • 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