Bezpečnost

BriefGate chce po vašich klientech loga, texty — a hesla. To poslední mění, co tenhle produkt je: služba, která sbírá přístupové údaje, je infrastruktura, a infrastruktura musí jasně říct, před čím vás chrání a před čím ne.

Všechno níž popisuje systém tak, jak je dnes postavený. Kde ochrana neexistuje, tahle stránka to říká, místo aby to vynechala.

Čím BriefGate není

Není zero-knowledge. Hodnota typu secret se šifruje sealed boxem z libsodium ve chvíli, kdy dorazí, a privátní polovina toho klíčového páru žije v prostředí serveru, ne v databázi. Ukradený dump databáze tedy vydá jen šifrovaný text. Ale server, který hodnotu přijímá, ji přečíst umí — jinak by ji nemohl předat vašemu agentovi — takže útočník, který ovládne běžící proces, si heslo za letu přečte. Kdo tvrdí opak a přitom drží klíč, slibuje něco, co nemůže splnit.

Nemá žádnou certifikaci. Není tu ISO 27001, není SOC 2 a neproběhl externí penetrační test. BriefGate provozuje jeden člověk. Uvádíme to proto, že bezpečnostní posouzení má stát na tom, co existuje.

Hesla a přístupy od klientů

Položka typu secret je jediný typ pole, který má vlastní zacházení od začátku do konce.

Co tím získáte: klient může poslat heslo do WordPressu vašemu agentovi, aniž by zůstalo ležet ve schránce, v chatu nebo v tiketu podpory.

Přihlašování a session

Hesla k účtu argon2id
API klíče, portálové tokeny 256 bitů náhody, uložené jako otisk SHA-256; otevřená podoba se ukáže jednou při vytvoření
Dvoufaktor TOTP, volitelně, pro každého uživatele
Přístup klienta do portálu magic link (jeden stálý odkaz na sběr podkladů, token uložený jako hash, platnost portal_link_ttl_days — výchozí 30 dní — od posledního odeslání) vyměněný za session cookie omezenou na jeden konkrétní sběr podkladů
Platnost portálové session 14 dní
Přihlášení a registrace 10 pokusů za hodinu z jedné IP adresy

API klíče se schválně hashují SHA-256 a ne argon2id. Klíč je 256 náhodných bitů, takže není žádný slovník, kterým by šlo útočníka zpomalit, a heslový hash u každého požadavku agenta by stál desítky milisekund bez jakéhokoli zisku. Hesla, která si lidé vymýšlejí, dostávají argon2id.

Reset hesla zneplatní všechny session a nevydá novou, takže mezi útočníkem s resetovacím odkazem a účtem pořád stojí TOTP.

Přihlášení agenta bez kopírování klíče

Vedle vytvoření klíče v dashboardu a jeho zkopírování do konfigurace existují dva další způsoby, jak agentovi udělit přístup, aniž by tajný klíč vůbec prošel terminálem nebo přepisem konverzace.

Přihlášení přes zařízení (npx @briefgate/mcp login) se řídí RFC 8628. CLI si vyžádá device_code a krátký user_code, ten uživateli zobrazí a dotazuje /v1/auth/device/poll každých pár sekund. Oba kódy se ukládají jako hash, ne v otevřené podobě, a pokud je nikdo neschválí, vyprší po 10 minutách. Schválení vyžaduje aktivní session v dashboardu — panel, kde se klikne na Allow, musí být už přihlášený, takže flow nejde dokončit jen s kódem bez přístupu k účtu. Vrácený API klíč je po všech stránkách běžný API klíč: stejná oprávnění, stejné zneplatnění, stejný audit log, a v přehledu klíčů je označený klientem a názvem stroje, který o něj požádal (např. „Claude Code on laptop"), takže ho lze odlišit od klíčů založených přímo v dashboardu.

OAuth 2.1 stojí za hostovaným endpointem (https://mcp.briefgate.dev/mcp). Jde o standardní authorization-code flow s PKCE (jen S256) pro veřejné klienty — nikdy se nevydává ani nepřijímá client secret, což odpovídá tomu, čím MCP klient běžící na něčím počítači nebo v prohlížeči skutečně je. Dynamická registrace klienta (RFC 7591) je otevřená na /v1/oauth/register a metadata jsou publikovaná na https://api.briefgate.dev/.well-known/oauth-authorization-server. Redirect URI musí být https:// nebo loopback adresa, cokoli jiného se odmítne. Access tokeny jsou krátkodobé (1 hodina) API klíče a jdou zneplatnit stejně jako každý jiný klíč; refresh tokeny mají platnost 30 dní a při každém použití rotují — refresh token použitý po krádeži zneplatní ten legitimní, a krádež se v audit logu projeví jako dvojí použití stejného tokenu v krátkém okně. Authorization kódy, access tokeny i refresh tokeny se ukládají jako hash, nikdy v otevřené podobě.

Oba postupy končí stejně jako klíč založený v dashboardu: na stránce s klíči se objeví něco, co jde zneplatnit, a skončí to vždy jen v účtu toho, kdo byl v okamžiku kliknutí na Allow přihlášený do dashboardu.

Soubory

Webhooky

Endpoint, který zaregistrujete, dostává všechny události celého účtu, takže se to bere jako rozhodnutí o účtu jako celku: přidat, smazat nebo otestovat ho smí jen vlastník účtu, a při vytvoření se vydá podpisový secret zobrazený jednou.

Obsah nikdy neobsahuje odkaz do portálu. Ten odkaz je přístupové pověření do sběru podkladů vašeho klienta a chatový kanál má obvykle víc čtenářů než ten sběr podkladů.

Kde data leží

Aplikace a databáze netcup GmbH, Norimberk, Německo
Soubory Cloudflare R2, omezení na jurisdikci EU
Transakční e-maily Resend (USA) — EU-U.S. Data Privacy Framework a SCC 2021/914
SMS, jen když si je zapnete Twilio (USA) — stejný titul
Platby Stripe (USA) — jen fakturační údaje, nikdy data klientů
Sledování chyb Sentry / Functional Software, Inc. (USA) — data v EU, uložená v Německu

Kompletní seznam i s titulem předání pro každého z nich je ve zpracovatelské smlouvě.

Uchování a mazání

Auditování

Citlivé operace se zapisují do append-only auditního logu s aktérem, akcí, IP adresou a časovým razítkem: odhalení hesel, vytvoření a zneplatnění klíčů, změny sedadel, přihlášení. Aplikace nenabízí žádnou cestu, jak z něj mazat. Log svého účtu si přečtete v dashboardu nebo přes GET /v1/audit.

Zneužití a limity

Sledování chyb

Chyby aplikace se hlásí do Sentry (Functional Software, Inc.), s daty v EU — události jdou na de.sentry.io a jsou uložené v Německu. Co se posílá: typ chyby a stack trace, metoda a cesta požadavku (bez query stringu), request id a id účtu, pokud je známé. Co se nikdy neposílá: těla požadavků, cookies, hlavičku Authorization ani API klíče, e-mailové adresy (nahrazené za [email]), cokoli, co odeslal klient, ani hodnoty přístupů. V prohlížeči se hlásí jen neošetřené chyby JavaScriptu v dashboardu a portálu a neúspěšná volání API (jen stavový kód, bez těla odpovědi) — žádné breadcrumbs a query string v URL se před odesláním odstraní. Sentry eventy drží nejdéle 90 dní.

Sledování

Skoro žádné. Marketingový web počítá zobrazení stránek přes Cloudflare Web Analytics, které nenastavuje cookie ani neukládá do prohlížeče žádný identifikátor (zásady ochrany osobních údajů §12). Jinak nic: žádný tag manager, žádné nahrávání session, žádný reklamní pixel — a v dashboardu ani v klientském portálu nic navíc kromě sledování chyb popsaného výše. Jediné cookies jsou ty, díky kterým funguje přihlášení a portálová session; jsou vypsané v zásadách ochrany osobních údajů.

Hlášení zranitelnosti

Napište na privacy@briefgate.dev a přiložte dost detailů, aby to šlo zopakovat. Odpoví vám člověk. Nepouštějte prosím automatické skenery proti produkci a netestujte na cizím účtu ani portálu — nahlaste to a prověří se to pořádně.