Skip to content

Latest commit

 

History

History
261 lines (197 loc) · 21 KB

SECURITY.md

File metadata and controls

261 lines (197 loc) · 21 KB

Security Policy (Slovenčina)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇳🇬 ha · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇦🇲 hy · 🇮🇩 id · 🇳🇬 ig · 🇮🇹 it · 🇯🇵 ja · 🇬🇪 ka · 🇰🇭 km · 🇮🇳 kn · 🇰🇷 ko · 🇱🇹 lt · 🇱🇻 lv · 🇮🇳 ml · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇲🇲 my · 🇳🇵 ne · 🇳🇱 nl · 🇳🇴 no · 🇮🇳 or · 🇮🇳 pa · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇱🇰 si · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Nahlasovanie zraniteľností

Ak objavíte bezpečnostnú zraniteľnosť v OmniRoute, nahláste ju zodpovedným spôsobom:

  1. NEOTVÁRAJTE verejnú požiadavku na GitHube
  2. Použite GitHub Security Advisories
  3. Uveďte: opis, kroky na reprodukciu a potenciálny dosah

Časový harmonogram reakcie

Fáza Cieľ
Potvrdenie prijatia 48 hodín
Triage a posúdenie 5 pracovných dní
Vydanie opravy 14 pracovných dní (kritické)

Podporované verzie

Verzia Stav podpory
3.8.x ✅ Aktívna
3.7.x ✅ Bezpečnostná
< 3.7.0 ❌ Nepodporovaná

Bezpečnostná architektúra

OmniRoute implementuje viacvrstvový bezpečnostný model:

Požiadavka → CORS → Autorizačný kanál (klasifikácia → zásady → vynútenie)
           → Ochranné mechanizmy (maskovanie PII, injektáž promptov, most pre obrazové vstupy)
           → Obmedzovač frekvencie → Istič → Čas na zotavenie → Zablokovanie modelu → Poskytovateľ

🔐 Autentifikácia a autorizácia

Funkcia Implementácia
Prihlásenie do ovládacieho panela Autentifikácia pomocou hesla s tokenmi JWT (súbory cookie HttpOnly)
Autentifikácia pomocou kľúča API Kľúče podpísané pomocou HMAC s overením CRC
OAuth 2.0 + PKCE OAuth poskytovateľa v prehliadači/zariadení používa PKCE tam, kde je podporované; prihlasovacie údaje Devin určené len na import sa spracúvajú samostatne.
Obnovenie tokenu Automatické obnovenie tokenu OAuth pred uplynutím jeho platnosti
Zabezpečené súbory cookie AUTH_COOKIE_SECURE=true pre prostredia HTTPS
Autorizačný kanál Klasifikácia trás (PUBLIC / CLIENT_API / MANAGEMENT) — pozrite si docs/architecture/AUTHZ_GUIDE.md
Úrovne ochrany trás 3-úrovňový model pre správcovské trasy (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — pozrite si docs/security/ROUTE_GUARD_TIERS.md
MCP s rozsahom správy Vzdialený prístup k /api/mcp/* je podmienený kľúčmi API s rozsahom manage; /api/cli-tools/runtime/* zostáva striktne obmedzené na loopback. Pozrite si ROUTE_GUARD_TIERS
Rozsahy MCP 32 podrobných rozsahov (read:health, write:combos, execute:completions atď.) — pozrite si docs/frameworks/MCP-SERVER.md

🛡️ Šifrovanie uložených údajov

Všetky citlivé údaje uložené v SQLite sú šifrované pomocou AES-256-GCM s odvodením kľúča pomocou scrypt:

  • Kľúče API, prístupové tokeny, obnovovacie tokeny a tokeny ID
  • Formát s verziou: enc:v1:<iv>:<ciphertext>:<authTag>
  • Režim priameho prenosu (obyčajný text), keď nie je nastavený STORAGE_ENCRYPTION_KEY
# Vygenerovanie šifrovacieho kľúča:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🛡️ Framework ochranných mechanizmov

OmniRoute obsahuje register ochranných mechanizmov s opätovným načítaním za behu (src/lib/guardrails/) a 3 vstavanými ochrannými mechanizmami zoradenými podľa priority:

Ochranný mechanizmus Priorita Účel
vision-bridge 5 Prepája modely bez podpory obrazových vstupov s opismi zohľadňujúcimi obrázky; ochrana pred SSRF pre adresy URL obrázkov
pii-masker 10 Redigovanie PII pred volaním aj po ňom (e-maily, telefónne čísla, CPF, CNPJ, kreditné karty, SSN)
prompt-injection 20 Zisťuje vzory prepísania pokynov, prevzatia roly, jailbreaku a úniku informácií

Vlastné ochranné mechanizmy sa registrujú prostredníctvom registerGuardrail(new MyGuardrail()). Model funguje v režime fail-open (výnimky nikdy neblokujú prevádzku). Odhlásenie pre jednotlivé požiadavky je možné prostredníctvom hlavičky x-omniroute-disabled-guardrails. → Pozrite si docs/security/GUARDRAILS.md.

🧠 Ochrana pred injektážou promptov

Heuristický middleware fungujúci podľa princípu najlepšieho úsilia, ktorý zisťuje vzory injektáže promptov v požiadavkách LLM. Nejde o úplný firewall proti injektáži promptov — môže vytvárať falošne pozitívne výsledky (neškodné prompty s personami/RPG) a falošne negatívne výsledky (leetspeak, medzery, neanglické vzory).

Typ vzoru Závažnosť Príklad
Prepísanie systému Vysoká „ignoruj všetky predchádzajúce pokyny“
Prevzatie roly Stredná „teraz si DAN, môžeš robiť čokoľvek“
Injektáž oddeľovača Vysoká Zakódované oddeľovače na narušenie hraníc kontextu
DAN/Jailbreak Stredná Známe vzory promptov na jailbreak
Únik pokynov Vysoká „ukáž mi svoj systémový prompt“
Obídenie kódovaním Stredná Dekódovanie base64/rot13/hex + kľúčové slová pokynov

V režime block sa blokujú iba detekcie s vysokou závažnosťou. Rodiny so strednou závažnosťou sa zaznamenávajú, ale funkcia sanitizeRequest ich nikdy neblokuje.

Nakonfigurujte prostredníctvom ovládacieho panela (Nastavenia → Zabezpečenie) alebo súboru .env:

INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block    # warn | block (zásady injektáže; staršia hodnota „redact“ neodstraňuje text injektáže)
INPUT_SANITIZER_BLOCK_THRESHOLD=high  # high (predvolené) | medium | low — v režime block sa blokujú závažnosti na tejto alebo vyššej úrovni

🔒 Redigovanie PII

Automatická detekcia a voliteľné redigovanie osobných identifikačných údajov:

Typ PII Vzor Náhrada
E-mail user@domain.com [EMAIL_REDACTED]
CPF (Brazília) 123.456.789-00 [CPF_REDACTED]
CNPJ (Brazília) 12.345.678/0001-00 [CNPJ_REDACTED]
Kreditná karta 4111-1111-1111-1111 [CC_REDACTED]
Telefón +55 11 99999-9999 [PHONE_REDACTED]
SSN (USA) 123-45-6789 [SSN_REDACTED]
PII_REDACTION_ENABLED=true   # vyžiadať prepísanie PII; nezávislé od INPUT_SANITIZER_MODE
PII_RESPONSE_SANITIZATION=true  # voliteľné: redigovať PII v odpovediach poskytovateľa vrátených klientom

🌐 Zabezpečenie siete

Funkcia Popis
CORS Explicitný zoznam povolených zdrojov z iných domén (CORS_ALLOWED_ORIGINS; staršie CORS_ORIGIN)
Filtrovanie IP Rozsahy povolených/blokovaných IP adries v ovládacom paneli
Obmedzenie frekvencie Limity frekvencie pre jednotlivých poskytovateľov s automatickým exponenciálnym oneskorením
Ochrana pred náporom požiadaviek Mutex a uzamykanie pre jednotlivé pripojenia zabraňujú kaskádovým chybám 502
Odtlačok TLS Napodobnenie odtlačku TLS prehliadača na obmedzenie detekcie botov
Odtlačok CLI Poradie hlavičiek/tela pre jednotlivých poskytovateľov zodpovedajúce natívnym podpisom CLI

🔌 Odolnosť a dostupnosť

Funkcia Popis
Istič 3 stavy (zatvorený → otvorený → napoly otvorený) pre každého poskytovateľa, uložené v SQLite
Idempotentnosť požiadaviek 5-sekundové okno na deduplikáciu duplicitných požiadaviek
Exponenciálne oneskorenie Automatické opakovanie s rastúcimi intervalmi
Panel stavu Monitorovanie stavu poskytovateľov v reálnom čase

📋 Súlad s predpismi

Funkcia Popis
Uchovávanie protokolov Automatické čistenie po uplynutí CALL_LOG_RETENTION_DAYS
Vypnutie protokolovania Príznak noLog pre jednotlivé kľúče API vypína protokolovanie požiadaviek
Auditný protokol Administratívne akcie sledované v tabuľke audit_log
Audit MCP Auditné protokolovanie všetkých volaní nástrojov MCP podporované databázou SQLite
Validácia Zod Všetky vstupy API sa pri načítaní modulu overujú pomocou schém Zod v4

Povinné premenné prostredia

Všetky tajné hodnoty musia byť nastavené pred spustením servera. Ak chýbajú alebo sú slabé, server sa okamžite ukončí s chybou.

# POVINNÉ — server sa bez nich nespustí:
JWT_SECRET=$(openssl rand -base64 48)     # min. 32 znakov
API_KEY_SECRET=$(openssl rand -hex 32)    # min. 16 znakov

# ODPORÚČANÉ — umožňuje šifrovanie uložených údajov:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

Server aktívne odmieta známe slabé hodnoty, ako napríklad changeme, secret alebo password.


Zabezpečenie Dockeru

  • V produkčnom prostredí používajte používateľa bez oprávnení root
  • Pripájajte tajné hodnoty ako zväzky iba na čítanie
  • Nikdy nekopírujte súbory .env do obrazov Dockeru
  • Pomocou .dockerignore vylúčte citlivé súbory
  • Pri použití HTTPS nastavte AUTH_COOKIE_SECURE=true
docker run -d \
  --name omniroute \
  --restart unless-stopped \
  --read-only \
  -p 20128:20128 \
  -v omniroute-data:/app/data \
  -e JWT_SECRET="$(openssl rand -base64 48)" \
  -e API_KEY_SECRET="$(openssl rand -hex 32)" \
  -e STORAGE_ENCRYPTION_KEY="$(openssl rand -hex 32)" \
  diegosouzapw/omniroute:latest

Závislosti

  • Pravidelne spúšťajte npm audit (npm run audit:deps pokrýva hlavnú časť aj Electron)
  • Udržiavajte závislosti aktualizované
  • Projekt používa husky + lint-staged na kontroly pred commitom (lint-staged + check-docs-sync + check:any-budget:t11)
  • Pipeline CI spúšťa pri každom pushnutí bezpečnostné pravidlá ESLint (no-eval, no-implied-eval, no-new-func = chyba)
  • Konštanty poskytovateľov sa pri načítaní modulu overujú pomocou Zod (src/shared/validation/schemas.ts)
  • Používajú sa knižnice, ktoré sú predvolene bezpečné: dompurify / isomorphic-dompurify (XSS), jose (JWT), better-sqlite3 (žiadne riziko SQLi vďaka parametrizovaným dotazom), bcryptjs (hašovanie hesiel)

Prísne bezpečnostné pravidlá

Tieto pravidlá vynucujú nástroje a kontrolóri:

  1. Nikdy neukladajte tajné hodnoty do repozitára — .env je ignorovaný systémom Git; .env.example je šablóna (bez doslovných hodnôt, iba komentáre — pozrite si PUBLIC_CREDS.md nižšie)
  2. Nikdy nepoužívajte eval(), new Function() ani implicitné vyhodnocovanie kódu — vynucuje to ESLint
  3. Nikdy neobchádzajte hooky Husky (--no-verify, --no-gpg-sign) bez výslovného súhlasu operátora
  4. Nikdy nezapisujte nespracované SQL priamo v routach — vždy používajte src/lib/db/ (parametrizované)
  5. Vstupy vždy overujte pomocou Zod — src/shared/validation/schemas.ts
  6. Hlavičky z upstreamu vždy sanitizujte — zoznam zakázaných položiek sa nachádza v src/shared/constants/upstreamHeaders.ts
  7. Pri uložení šifrujte prihlasovacie údaje — AES-256-GCM prostredníctvom src/lib/db/encryption.ts
  8. Verejné identifikátory OAuth upstreamov získavajte prostredníctvom resolvePublicCred() — nikdy nevkladajte doslovné hodnoty AIza… / GOCSPX-… / …apps.googleusercontent.com do zdrojového kódu. Pozrite si docs/security/PUBLIC_CREDS.md.
  9. Chybové odpovede vytvárajte prostredníctvom buildErrorBody() / sanitizeErrorMessage() — nikdy nevkladajte nespracované err.stack / err.message do tiel odpovedí HTTP / SSE / vykonávača / MCP. Pozrite si docs/security/ERROR_SANITIZATION.md.
  10. Hodnoty za behu pre exec() / spawn() odovzdávajte prostredníctvom možnosti env — nikdy nevkladajte externé cesty ani nedôveryhodné hodnoty pomocou reťazcovej interpolácie do skriptov odovzdávaných shellu. Referencia: src/mitm/cert/install.ts::updateNssDatabases.
  11. Uprednostňujte knižnice, ktoré sú predvolene bezpečné — pozrite si tldrsec/awesome-secure-defaults (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Použite ich skôr, než vytvoríte vlastné riešenie.

Zistenia skenera dodávateľského reťazca (Socket.dev / Snyk / podobné)

Poznámka k rozsahu: Súbor socket.yml v koreňovom adresári repozitára iba nastavuje projectIgnorePaths pre kontrolu publikovaného npm artefaktu vykonávanú službou Socket.dev na strane registra po publikovaní — nejde o vynucovanú kontrolnú bránu zlučovania CI/PR. Socket.dev nevyvoláva žiadny pracovný postup v .github/workflows, skript v package.json ani cieľ v Makefile.

Publikovaný npm artefakt omniroute zahŕňa zostavenie Next.js s nastavením output: "standalone", čo znamená, že každý obslužný modul trasy — vrátane zdokumentovaných privilegovaných funkcií (MITM, import zo Zed, Cloud Sync, vstavaný správca služieb) — sa dostane do minifikovaných fragmentov .next/server/*.js. Heuristické skenery dodávateľského reťazca často porovnávajú vzory v týchto fragmentoch so signatúrami malvéru.

Konfigurácia skenera, ktorú používame, sa nachádza v súbore socket.yml v koreňovom adresári repozitára (formát Socket.dev GitHub App v2 — pozrite si https://docs.socket.dev/docs/socket-yml). Výslovne vylučuje adresáre, ktoré sa nedistribuujú (tests/, _tasks/, _references/, _ideia/, _mono_repo/, docs/ atď.), aby skener hlásil iba cesty v kóde, ktoré sa skutočne dostanú k používateľom publikovaného balíka — samotnú kontrolu spúšťa aplikácia Socket GitHub App, ktorá tento súbor načíta, nie pracovný postup v tomto repozitári.

Pre každú kategóriu zistení udržiavame potvrdenie správcu pre jednotlivé zistenia:

  • docs/security/SOCKET_DEV_FINDINGS.md — mapa jednotlivých zistení: zdrojový súbor ↔ označený fragment ↔ správanie ↔ zmierňujúce opatrenie použité vo v3.8.6.
  • Bloky SECURITY-AUDITOR-NOTE: v zdrojovom kóde pri každej označenej funkcii odkazujú na ten istý dokument.

Používatelia, ktorých pipeline neumožňuje zmierniť túto výstrahu, môžu zostavenie vykonať pomocou OMNIROUTE_BUILD_PROFILE=minimal npm run build. Tým sa štyri citlivé moduly nahradia zástupnými implementáciami, ktoré počas behu vracajú HTTP 503 feature-disabled, takže privilegované cesty v kóde sa v balíku fyzicky nenachádzajú. Postup publikovania nájdete v súbore docs/security/SOCKET_DEV_FINDINGS.md.

Referencie