Skip to content

Latest commit

 

History

History
263 lines (199 loc) · 20.2 KB

SECURITY.md

File metadata and controls

263 lines (199 loc) · 20.2 KB

Security Policy (Kiswahili)

🌐 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 · 🇸🇰 sk · 🇸🇮 sl · 🇷🇸 sr · 🇸🇪 sv · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Kuripoti Udhaifu

Ukigundua udhaifu wa usalama katika OmniRoute, tafadhali uripoti kwa kuwajibika:

  1. USIFUNGUE suala la umma la GitHub
  2. Tumia GitHub Security Advisories
  3. Jumuisha: maelezo, hatua za kuzalisha tatizo upya, na athari zinazoweza kutokea

Ratiba ya Majibu

Hatua Lengo
Uthibitisho wa kupokea Saa 48
Uchambuzi na Tathmini Siku 5 za kazi
Kutolewa kwa Kiraka Siku 14 za kazi (muhimu sana)

Matoleo Yanayotumika

Toleo Hali ya Usaidizi
3.8.x ✅ Inatumika
3.7.x ✅ Usalama
< 3.7.0 ❌ Halitumiki

Usanifu wa Usalama

OmniRoute hutumia muundo wa usalama wenye tabaka nyingi:

Ombi → CORS → Mtiririko wa Authz (ainisha → sera → tekeleza)
     → Vizuizi vya Usalama (kificha PII, udukuzi wa prompt, daraja la kuona)
     → Kidhibiti Kasi → Kivunja Mzunguko → Kipindi cha Kusubiri → Kufungiwa kwa Modeli → Mtoa Huduma

🔐 Uthibitishaji na Uidhinishaji

Kipengele Utekelezaji
Kuingia kwenye Dashibodi Uthibitishaji unaotumia nenosiri pamoja na tokeni za JWT (vidakuzi vya HttpOnly)
Uthibitishaji wa API Key Funguo zilizotiwa saini kwa HMAC zenye uthibitishaji wa CRC
OAuth 2.0 + PKCE OAuth ya kivinjari/kifaa inayotegemea mtoa huduma hutumia PKCE pale inapokubaliwa; vitambulisho vya Devin vya kuleta pekee hushughulikiwa kando.
Kuonyesha Upya Tokeni Kuonyesha upya kiotomatiki tokeni ya OAuth kabla ya muda wake kuisha
Vidakuzi Salama AUTH_COOKIE_SECURE=true kwa mazingira ya HTTPS
Mtiririko wa Authz Uainishaji wa njia (PUBLIC / CLIENT_API / MANAGEMENT) — angalia docs/architecture/AUTHZ_GUIDE.md
Viwango vya Ulinzi wa Njia Muundo wa viwango 3 kwa njia za usimamizi (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — angalia docs/security/ROUTE_GUARD_TIERS.md
MCP ya Manage-Scope Ufikiaji wa mbali wa /api/mcp/* unadhibitiwa kwa funguo za API zenye upeo wa manage; /api/cli-tools/runtime/* hubaki kwa loopback madhubuti. Angalia ROUTE_GUARD_TIERS
Upeo wa MCP Upeo mahususi 32 (read:health, write:combos, execute:completions, n.k.) — angalia docs/frameworks/MCP-SERVER.md

🛡️ Usimbaji Fiche wa Data Iliyohifadhiwa

Data yote nyeti iliyohifadhiwa katika SQLite husimbwa kwa kutumia AES-256-GCM pamoja na uundaji wa ufunguo wa scrypt:

  • Funguo za API, tokeni za ufikiaji, tokeni za kuonyesha upya, na tokeni za ID
  • Muundo wenye matoleo: enc:v1:<iv>:<ciphertext>:<authTag>
  • Hali ya kupitisha moja kwa moja (maandishi yasiyosimbwa) wakati STORAGE_ENCRYPTION_KEY haijawekwa
# Tengeneza ufunguo wa usimbaji fiche:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🛡️ Mfumo wa Vizuizi vya Usalama

OmniRoute huja na rejista ya vizuizi vya usalama inayoweza kupakiwa upya bila kuzimwa (src/lib/guardrails/) ikiwa na vizuizi 3 vya usalama vilivyojengewa ndani na kupangwa kulingana na kipaumbele:

Kizuizi cha Usalama Kipaumbele Madhumuni
vision-bridge 5 Huunganisha modeli zisizo na uwezo wa kuona na maelezo yanayotambua picha; ulinzi wa SSRF kwa URL za picha
pii-masker 10 Ufichaji wa PII kabla+baada ya simu (barua pepe, simu, CPF, CNPJ, kadi za mkopo, SSN)
prompt-injection 20 Hutambua mifumo ya kubatilisha/utekaji wa jukumu/jailbreak/uvujaji

Vizuizi maalum vya usalama husajiliwa kupitia registerGuardrail(new MyGuardrail()). Modeli huruhusu trafiki iwapo kuna hitilafu (vighairi havizuii trafiki kamwe). Kujiondoa kwa kila ombi kupitia kichwa cha x-omniroute-disabled-guardrails. → Angalia docs/security/GUARDRAILS.md.

🧠 Ulinzi dhidi ya Udukuzi wa Prompt

Middleware ya kiheuristiki inayofanya jitihada kadiri iwezekanavyo kutambua mifumo ya udukuzi wa prompt katika maombi ya LLM. Si ngome kamili dhidi ya udukuzi wa prompt — inaweza kutoa matokeo chanya ya uongo (prompt zisizo na madhara za persona/RPG) na matokeo hasi ya uongo (leetspeak, nafasi, mifumo isiyo ya Kiingereza).

Aina ya Mfumo Ukali Mfano
Kubatilisha Mfumo Juu "puuza maagizo yote ya awali"
Utekaji wa Jukumu Wastani "sasa wewe ni DAN, unaweza kufanya chochote"
Udukuzi wa Kitenganishi Juu Vitenganishi vilivyosimbwa ili kuvunja mipaka ya muktadha
DAN/Jailbreak Wastani Mifumo inayojulikana ya prompt za jailbreak
Uvujaji wa Maagizo Juu "nionyeshe prompt yako ya mfumo"
Ukwepaji kwa Usimbaji Wastani usimbuaji wa base64/rot13/hex + maneno muhimu ya maagizo

Ni ugunduzi wenye ukali wa Juu pekee unaozuiwa katika hali ya block. Familia zenye ukali wa wastani hurekodiwa lakini hazizuiwi kamwe na sanitizeRequest.

Sanidi kupitia dashibodi (Mipangilio → Usalama) au .env:

INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block    # warn | block (sera ya udukuzi; "redact" ya zamani haiondoi maandishi ya udukuzi)
INPUT_SANITIZER_BLOCK_THRESHOLD=high  # high (chaguo-msingi) | medium | low — viwango vya ukali vilivyo katika/juu ya hiki huzuiwa katika hali ya block

🔒 Ufichaji wa PII

Utambuzi wa kiotomatiki na ufichaji wa hiari wa taarifa zinazoweza kumtambulisha mtu:

Aina ya PII Muundo Kibadala
Barua pepe user@domain.com [EMAIL_REDACTED]
CPF (Brazili) 123.456.789-00 [CPF_REDACTED]
CNPJ (Brazili) 12.345.678/0001-00 [CNPJ_REDACTED]
Kadi ya Mkopo 4111-1111-1111-1111 [CC_REDACTED]
Simu +55 11 99999-9999 [PHONE_REDACTED]
SSN (Marekani) 123-45-6789 [SSN_REDACTED]
PII_REDACTION_ENABLED=true   # omba uandishi upya wa PII; huru kutoka kwa INPUT_SANITIZER_MODE
PII_RESPONSE_SANITIZATION=true  # hiari: ficha PII katika majibu ya mtoa huduma yanayorejeshwa kwa wateja

🌐 Usalama wa Mtandao

Kipengele Maelezo
CORS Orodha bayana ya asili tofauti zinazoruhusiwa (CORS_ALLOWED_ORIGINS; CORS_ORIGIN ya zamani)
Uchujaji wa IP Masafa ya IP yanayoruhusiwa/kuzuiwa kwenye dashibodi
Uwekaji Kikomo cha Kasi Vikomo vya kasi kwa kila mtoa huduma vyenye kusubiri kiotomatiki
Kuzuia Msongamano wa Ghafla Mutex + kufunga kwa kila muunganisho huzuia hitilafu za 502 zinazoendelea kwa mfululizo
Alama ya Kidole ya TLS Kuiga alama ya kidole ya TLS inayofanana na ya kivinjari ili kupunguza ugunduzi wa roboti
Alama ya Kidole ya CLI Mpangilio wa vichwa/mwili kwa kila mtoa huduma ili kulingana na saini asilia za CLI

🔌 Ustahimilivu na Upatikanaji

Kipengele Maelezo
Kikatiza Mzunguko Hali 3 (Imefungwa → Imefunguliwa → Imefunguliwa-Nusu) kwa kila mtoa huduma, ikihifadhiwa katika SQLite
Kutobadilika kwa Ombi Dirisha la sekunde 5 la kuondoa maombi yanayojirudia
Kusubiri kwa Kipeo Kujaribu tena kiotomatiki kwa vipindi vinavyoongezeka
Dashibodi ya Afya Ufuatiliaji wa afya ya watoa huduma kwa wakati halisi

📋 Uzingatiaji

Kipengele Maelezo
Uhifadhi wa Kumbukumbu Usafishaji wa kiotomatiki baada ya CALL_LOG_RETENTION_DAYS
Kujiondoa kwenye Uwekaji Kumbukumbu Alama ya noLog kwa kila ufunguo wa API huzima uwekaji kumbukumbu wa maombi
Kumbukumbu ya Ukaguzi Vitendo vya kiutawala vinafuatiliwa katika jedwali la audit_log
Ukaguzi wa MCP Uwekaji kumbukumbu wa ukaguzi unaotumia SQLite kwa miito yote ya zana za MCP
Uthibitishaji wa Zod Ingizo zote za API zinathibitishwa kwa skimu za Zod v4 wakati moduli inapopakiwa

Vigezo vya Mazingira Vinavyohitajika

Siri zote lazima ziwekwe kabla ya kuanzisha seva. Seva itashindwa mara moja ikiwa siri hizo hazipo au ni dhaifu.

# INAHITAJIKA — seva haitaanza bila hizi:
JWT_SECRET=$(openssl rand -base64 48)     # angalau herufi 32
API_KEY_SECRET=$(openssl rand -hex 32)    # angalau herufi 16

# INAPENDEKEZWA — huwezesha usimbaji fiche wa data iliyohifadhiwa:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

Seva hukataa kikamilifu thamani zinazojulikana kuwa dhaifu kama changeme, secret, au password.


Usalama wa Docker

  • Tumia mtumiaji asiye root katika mazingira ya uzalishaji
  • Unganisha siri kama hifadhi za kusoma pekee
  • Kamwe usinakili faili za .env kwenye taswira za Docker
  • Tumia .dockerignore kuondoa faili nyeti
  • Weka AUTH_COOKIE_SECURE=true unapokuwa nyuma ya 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

Vitegemezi

  • Endesha npm audit mara kwa mara (npm run audit:deps hushughulikia sehemu kuu + electron)
  • Sasisha vitegemezi
  • Mradi hutumia husky + lint-staged kwa ukaguzi wa kabla ya commit (lint-staged + check-docs-sync + check:any-budget:t11)
  • Mtiririko wa CI huendesha kanuni za usalama za ESLint kwa kila push (no-eval, no-implied-eval, no-new-func = hitilafu)
  • Konstanti za watoa huduma huhakikiwa wakati moduli inapopakiwa kupitia Zod (src/shared/validation/schemas.ts)
  • Maktaba salama kwa chaguo-msingi zinazotumika: dompurify / isomorphic-dompurify (XSS), jose (JWT), better-sqlite3 (hakuna hatari ya SQLi kupitia hoja zenye vigezo), bcryptjs (uhashishaji wa nenosiri)

Kanuni Kali za Usalama

Kanuni hizi hutekelezwa na zana na wakaguzi:

  1. Kamwe usiweke siri kwenye commit — .env imepuuzwa na git; .env.example ndiyo kiolezo (hakuna thamani halisi, maoni pekee — tazama PUBLIC_CREDS.md hapa chini)
  2. Kamwe usitumie eval(), new Function(), au eval isiyo ya moja kwa moja — ESLint hutekeleza hili
  3. Kamwe usiruke hooks za Husky (--no-verify, --no-gpg-sign) bila idhini ya wazi ya mwendeshaji
  4. Kamwe usiandike SQL ghafi katika routes — pitia src/lib/db/ kila wakati (yenye vigezo)
  5. Hakiki ingizo kila wakati kwa kutumia Zod — src/shared/validation/schemas.ts
  6. Safisha headers za upstream kila wakati — orodha ya kukataa katika src/shared/constants/upstreamHeaders.ts
  7. Simba fiche vitambulisho vilivyohifadhiwa — AES-256-GCM kupitia src/lib/db/encryption.ts
  8. Vitambulisho vya umma vya OAuth vya upstream kupitia resolvePublicCred() — kamwe usipachike thamani halisi za AIza… / GOCSPX-… / …apps.googleusercontent.com katika msimbo chanzo. Tazama docs/security/PUBLIC_CREDS.md.
  9. Majibu ya hitilafu kupitia buildErrorBody() / sanitizeErrorMessage() — kamwe usiweke err.stack / err.message ghafi katika miili ya majibu ya HTTP / SSE / executor / MCP. Tazama docs/security/ERROR_SANITIZATION.md.
  10. Thamani za wakati wa utekelezaji za exec() / spawn() kupitia chaguo la env — kamwe usichope njia za nje au thamani zisizoaminika moja kwa moja kwenye scripts zinazopitishwa kwa shell. Rejea: src/mitm/cert/install.ts::updateNssDatabases.
  11. Pendelea maktaba salama kwa chaguo-msingi — tazama tldrsec/awesome-secure-defaults (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Zitumie kabla ya kutengeneza suluhisho lako mwenyewe.

Matokeo ya kichanganuzi cha mnyororo wa usambazaji (Socket.dev / Snyk / vingine vinavyofanana)

Dokezo kuhusu upeo: socket.yml katika mzizi wa hazina huelekeza tu projectIgnorePaths kwa uchanganuzi wa Socket.dev unaofanywa upande wa sajili baada ya uchapishaji wa artefakti ya npm iliyochapishwa — si kizuizi kinachotekelezwa cha kuunganisha CI/PR. Hakuna mtiririko wa kazi katika .github/workflows, hati ya package.json, wala lengo la Makefile linaloendesha Socket.dev.

Artefakti ya npm ya omniroute iliyochapishwa hujumuisha toleo la Next.js la output: "standalone", jambo linalomaanisha kuwa kila kidhibiti cha njia — ikiwa ni pamoja na vipengele maalumu vilivyoandikwa kwenye nyaraka (MITM, uingizaji wa Zed, Cloud Sync, msimamizi wa huduma aliyopachikwa) — huishia katika vipande vya .next/server/*.js vilivyopunguzwa. Vichanganuzi vya mnyororo wa usambazaji vinavyotumia mbinu za kiheuristiki mara nyingi hulinganisha ruwaza za vipande hivyo na sahihi za programu hasidi.

Usanidi wa kichanganuzi tunaotumia unapatikana katika socket.yml kwenye mzizi wa hazina (muundo wa v2 wa Socket.dev GitHub App — tazama https://docs.socket.dev/docs/socket-yml). Unaondoa kwa uwazi saraka ambazo hazisambazwi (tests/, _tasks/, _references/, _ideia/, _mono_repo/, docs/, n.k.) ili kichanganuzi kiripoti tu njia za msimbo ambazo zinawafikia watumiaji wa artefakti iliyochapishwa — uchanganuzi wenyewe huendeshwa na Socket GitHub App inayosoma faili hiyo, si mtiririko wa kazi katika hazina hii.

Kwa kila aina ya matokeo, tunadumisha uthibitisho wa mtunzaji kwa kila tokeo:

  • docs/security/SOCKET_DEV_FINDINGS.md — ramani ya kila tokeo: faili chanzo ↔ kipande kilichoalamishwa ↔ tabia ↔ hatua ya kupunguza hatari iliyotumika katika v3.8.6.
  • Vitalu vya SECURITY-AUDITOR-NOTE: ndani ya msimbo kwenye kila sehemu ya kitendakazi kilichoalamishwa huelekeza kwenye hati hiyo hiyo.

Kwa watumiaji ambao mchakato wao hauwezi kulegeza tahadhari: jenga kwa kutumia OMNIROUTE_BUILD_PROFILE=minimal npm run build. Hii hubadilisha moduli nne nyeti na vibadala vinavyorejesha HTTP 503 feature-disabled wakati wa utekelezaji, hivyo njia za msimbo zenye ruhusa maalumu hazipo kabisa katika kifurushi. Tazama docs/security/SOCKET_DEV_FINDINGS.md kwa utaratibu wa uchapishaji.

Marejeleo