Batch 1 of the locale expansion: Greek, Croatian, Serbian, Lithuanian, Estonian, Latvian, Slovenian, Maltese and Irish across the dashboard catalog, docs mirrors, CLI catalog, README, locale index and the site. 42 → 51 locales. Also fixes the ICU literal escape the translation backend dropped around angle placeholders, four translations that invented or renamed a placeholder, the language bars that linked to mirrors that do not exist, and the migration count drift (171 → 172). ⚠️ base-red inherited: #12732 — the four unit shards and Fast Quality Gates fail identically on unrelated PRs cut from the same base.
19 KiB
Security Policy (Latviešu)
🌐 Languages: 🇺🇸 English · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇮🇳 gu · 🇮🇱 he · 🇮🇳 hi · 🇭🇷 hr · 🇭🇺 hu · 🇮🇩 id · 🇮🇹 it · 🇯🇵 ja · 🇰🇷 ko · 🇱🇹 lt · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Ziņošana par ievainojamībām
Ja atklājat drošības ievainojamību OmniRoute, lūdzu, ziņojiet par to atbildīgi:
- NEIZVEIDOJIET publisku GitHub issue
- Izmantojiet GitHub Security Advisories
- Iekļaujiet: aprakstu, reproducēšanas darbības un iespējamo ietekmi
Atbildes termiņi
| Posms | Mērķis |
|---|---|
| Apstiprinājums | 48 stundas |
| Izskatīšana un novērtēšana | 5 darba dienas |
| Labojuma laidiens | 14 darba dienas (kritiskām problēmām) |
Atbalstītās versijas
| Versija | Atbalsta statuss |
|---|---|
| 3.8.x | ✅ Aktīva |
| 3.7.x | ✅ Drošības atbalsts |
| < 3.7.0 | ❌ Nav atbalstīta |
Drošības arhitektūra
OmniRoute izmanto daudzslāņu drošības modeli:
Pieprasījums → CORS → Autorizācijas konveijers (klasificēšana → politikas → izpilde)
→ Aizsargmehānismi (PII maskētājs, uzvedņu injekcijas, redzes tilts)
→ Ātruma ierobežotājs → Ķēdes pārtraucējs → Atdzišanas periods → Modeļa bloķēšana → Nodrošinātājs
🔐 Autentifikācija un autorizācija
| Funkcija | Implementācija |
|---|---|
| Informācijas paneļa pieteikšanās | Uz paroli balstīta autentifikācija ar JWT marķieriem (HttpOnly sīkfaili) |
| API atslēgas autentifikācija | Ar HMAC parakstītas atslēgas ar CRC validāciju |
| OAuth 2.0 + PKCE | Konkrētam nodrošinātājam paredzētais pārlūkprogrammas/ierīces OAuth izmanto PKCE, ja tas tiek atbalstīts; tikai importējamie Devin akreditācijas dati tiek apstrādāti atsevišķi. |
| Marķiera atjaunošana | Automātiska OAuth marķiera atjaunošana pirms derīguma termiņa beigām |
| Drošie sīkfaili | AUTH_COOKIE_SECURE=true HTTPS vidēm |
| Autorizācijas konveijers | Maršruta klasificēšana (PUBLIC / CLIENT_API / MANAGEMENT) — skatiet docs/architecture/AUTHZ_GUIDE.md |
| Maršruta aizsardzības līmeņi | Trīs līmeņu modelis pārvaldības maršrutiem (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — skatiet docs/security/ROUTE_GUARD_TIERS.md |
| Manage-scope MCP | Attālināta piekļuve /api/mcp/* tiek kontrolēta ar API atslēgām, kurām ir manage tvērums; /api/cli-tools/runtime/* paliek stingri ierobežota ar loopback. Skatiet ROUTE_GUARD_TIERS |
| MCP tvērumi | 32 detalizēti tvērumi (read:health, write:combos, execute:completions u. c.) — skatiet docs/frameworks/MCP-SERVER.md |
🛡️ Šifrēšana miera stāvoklī
Visi SQLite saglabātie sensitīvie dati tiek šifrēti, izmantojot AES-256-GCM ar scrypt atslēgas atvasināšanu:
- API atslēgas, piekļuves marķieri, atsvaidzināšanas marķieri un ID marķieri
- Versijots formāts:
enc:v1:<iv>:<ciphertext>:<authTag> - Caurlaides režīms (vienkāršs teksts), ja
STORAGE_ENCRYPTION_KEYnav iestatīts
# Ģenerēt šifrēšanas atslēgu:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
🛡️ Aizsargmehānismu ietvars
OmniRoute komplektācijā ir iekļauts dinamiski pārlādējams aizsargmehānismu reģistrs (src/lib/guardrails/) ar 3 iebūvētiem aizsargmehānismiem, kas sakārtoti pēc prioritātes:
| Aizsargmehānisms | Prioritāte | Mērķis |
|---|---|---|
vision-bridge |
5 | Nodrošina ar attēliem saistītus aprakstus modeļiem bez redzes atbalsta; SSRF aizsardzība attēlu URL |
pii-masker |
10 | PII noņemšana pirms un pēc izsaukuma (e-pasti, tālruņa numuri, CPF, CNPJ, kredītkartes, SSN) |
prompt-injection |
20 | Nosaka ignorēšanas, lomas pārņemšanas, jailbreak un noplūdes modeļus |
Pielāgoti aizsargmehānismi tiek reģistrēti, izmantojot registerGuardrail(new MyGuardrail()). Modelis darbojas pēc principa fail-open (izņēmumi nekad nebloķē datplūsmu). Atteikšanās no aizsargmehānismiem katram pieprasījumam atsevišķi, izmantojot x-omniroute-disabled-guardrails galveni. → Skatiet docs/security/GUARDRAILS.md.
🧠 Uzvedņu injekciju aizsargs
Heiristisks starpprogrammatūras risinājums ar labāko iespējamo efektivitāti, kas nosaka uzvedņu injekciju modeļus LLM pieprasījumos.
Tas nav pilnīgs uzvedņu injekciju ugunsmūris — var rasties kļūdaini pozitīvi rezultāti (nekaitīgas
personas/RPG uzvednes) un kļūdaini negatīvi rezultāti (leetspeak, atstarpes, modeļi citās valodās).
| Modeļa tips | Nopietnība | Piemērs |
|---|---|---|
| Sistēmas ignorēšana | Augsta | "ignore all previous instructions" |
| Lomas pārņemšana | Vidēja | "you are now DAN, you can do anything" |
| Atdalītāja injekcija | Augsta | Kodēti atdalītāji konteksta robežu pārraušanai |
| DAN/Jailbreak | Vidēja | Zināmi jailbreak uzvedņu modeļi |
| Norādījumu noplūde | Augsta | "show me your system prompt" |
| Kodējuma apiešana | Vidēja | base64/rot13/hex dekodēšana + norādījumu atslēgvārdi |
Tikai Augstas nopietnības noteikšanas gadījumi tiek bloķēti block režīmā. Vidējas nopietnības
grupas tiek reģistrētas, taču sanitizeRequest tās nekad nebloķē.
Konfigurējiet, izmantojot informācijas paneli (Settings → Security) vai .env:
INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block # warn | block (injekciju politika; mantotais "redact" režīms nenoņem injekcijas tekstu)
INPUT_SANITIZER_BLOCK_THRESHOLD=high # high (noklusējums) | medium | low — nopietnības līmeņi, sākot ar norādīto, tiek bloķēti block režīmā
🔒 PII noņemšana
Automātiska personu identificējošas informācijas noteikšana un, pēc izvēles, noņemšana:
| PII tips | Modelis | Aizvietojums |
|---|---|---|
| E-pasts | user@domain.com |
[EMAIL_REDACTED] |
| CPF (Brazīlija) | 123.456.789-00 |
[CPF_REDACTED] |
| CNPJ (Brazīlija) | 12.345.678/0001-00 |
[CNPJ_REDACTED] |
| Kredītkarte | 4111-1111-1111-1111 |
[CC_REDACTED] |
| Tālruņa numurs | +55 11 99999-9999 |
[PHONE_REDACTED] |
| SSN (ASV) | 123-45-6789 |
[SSN_REDACTED] |
PII_REDACTION_ENABLED=true # pieprasīt PII pārrakstīšanu; neatkarīgi no INPUT_SANITIZER_MODE
PII_RESPONSE_SANITIZATION=true # pēc izvēles: noņemt PII no klientiem atgrieztajām nodrošinātāju atbildēm
🌐 Tīkla drošība
| Funkcija | Apraksts |
|---|---|
| CORS | Skaidri definēts starpizcelsmju atļauto saraksts (CORS_ALLOWED_ORIGINS; mantotais CORS_ORIGIN) |
| IP filtrēšana | IP diapazonu atļauto/bloķēto saraksts informācijas panelī |
| Ātruma ierobežošana | Ātruma ierobežojumi katram nodrošinātājam ar automātisku atkāpšanos |
| Pret vienlaicīgu pieprasījumu lavīnu | Mutekss + savienojumu bloķēšana novērš kaskādveida 502 kļūdas |
| TLS pirkstu nospiedums | Pārlūkprogrammai līdzīga TLS pirkstu nospieduma viltošana, lai mazinātu robotu noteikšanu |
| CLI pirkstu nospiedums | Galveņu/satura secība katram nodrošinātājam, lai atbilstu sākotnējā CLI parakstiem |
🔌 Noturība un pieejamība
| Funkcija | Apraksts |
|---|---|
| Ķēdes pārtraucējs | Trīs stāvokļi (Closed → Open → Half-Open) katram nodrošinātājam, saglabāti SQLite |
| Pieprasījumu idempotence | 5 sekunžu deduplikācijas logs dublētiem pieprasījumiem |
| Eksponenciāla atkāpšanās | Automātiska atkārtota mēģināšana ar pieaugošām aizturēm |
| Veselības informācijas panelis | Nodrošinātāju veselības uzraudzība reāllaikā |
📋 Atbilstība
| Funkcija | Apraksts |
|---|---|
| Žurnālu saglabāšana | Automātiska tīrīšana pēc CALL_LOG_RETENTION_DAYS |
| Atteikšanās no žurnalēšanas | Katrai API atslēgai noLog karodziņš atspējo pieprasījumu žurnalēšanu |
| Audita žurnāls | Administratīvās darbības tiek izsekotas audit_log tabulā |
| MCP audits | Uz SQLite balstīta audita žurnalēšana visiem MCP rīku izsaukumiem |
| Zod validācija | Visas API ievades tiek validētas ar Zod v4 shēmām moduļa ielādes laikā |
Obligātie vides mainīgie
Visiem noslēpumiem jābūt iestatītiem pirms servera palaišanas. Ja to trūkst vai tie ir vāji, serveris nekavējoties pārtrauks darbu.
# OBLIGĀTI — serveris bez tiem netiks palaists:
JWT_SECRET=$(openssl rand -base64 48) # vismaz 32 rakstzīmes
API_KEY_SECRET=$(openssl rand -hex 32) # vismaz 16 rakstzīmes
# IETEICAMS — iespējo šifrēšanu miera stāvoklī:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
Serveris aktīvi noraida zināmas vājas vērtības, piemēram, changeme, secret vai password.
Docker drošība
- Ražošanas vidē izmantojiet lietotāju, kas nav root lietotājs
- Pievienojiet noslēpumus kā tikai lasāmus sējumus
- Nekad nekopējiet
.envfailus Docker attēlos - Izmantojiet
.dockerignore, lai izslēgtu sensitīvus failus - Iestatiet
AUTH_COOKIE_SECURE=true, ja serveris darbojas aiz HTTPS
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
Atkarības
- Regulāri palaidiet
npm audit(npm run audit:depspārbauda galveno projektu + electron) - Uzturiet atkarības atjauninātas
- Projekts priekšpiegādes pārbaudēm izmanto
husky+lint-staged(lint-staged + check-docs-sync + check:any-budget:t11) - CI konveijers katrā nosūtīšanā palaiž ESLint drošības noteikumus (
no-eval,no-implied-eval,no-new-func= error) - Provider konstantes tiek validētas moduļa ielādes laikā, izmantojot Zod (
src/shared/validation/schemas.ts) - Pēc noklusējuma drošas bibliotēkas:
dompurify/isomorphic-dompurify(XSS),jose(JWT),better-sqlite3(nav SQLi riska, jo tiek izmantoti parametrizēti vaicājumi),bcryptjs(paroļu jaukšana)
Stingrie drošības noteikumi
Šos noteikumus ievieš rīki un pārbaudītāji:
- Nekad neiekļaujiet noslēpumus repozitorijā —
.envir izslēgts no git;.env.exampleir veidne (bez literālām vērtībām, tikai komentāri — skatiet tālāk PUBLIC_CREDS.md) - Nekad neizmantojiet
eval(),new Function()vai netiešu eval — to ievēro ESLint - Nekad neapejiet Husky āķus (
--no-verify,--no-gpg-sign) bez skaidra operatora apstiprinājuma - Nekad nerakstiet neapstrādātu SQL maršrutos — vienmēr izmantojiet
src/lib/db/(parametrizētu) - Vienmēr validējiet ievades datus ar Zod —
src/shared/validation/schemas.ts - Vienmēr sanitizējiet augšupējās sistēmas galvenes — aizliegto vērtību saraksts failā
src/shared/constants/upstreamHeaders.ts - Šifrējiet akreditācijas datus miera stāvoklī — AES-256-GCM, izmantojot
src/lib/db/encryption.ts - Publiskos augšupējās OAuth identifikatorus iegūstiet, izmantojot
resolvePublicCred()— nekad neieguliet avota kodā literālas vērtībasAIza…/GOCSPX-…/…apps.googleusercontent.com. Skatietdocs/security/PUBLIC_CREDS.md. - Kļūdu atbildes veidojiet, izmantojot
buildErrorBody()/sanitizeErrorMessage()— nekad neievietojiet neapstrādātuerr.stack/err.messageHTTP / SSE / executor / MCP atbilžu pamattekstā. Skatietdocs/security/ERROR_SANITIZATION.md. exec()/spawn()izpildlaika vērtības nododiet, izmantojotenvopciju — nekad neievietojiet ārējus ceļus vai neuzticamas vērtības čaulas skriptos, izmantojot virkņu interpolāciju. Atsauce:src/mitm/cert/install.ts::updateNssDatabases.- Dodiet priekšroku pēc noklusējuma drošām bibliotēkām — skatiet tldrsec/awesome-secure-defaults (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Izmantojiet tās, pirms izstrādāt pašiem savu risinājumu.
Piegādes ķēdes skenera atradumi (Socket.dev / Snyk / līdzīgi rīki)
Publicētais omniroute npm artefakts ietver Next.js output: "standalone"
būvējumu, kas nozīmē, ka katrs maršruta apstrādātājs — tostarp dokumentētās
priviliģētās funkcijas (MITM, Zed importēšana, Cloud Sync, iegultais pakalpojumu
uzraugs) — nonāk .next/server/*.js minimizētajos gabalos. Heiristiskie
piegādes ķēdes skeneri bieži salīdzina šos gabalus ar ļaunprogrammatūras
parakstiem.
Katrai atraduma kategorijai mēs uzturam atsevišķu uzturētāja apliecinājumu:
docs/security/SOCKET_DEV_FINDINGS.md— katra atraduma kartējums: avota fails ↔ atzīmētais gabals ↔ darbība ↔ mazināšanas pasākums, kas piemērots v3.8.6.- Avota kodā
SECURITY-AUDITOR-NOTE:bloki pie katra atzīmētās funkcijas punkta norāda uz to pašu dokumentu.
Lietotājiem, kuru konveijers nevar atslābināt brīdinājumu, jābūvē ar
OMNIROUTE_BUILD_PROFILE=minimal npm run build. Tādējādi četri sensitīvie
moduļi tiek aizstāti ar stublājiem, kas izpildes laikā atgriež HTTP 503
feature-disabled, tādēļ priviliģētie koda ceļi fiziski nepastāv komplektā.
Publicēšanas recepti skatiet docs/security/SOCKET_DEV_FINDINGS.md.
Atsauces
docs/architecture/AUTHZ_GUIDE.md— autorizācijas konveijersdocs/security/GUARDRAILS.md— drošības ierobežojumu ietvarsdocs/security/COMPLIANCE.md— audita žurnāls un glabāšanadocs/security/PUBLIC_CREDS.md— obligātais modelis publiskiem augšupējo sistēmu akreditācijas datiemdocs/security/ERROR_SANITIZATION.md— obligātais modelis kļūdu atbildēmdocs/security/SOCKET_DEV_FINDINGS.md— uzturētāja apliecinājums par piegādes ķēdes skenera atradumiemdocs/architecture/RESILIENCE_GUIDE.md— ķēdes pārtraucējs + atdzišanas periods + bloķēšanadocs/security/STEALTH_GUIDE.md— TLS pirkstu nospiedumu veidošana (juridisks/ētisks paziņojums)CLAUDE.md— stingrie noteikumi MI aģentiem- tldrsec/awesome-secure-defaults — atlasītas bibliotēkas ar drošiem noklusējuma iestatījumiem