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.
18 KiB
Security Policy (Slovenščina)
🌐 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 · 🇱🇻 lv · 🇮🇳 mr · 🇲🇾 ms · 🇲🇹 mt · 🇳🇱 nl · 🇳🇴 no · 🇵🇭 phi · 🇵🇱 pl · 🇵🇹 pt · 🇧🇷 pt-BR · 🇷🇴 ro · 🇷🇺 ru · 🇸🇰 sk · 🇷🇸 sr · 🇸🇪 sv · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇻🇳 vi · 🇨🇳 zh-CN · 🇹🇼 zh-TW
Poročanje o ranljivostih
Če odkrijete varnostno ranljivost v OmniRoute, jo odgovorno prijavite:
- NE odpirajte javne težave v GitHubu
- Uporabite GitHub Security Advisories
- Vključite: opis, korake za reprodukcijo in morebiten vpliv
Časovnica odziva
| Faza | Ciljni čas |
|---|---|
| Potrditev prejema | 48 ur |
| Razvrstitev in ocena | 5 delovnih dni |
| Izdaja popravka | 14 delovnih dni (kritično) |
Podprte različice
| Različica | Stanje podpore |
|---|---|
| 3.8.x | ✅ Aktivna |
| 3.7.x | ✅ Varnostna podpora |
| < 3.7.0 | ❌ Ni podprta |
Varnostna arhitektura
OmniRoute uporablja večplastni varnostni model:
Zahteva → CORS → Avtorizacijski cevovod (razvrščanje → pravilniki → uveljavljanje)
→ Varovala (maskiranje PII, vrivanje pozivov, vizualni most)
→ Omejevalnik hitrosti → Odklopnik → Premor → Zaklep modela → Ponudnik
🔐 Preverjanje pristnosti in avtorizacija
| Funkcija | Izvedba |
|---|---|
| Prijava v nadzorno ploščo | Preverjanje pristnosti z geslom in žetoni JWT (piškotki HttpOnly) |
| Preverjanje pristnosti s ključem API | Ključi, podpisani s HMAC, s preverjanjem CRC |
| OAuth 2.0 + PKCE | OAuth ponudnika za brskalnik/napravo uporablja PKCE, kjer je podprt; poverilnice Devin, namenjene samo uvozu, se obravnavajo ločeno. |
| Osveževanje žetonov | Samodejno osveževanje žetonov OAuth pred potekom veljavnosti |
| Varni piškotki | AUTH_COOKIE_SECURE=true za okolja HTTPS |
| Avtorizacijski cevovod | Razvrstitev poti (PUBLIC / CLIENT_API / MANAGEMENT) — glejte docs/architecture/AUTHZ_GUIDE.md |
| Ravni varovanja poti | 3-stopenjski model za upravljavske poti (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — glejte docs/security/ROUTE_GUARD_TIERS.md |
| MCP z obsegom upravljanja | Oddaljeni dostop do /api/mcp/* je omejen s ključi API z obsegom manage; /api/cli-tools/runtime/* ostaja strogo omejen na povratno zanko. Glejte ROUTE_GUARD_TIERS |
| Obsegi MCP | 32 podrobnih obsegov (read:health, write:combos, execute:completions itd.) — glejte docs/frameworks/MCP-SERVER.md |
🛡️ Šifriranje shranjenih podatkov
Vsi občutljivi podatki, shranjeni v SQLite, so šifrirani z algoritmom AES-256-GCM in izpeljavo ključa s scrypt:
- Ključi API, žetoni za dostop, žetoni za osveževanje in žetoni ID
- Oblika z različicami:
enc:v1:<iv>:<ciphertext>:<authTag> - Način neposrednega prenosa (nešifrirano besedilo), kadar
STORAGE_ENCRYPTION_KEYni nastavljen
# Ustvarite šifrirni ključ:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
🛡️ Ogrodje varoval
OmniRoute vključuje register varoval z možnostjo ponovnega nalaganja med delovanjem (src/lib/guardrails/) s 3 vgrajenimi varovali, razvrščenimi po prednosti:
| Varovalo | Prednost | Namen |
|---|---|---|
vision-bridge |
5 | Poveže modele brez podpore za vid z opisi, ki upoštevajo slike; zaščita SSRF za URL-je slik |
pii-masker |
10 | Prikrivanje PII pred klicem in po njem (e-pošta, telefon, CPF, CNPJ, kreditne kartice, SSN) |
prompt-injection |
20 | Zazna vzorce preglasitve, prevzema vlog, odklepanja omejitev in uhajanja podatkov |
Varovala po meri se registrirajo prek registerGuardrail(new MyGuardrail()). Model ob napaki dovoljuje promet (izjeme ga nikoli ne blokirajo). Izključitev za posamezno zahtevo je mogoča prek glave x-omniroute-disabled-guardrails. → Glejte docs/security/GUARDRAILS.md.
🧠 Varovalo pred vrivanjem pozivov
Hevristična vmesna programska oprema po načelu najboljšega prizadevanja, ki zaznava vzorce vrivanja pozivov v zahtevah LLM. Ne predstavlja popolnega požarnega zidu proti vrivanju pozivov — lahko povzroči lažno pozitivne rezultate (neškodljivi pozivi za osebnosti/RPG) in lažno negativne rezultate (leetspeak, presledki, neangleški vzorci).
| Vrsta vzorca | Resnost | Primer |
|---|---|---|
| Preglasitev sistema | Visoka | »prezri vsa prejšnja navodila« |
| Prevzem vloge | Srednja | »zdaj si DAN in lahko narediš karkoli« |
| Vrinjanje ločil | Visoka | Kodirana ločila za prekinitev meja konteksta |
| DAN/odklep omejitev | Srednja | Znani vzorci pozivov za odklep omejitev |
| Razkritje navodil | Visoka | »pokaži mi svoj sistemski poziv« |
| Izogibanje s kodiranjem | Srednja | Dekodiranje base64/rot13/hex + ključne besede navodil |
V načinu block so blokirane samo zaznave visoke resnosti. Družine srednje resnosti
se beležijo, vendar jih sanitizeRequest nikoli ne blokira.
Nastavite prek nadzorne plošče (Nastavitve → Varnost) ali datoteke .env:
INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block # warn | block (pravilnik vrivanja; podedovani »redact« ne odstrani vrinjenega besedila)
INPUT_SANITIZER_BLOCK_THRESHOLD=high # high (privzeto) | medium | low — v načinu block se blokirajo resnosti na tej ravni ali višje
🔒 Prikrivanje PII
Samodejno zaznavanje in izbirno prikrivanje osebno določljivih podatkov:
| Vrsta PII | Vzorec | Nadomestilo |
|---|---|---|
| E-pošta | user@domain.com |
[EMAIL_REDACTED] |
| CPF (Brazilija) | 123.456.789-00 |
[CPF_REDACTED] |
| CNPJ (Brazilija) | 12.345.678/0001-00 |
[CNPJ_REDACTED] |
| Kreditna kartica | 4111-1111-1111-1111 |
[CC_REDACTED] |
| Telefon | +55 11 99999-9999 |
[PHONE_REDACTED] |
| SSN (ZDA) | 123-45-6789 |
[SSN_REDACTED] |
PII_REDACTION_ENABLED=true # prepis PII v zahtevi; neodvisno od INPUT_SANITIZER_MODE
PII_RESPONSE_SANITIZATION=true # izbirno: prikrij PII v odgovorih ponudnika, vrnjenih odjemalcem
🌐 Omrežna varnost
| Funkcija | Opis |
|---|---|
| CORS | Izrecni seznam dovoljenih virov iz drugih domen (CORS_ALLOWED_ORIGINS; podedovani CORS_ORIGIN) |
| Filtriranje naslovov IP | Obsegi naslovov IP na seznamu dovoljenih/blokiranih v nadzorni plošči |
| Omejevanje hitrosti | Omejitve hitrosti za posameznega ponudnika s samodejnim eksponentnim zakasnjevanjem |
| Preprečevanje množice sočasnih zahtev | Mutex + zaklepanje za posamezno povezavo preprečujeta veriženje napak 502 |
| Prstni odtis TLS | Posnemanje brskalniku podobnega prstnega odtisa TLS za zmanjšanje zaznavanja botov |
| Prstni odtis CLI | Vrstni red glav/telesa za posameznega ponudnika, ki se ujema s podpisi izvornega CLI-ja |
🔌 Odpornost in razpoložljivost
| Funkcija | Opis |
|---|---|
| Odklopnik | 3 stanja (Zaprto → Odprto → Napol odprto) za posameznega ponudnika, trajno shranjena v SQLite |
| Idempotentnost zahtev | 5-sekundno okno za odstranjevanje podvojenih zahtev |
| Eksponentno zakasnjevanje | Samodejni ponovni poskus z naraščajočimi zakasnitvami |
| Nadzorna plošča stanja | Spremljanje stanja ponudnikov v realnem času |
📋 Skladnost
| Funkcija | Opis |
|---|---|
| Hramba dnevnikov | Samodejno čiščenje po CALL_LOG_RETENTION_DAYS |
| Izključitev beleženja | Zastavica noLog za posamezni ključ API onemogoči beleženje zahtev |
| Revizijski dnevnik | Skrbniška dejanja se beležijo v tabeli audit_log |
| Revizija MCP | Revizijsko beleženje vseh klicev orodij MCP s podporo SQLite |
| Preverjanje veljavnosti Zod | Vsi vhodi API se ob nalaganju modula preverijo s shemami Zod v4 |
Zahtevane okoljske spremenljivke
Vse skrivnosti morajo biti nastavljene pred zagonom strežnika. Če manjkajo ali so šibke, se strežnik takoj zaustavi.
# ZAHTEVANO — strežnik se brez teh vrednosti ne bo zagnal:
JWT_SECRET=$(openssl rand -base64 48) # najmanj 32 znakov
API_KEY_SECRET=$(openssl rand -hex 32) # najmanj 16 znakov
# PRIPOROČENO — omogoča šifriranje shranjenih podatkov:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)
Strežnik dejavno zavrača znane šibke vrednosti, kot so changeme, secret ali password.
Varnost Dockerja
- V produkcijskem okolju uporabljajte uporabnika brez korenskih pravic
- Skrivnosti priklopite kot nosilce samo za branje
- Datotek
.envnikoli ne kopirajte v slike Docker - Za izključitev občutljivih datotek uporabite
.dockerignore - Ko uporabljate HTTPS, nastavite
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
Odvisnosti
- Redno izvajajte
npm audit(npm run audit:depszajema glavni del + electron) - Odvisnosti redno posodabljajte
- Projekt uporablja
husky+lint-stagedza preverjanja pred potrditvijo sprememb (lint-staged + check-docs-sync + check:any-budget:t11) - Cevovod CI ob vsaki potisnitvi izvede varnostna pravila ESLint (
no-eval,no-implied-eval,no-new-func= napaka) - Konstante ponudnikov so ob nalaganju modula preverjene z Zod (
src/shared/validation/schemas.ts) - Uporabljene so knjižnice z varnimi privzetimi nastavitvami:
dompurify/isomorphic-dompurify(XSS),jose(JWT),better-sqlite3(brez tveganja SQLi zaradi parametriziranih poizvedb),bcryptjs(zgoščevanje gesel)
Stroga varnostna pravila
Ta pravila uveljavljajo orodja in pregledovalci:
- Nikoli ne potrjujte skrivnosti v repozitorij —
.envje izključen z gitignore;.env.exampleje predloga (brez literalnih vrednosti, samo komentarji — glejte PUBLIC_CREDS.md spodaj) - Nikoli ne uporabljajte
eval(),new Function()ali implicitnega eval — to uveljavlja ESLint - Nikoli ne zaobidite kavljev Husky (
--no-verify,--no-gpg-sign) brez izrecne odobritve upravljavca - V poteh nikoli ne pišite surovega SQL-a — vedno uporabite
src/lib/db/(parametrizirano) - Vhode vedno preverite z Zod —
src/shared/validation/schemas.ts - Vedno prečistite glave nadrejenih strežnikov — seznam prepovedanih vrednosti je v
src/shared/constants/upstreamHeaders.ts - Poverilnice šifrirajte pri shranjevanju — AES-256-GCM prek
src/lib/db/encryption.ts - Javne identifikatorje OAuth nadrejenih storitev obravnavajte prek
resolvePublicCred()— v izvorno kodo nikoli ne vdelujte literalnih vrednostiAIza…/GOCSPX-…/…apps.googleusercontent.com. Glejtedocs/security/PUBLIC_CREDS.md. - Odzive z napakami ustvarjajte prek
buildErrorBody()/sanitizeErrorMessage()— surovih vrednostierr.stack/err.messagenikoli ne vključujte v telesa odzivov HTTP / SSE / izvajalnika / MCP. Glejtedocs/security/ERROR_SANITIZATION.md. - Izvajalne vrednosti za
exec()/spawn()posredujte prek možnostienv— zunanjih poti ali nezaupanja vrednih vrednosti nikoli ne vstavljajte z interpolacijo nizov v skripte, posredovane lupini. Referenca:src/mitm/cert/install.ts::updateNssDatabases. - Dajte prednost knjižnicam z varnimi privzetimi nastavitvami — glejte tldrsec/awesome-secure-defaults (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Uporabite jih, preden razvijete lastno rešitev.
Ugotovitve pregledovalnikov dobavne verige (Socket.dev / Snyk / podobni)
Objavljeni artefakt npm omniroute vključuje gradnjo Next.js output: "standalone",
kar pomeni, da se vsak obravnavalnik poti — vključno z dokumentiranimi privilegiranimi
funkcijami (MITM, uvoz Zed, Cloud Sync, vgrajeni nadzornik storitev) — znajde
v pomanjšanih delih .next/server/*.js. Hevristični pregledovalniki dobavne verige
te dele pogosto primerjajo z vzorci podpisov zlonamerne programske opreme.
Za vsako kategorijo ugotovitev vzdržujemo potrdilo vzdrževalca za posamezno ugotovitev:
docs/security/SOCKET_DEV_FINDINGS.md— zemljevid posameznih ugotovitev: izvorna datoteka ↔ označeni del ↔ vedenje ↔ omilitveni ukrep, uporabljen v v3.8.6.- Bloki
SECURITY-AUDITOR-NOTE:v izvorni kodi pri vsaki označeni funkciji kažejo nazaj na isti dokument.
Uporabniki, katerih cevovod ne more omiliti opozorila, naj gradijo z
OMNIROUTE_BUILD_PROFILE=minimal npm run build. To štiri občutljive module
nadomesti z nadomestki, ki med izvajanjem vrnejo HTTP 503 feature-disabled,
zato privilegirane kodne poti fizično niso prisotne v paketu.
Postopek objave je opisan v dokumentu docs/security/SOCKET_DEV_FINDINGS.md.
Viri
docs/architecture/AUTHZ_GUIDE.md— cevovod avtorizacijedocs/security/GUARDRAILS.md— ogrodje varovaldocs/security/COMPLIANCE.md— revizijski dnevnik in hrambadocs/security/PUBLIC_CREDS.md— obvezen vzorec za javne poverilnice nadrejenih storitevdocs/security/ERROR_SANITIZATION.md— obvezen vzorec za odzive z napakamidocs/security/SOCKET_DEV_FINDINGS.md— potrdilo vzdrževalca za ugotovitve pregledovalnikov dobavne verigedocs/architecture/RESILIENCE_GUIDE.md— odklopnik + obdobje ohlajanja + zaklepdocs/security/STEALTH_GUIDE.md— prepoznavanje prstnih odtisov TLS (pravno/etično obvestilo)CLAUDE.md— stroga pravila za agente umetne inteligence- tldrsec/awesome-secure-defaults — kuriran nabor privzeto varnih knjižnic