Audyt Jakości Specyfikacji v2: Browser-VPN SaaS

Data audytu: 2026-07-22

Dokument: docs/superpowers/specs/2026-07-22-browser-vpn-v2-design.md (296 linii, 13 sekcji)

Cel biznesowy: Poprawiona specyfikacja produktu Browser-VPN — hostowanego SaaS z anonimowym dostępem przez krypto-płatności, z wirtualną przeglądarką w kontenerze Docker.

Audyty bazowe: v1 (CEO, 6.3/10), v2 (s_1 MOA, 6/10), v3 (s_2 MOA, 6/10), v4 (s_3 MOA, 6.5/10)

Publikacja: https://10s.pl/v5-private-browser/


1. Wprowadzenie

Niniejszy raport stanowi piąty audyt jakości (v5) specyfikacji Browser-VPN SaaS. Ocenia dokument v2 — poprawioną wersję po 4 poprzednich audytach — pod kątem gotowości implementacyjnej. Poprzednie audyty wykazały szereg problemów krytycznych (P0), które v2 adresuje. Celem niniejszego raportu jest sprawdzenie, które problemy zostały faktycznie rozwiązane, które pozostały, oraz identyfikacja nowych zagrożeń.

Zakres audytu:


2. Podsumowanie wykonawcze i ocena ogólna

Specyfikacja v2 to znacząca poprawa względem v1. Większość krytycznych problemów P0 z v1 została rozwiązana: Caddy → Traefik, SYS_ADMIN → NET_ADMIN+SYS_PTRACE, localStorage → httpOnly cookie, dodano limity zasobów, timeouty, recovery, backup off-site. Dokument jest znacznie krótszy (296 vs 738 linii), bardziej konkretny i pozbawiony martwej wagi.

Mimo to, dokument nie osiąga deklarowanej oceny 8.5/10. Pozostają luki w szczegółach implementacyjnych (BTCPay integration, Selkies streaming, seccomp profile), brak SLO/SLA, brak kryteriów akceptacji, oraz niedospecyfikowany admin panel.

Scorecard — ocena wg wymiarów (skala 1-10)

WymiarOcenaKomentarz
Kompletność7.5/10Adresuje 11/13 problemów z v1, ale brak szczegółów BTCPay, Selkies, secrets management
Spójność8.5/10Wewnętrznie spójna — Traefik flow, httpOnly cookie, capabilities są zgodne z deklaracjami
Mierzalność7.0/10Limity, timeouty, capacity planning są konkretne. Brak SLO/SLA, brak kryteriów akceptacji
Wykonalność7.5/10Traefik, Docker, httpOnly cookie — dobrze znane technologie. BTCPay self-hosted + Selkies wymagają więcej detali
Bezpieczeństwo8.0/10Silna poprawa: SYS_ADMIN→NET_ADMIN, CSP, HSTS, TOTP, backup off-site. Brak: secrets management, scanning obrazów
Ocena ogólna7.7/10Blisko implementacji — wymaga 2-3 doprecyzowań przed dev

Werdykt: Approve with minor revisions — dokument zatwierdzić do implementacji, ale z obowiązkiem doprecyzowania 3 obszarów: (1) integracja BTCPay, (2) architektura Selkies-GStreamer, (3) secrets management.


3. Analiza szczegółowa wg 5 kryteriów

3.1 Kompletność (7.5/10)

Co jest pokryte:

Czego brakuje:

3.2 Spójność (8.5/10)

Mocne strony:

Drobne niespójności:

3.3 Mierzalność (7.0/10)

Co jest mierzalne:

Czego brakuje:

3.4 Wykonalność (7.5/10)

Technologie znane i sprawdzone:

Obszary ryzyka:

  • Selkies-GStreamer — streamowanie ekranu przeglądarki przez WebRTC/WebSocket to najbardziej złożony komponent. Brak informacji czy chodzi o Selkies-GStreamer (Jupyter/desktop streaming) czy KasmVNC / noVNC. W v1 był Novnc, w v2 jest Selkies. To wymaga doprecyzowania.
  • BTCPay self-hosted — wymaga osobnego serwera lub sub-domeny, certyfikatów SSL, konfiguracji Lightning. To nie jest trywialne, a specyfikacja nie określa tego jako osobny deployment.
  • Trocador API — w dniu audytu v1 root zwracał HTTP 503. Należy potwierdzić stabilność API przed implementacją.
  • 30 kontenerów × 2 GB RAM = 60 GB RAM + rezerwa na system, Traefik, backend, DB. Serwer 128 GB RAM od Hetznera (AX102) to ~€200/mies. — feasiblity potwierdzona, ale na granicy.
  • User namespace remapping--userns-remap=default może powodować problemy z mapowaniem UID/GID dla woluminów i permissions.

3.5 Bezpieczeństwo (8.0/10)

Silne strony:

  • SYS_ADMIN usunięte — największa poprawa. Kontener nie ma dostępu do mount, namespace, cgroups hosta
  • no-new-privileges — blokada eskalacji przez setuid binaries
  • seccomp — filtrowanie syscalli (wzmiankowane, ale brak konkretnego profilu)
  • userns-remap — root w kontenerze ≠ root na hoście
  • httpOnly cookie + Secure + SameSite=Strict — XSS nie może ukraść tokena
  • Fingerprint serwerowy — User-Agent + IP hash jako dodatkowa weryfikacja
  • CSP — restrykcyjna polityka (default-src 'self', connect-src ws: wss:)
  • HSTS — max-age=31536000, includeSubDomains, preload
  • Rate limiting — 5 req/h z burst 10 (ale może być za niskie)
  • TOTP obowiązkowe dla admina
  • Admin IP allowlist — ograniczenie dostępu do panelu
  • Backup off-site encrypted — GPG/age przed wysyłką, klucz poza serwerem

Słabe strony / luki:

  • Secrets management — brak specyfikacji: gdzie przechowywane są klucze API Trocador, BTCPay, secret key dla JWT/cookie, TOTP secrets, klucz GPG? Hashicorp Vault? Docker secrets? .env na dysku?
  • Container image scanning — brak wzmianki o skanowaniu obrazów (Chrome/Brave/Firefox) pod kątem podatności. Obrazy linuxserver.io są aktualizowane, ale nie ma procesu weryfikacji.
  • Audit logging admina — logowanie prób logowania jest, ale brak logowania akcji (kto i kiedy stopował kontener, anulował zamówienie)
  • DDoS protection — rate limiting na poziomie Traefik, ale brak warstwy WAF lub Cloudflare (świadomie wykluczone w v1, ale warte rozważenia)
  • Supply chain attack — Docker images z Docker Hub bez weryfikacji podpisów (Cosign, Notary)
  • Database encryption at rest — brak specyfikacji szyfrowania bazy danych (SQLite/PostgreSQL?)

4. Lista problemów

KRYTYCZNY (blokuje implementację)

#ProblemStatus w v1
K1Brak szczegółów integracji BTCPay Server — webhook handling, invoice creation, refund flow, konfiguracja failover timeou (2 min tylko wzmiankowane). Bez tego nie da się zaimplementować płatności.Nowy (v1 nie miał BTCPay)
K2Selkies-GStreamer niedospecyfikowany — brak informacji jak streamowanie jest konfigurowane w kontenerze, jakie protokoły (WebRTC/WebSocket/NO VNC), porty, zależności, obraz. W v1 był Novnc, w v2 Selkies — bez doprecyzowania implementacja jest niemożliwa.Nowy (zmiana z Novnc)

WAŻNY (istotne ryzyko)

#ProblemStatus w v1
W1Brak SLO/SLA — uptime, czas startu kontenera, response time API. Bez tego nie można określić czy produkt działa poprawnie.Pozostał z v1
W2Brak kryteriów akceptacji — żaden przepływ nie ma zdefiniowanych warunków przejścia testów.Pozostał z v1
W3Secrets management — brak specyfikacji przechowywania kluczy API, haseł, TOTP secrets, klucza GPG.Nowy
W4Admin panel wciąż niedospecyfikowany — jakie akcje admin może wykonać? Dashboard, orders, containers, VPN configs, tickets, settings, sales reports — lista jest, ale brak konkretnych endpointów i uprawnień.Pozostał z v1 (częściowo adresowany)
W5Rate limiting 5 req/h może być zbyt restrykcyjne — normalny użytkownik wybierający browser, region, plan, klikający pay wygeneruje kilka requestów. Ryzyko fałszywych blokad.Nowy
W6Brak skanowania obrazów kontenerów — Chrome/Brave/Firefox mają znane podatności. Obrazy linuxserver.io są bezpieczne, ale nie ma procesu weryfikacji.Nowy
W7Brak deployment/CI/CD spec — jak buildować, testować i deployować? Nadaje się do implementacji, ale bez procesu CI/CD ryzyko regresji.Pozostał z v1

KOSMETYCZNY (drobne poprawki)

#ProblemStatus w v1
C1Brak diagramu ERD — relacje między tabelami orders, sessions, tickets, vpn_configs.Pozostał z v1
C2Brak specyfikacji monitoringu/alerting — jakie metryki, progi, dashboardy, kanały alertów (Telegram tylko wzmiankowany).Pozostał z v1
C3Brak profilu seccomp — wzmiankowany custom.json, ale nie dołączony ani nie opisany.Nowy
C4Brak polityki wersjonowania API — URL /api/v1/ sugeruje wersjonowanie, ale brak zasad (deprecation, backward compatibility).Nowy
C5Brak specyfikacji częstości backupu off-site — "codziennie" dla lokalnego, ale off-site?Nowy
C6Brak informacji o bazie danych — SQLite czy PostgreSQL? Backup bazy danych? Migracje?Pozostał z v1

5. Porównanie: v1 vs v2 — mapa problemów

Problemy rozwiązane (v1 → v2)

Problem v1Rozwiązanie w v2Ocena
P0-1: Trocador SPoF (503, brak failover)Trocador + BTCPay dual provider z automatycznym failover✅ W pełni rozwiązany
P0-2: Caddy WebSocket (brak dynamicznego resolve)Traefik z Docker provider, WebSocket wspierany natywnie✅ W pełni rozwiązany
P0-3: SYS_ADMIN (zbyt szeroka capability)NET_ADMIN + SYS_PTRACE, no-new-privileges, seccomp, userns-remap✅ W pełni rozwiązany
P0-4: localStorage + XSS (deviceToken dostępny przez JS)Tylko httpOnly cookie, fingerprint serwerowy✅ W pełni rozwiązany
P0-5: Brak limitów zasobów (wyciek pamięci = 50 sesji)memory 2g, cpu 1.0, pids 200, reservations✅ W pełni rozwiązany
W2: Brak timeoutu płatności pendingScheduler co 1 min, timeout 30 min, kolumna payment_timeout_at✅ W pełni rozwiązany
W3: Brak recovery device bindingOrder number + 6-cyfrowy PIN (bcrypt, max 3 próby)✅ W pełni rozwiązany
W4: Niejednoznaczny 1h bufferJasny opis: 1h na pierwszy dostęp, potem zegar, idle timeout 30 min✅ W pełni rozwiązany
C8: Brak statusu underpaidNowy status underpaid, alert, user widzi info✅ W pełni rozwiązany

Problemy pozostałe (v1 → v2 nadal nierozwiązane)

Problem v1Status w v2Uwaga
W7: Brak kryteriów akceptacji❌ Nadal brakW2 w nowym raporcie
Brak SLO/SLA❌ Nadal brakW1 w nowym raporcie
Admin panel niedospecyfikowany⚠️ Częściowo — lista działań jest, ale brak endpointówW4 w nowym raporcie
Brak diagramu ERD❌ Nadal brakC1
Brak deployment/CI/CD❌ Nadal brakW7
Brak specyfikacji bazy danych❌ Nadal brakC6
Brak monitoringu/alerting❌ Nadal brakC2

Nowe problemy (v2)

ProblemKategoriaUwaga
Brak szczegółów integracji BTCPayKRYTYCZNYNowy komponent
Selkies-GStreamer niedospecyfikowanyKRYTYCZNYZmiana z Novnc
Secrets managementWAŻNYNowa konieczność
Rate limiting może być za niskieWAŻNYNowa konfiguracja
Brak skanowania obrazówWAŻNYNowa praktyka security
Brak profilu seccompKOSMETYCZNYNowy wymóg
Brak wersjonowania APIKOSMETYCZNYNowy wzór
Częstość backupu off-siteKOSMETYCZNYNowy proces

6. Glosariusz

TerminDefinicja
BTCPay ServerSelf-hostowany procesor płatności kryptowalut (BTC/Lightning, altcoiny przez pluginy)
CaddyWeb server i reverse proxy w Go z automatycznym HTTPS
Capabilities (Linux)Podział uprawnień roota na niezależne jednostki (np. NET_ADMIN, SYS_ADMIN)
CSP (Content Security Policy)Nagłówek HTTP ograniczający źródła zasobów (skrypty, style, obrazy)
Docker providerMechanizm Traefik do automatycznego wykrywania routingu z labeli Docker
Fingerprint serwerowyHash User-Agent + IP klienta jako dodatkowa weryfikacja tożsamości
GPG/ageNarzędzia do szyfrowania plików (GNU Privacy Guard / age)
HSTSHTTP Strict-Transport-Security — wymusza HTTPS dla wszystkich połączeń
httpOnly cookieCiasteczko niedostępne z JavaScript (ochrona przed XSS)
Idle timeoutAutomatyczne zatrzymanie kontenera po okresie braku aktywności
NET_ADMINLinux capability — zarządzanie siecią (WireGuard, iptables)
no-new-privilegesSecurity option Docker — blokada eskalacji uprawnień
OpenAPIStandard specyfikacji REST API
SeccompLinux security module — filtrowanie syscalli
Selkies-GStreamerFramework do streamowania desktopu/ekranu przez WebRTC
SPoFSingle Point of Failure — pojedynczy punkt awarii
SYS_ADMINLinux capability — szeroki zestaw uprawnień administracyjnych
SYS_PTRACELinux capability — debugowanie procesów (trace, ptrace wymagany przez GStreamer)
TOTPTime-based One-Time Password — dwuskładnikowe uwierzytelnianie
TraefikReverse proxy i load balancer z automatycznym HTTPS i Docker provider
Trocador AnonPayAggregator krypto-płatności wspierający Monero
userns-remapUser namespace remapping — root w kontenerze mapowany na nieuprzywilejowanego użytkownika hosta
WireGuardLekki, nowoczesny protokół VPN w jądrze Linux

7. Źródła

Pliki źródłowe

  • Specyfikacja v2: /root/browser-vpn-deploy/docs/superpowers/specs/2026-07-22-browser-vpn-v2-design.md (296 linii)
  • Specyfikacja v1: /root/browser-vpn-deploy/docs/superpowers/specs/2026-07-22-browser-vpn-product-design.md (738 linii, 15 sekcji)
  • Raport v1 (CEO): /root/convertere/reports/v1-private-browser.md (338 linii, 6.3/10)
  • Raport v2 (s_1): /root/convertere/reports/v2-private-browser.md (96 linii, 6/10)
  • Raport bieżący (v5): /root/convertere/reports/v5-private-browser.md

Linki zewnętrzne

  • Traefik Docker provider: https://doc.traefik.io/traefik/providers/docker/
  • BTCPay Server: https://btcpayserver.org/
  • Trocador AnonPay: https://trocador.app/
  • Selkies-GStreamer: https://github.com/selkies-project/selkies-gstreamer
  • Linux capabilities: https://docs.docker.com/engine/security/security/#linux-kernel-capabilities
  • Seccomp Docker: https://docs.docker.com/engine/security/seccomp/
  • User namespace remap: https://docs.docker.com/engine/security/userns-remap/
  • CSP Reference: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy
  • HSTS: https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Strict-Transport-Security
  • WireGuard: https://www.wireguard.com/

8. Rekomendacje

Przed implementacją (obowiązkowe)

  1. Doprecyzuj integrację BTCPay — opisz webhook handling, tworzenie invoice, failover flow, obsługę refundów, jakie kryptowaluty są wspierane
  2. Doprecyzuj Selkies streaming — określ konkretny obraz, porty, protokoły (WebRTC/WebSocket), konfigurację, zależności
  3. Dodaj secrets management — opisz gdzie i jak przechowywane są klucze API, hasła, TOTP secrets, klucz GPG (Docker secrets, .env, Vault)

W pierwszym sprincie (zalecane)

  1. Dodaj kryteria akceptacji dla każdego przepływu (zakup, aktywacja, sesja, wygaśnięcie, support, backup)
  2. Zdefiniuj SLO — uptime 99.5%+, czas startu kontenera <60s, response time API <200ms
  3. Dodaj profil seccomp dla kontenera przeglądarki
  4. Określ częstotliwość backupu off-site — codziennie, co godzinę, co 6h?
  5. Dodaj skanowanie obrazów — Trivy, Grype, Docker Scout

Drugi sprint (nice-to-have)

  1. Diagram ERD
  2. Polityka wersjonowania API
  3. Specyfikacja monitoringu (Prometheus/Grafana?)
  4. CI/CD pipeline (GitHub Actions / GitLab CI)

Koniec raportu v5. 2026-07-22.