Skip to content

Latest commit

 

History

History
268 lines (204 loc) · 29.7 KB

SECURITY.md

File metadata and controls

268 lines (204 loc) · 29.7 KB

Security Policy (ગુજરાતી)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇧🇦 bs · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇬🇷 el · 🇪🇸 es · 🇪🇪 et · 🇮🇷 fa · 🇫🇮 fi · 🇫🇷 fr · 🇮🇪 ga · 🇳🇬 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 · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


નબળાઈઓની જાણ કરવી

જો તમને OmniRouteમાં કોઈ સુરક્ષા નબળાઈ મળે, તો કૃપા કરીને જવાબદારીપૂર્વક તેની જાણ કરો:

  1. સાર્વજનિક GitHub issue ખોલશો નહીં
  2. GitHub Security Advisoriesનો ઉપયોગ કરો
  3. આ વિગતો સામેલ કરો: વર્ણન, પુનઃઉત્પાદનનાં પગલાં અને સંભવિત અસર

પ્રતિસાદની સમયરેખા

તબક્કો લક્ષ્ય
સ્વીકૃતિ 48 કલાક
પ્રાથમિકતા નિર્ધારણ અને મૂલ્યાંકન 5 કાર્યકારી દિવસ
પૅચ રિલીઝ 14 કાર્યકારી દિવસ (ગંભીર નબળાઈ માટે)

સમર્થિત વર્ઝન

વર્ઝન સપોર્ટની સ્થિતિ
3.8.x ✅ સક્રિય
3.7.x ✅ સુરક્ષા
< 3.7.0 ❌ અસમર્થિત

સુરક્ષા આર્કિટેક્ચર

OmniRoute બહુ-સ્તરીય સુરક્ષા મોડેલ અમલમાં મૂકે છે:

વિનંતી → CORS → Authz પાઇપલાઇન (વર્ગીકરણ → નીતિઓ → અમલીકરણ)
       → સુરક્ષા નિયંત્રણો (PII માસ્કર, પ્રોમ્પ્ટ ઇન્જેક્શન, વિઝન બ્રિજ)
       → દર મર્યાદાકારક → સર્કિટ બ્રેકર → કૂલડાઉન → મોડેલ લૉકઆઉટ → પ્રદાતા

🔐 પ્રમાણીકરણ અને અધિકૃતતા

સુવિધા અમલીકરણ
ડૅશબોર્ડ લૉગિન JWT ટોકન (HttpOnly કુકીઝ) સાથે પાસવર્ડ-આધારિત પ્રમાણીકરણ
API કી પ્રમાણીકરણ CRC માન્યતા સાથે HMAC-સહી કરેલી કીઓ
OAuth 2.0 + PKCE પ્રદાતા-વિશિષ્ટ બ્રાઉઝર/ડિવાઇસ OAuth જ્યાં સમર્થિત હોય ત્યાં PKCEનો ઉપયોગ કરે છે; ફક્ત-આયાત Devin ઓળખપત્રો અલગથી સંભાળવામાં આવે છે.
ટોકન રિફ્રેશ સમાપ્તિ પહેલાં સ્વચાલિત OAuth ટોકન રિફ્રેશ
સુરક્ષિત કુકીઝ HTTPS પર્યાવરણો માટે AUTH_COOKIE_SECURE=true
Authz પાઇપલાઇન રૂટ વર્ગીકરણ (PUBLIC / CLIENT_API / MANAGEMENT) — docs/architecture/AUTHZ_GUIDE.md જુઓ
રૂટ ગાર્ડ સ્તરો મેનેજમેન્ટ રૂટ્સ માટે 3-સ્તરીય મોડેલ (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — docs/security/ROUTE_GUARD_TIERS.md જુઓ
મેનેજ-સ્કોપ MCP દૂરસ્થ /api/mcp/* ઍક્સેસ manage સ્કોપ ધરાવતી API કીઓ દ્વારા નિયંત્રિત છે; /api/cli-tools/runtime/* સખત લૂપબૅક પૂરતું મર્યાદિત રહે છે. ROUTE_GUARD_TIERS જુઓ
MCP સ્કોપ્સ 32 સૂક્ષ્મ સ્કોપ્સ (read:health, write:combos, execute:completions વગેરે) — docs/frameworks/MCP-SERVER.md જુઓ

🛡️ સંગ્રહિત ડેટાનું એન્ક્રિપ્શન

SQLiteમાં સંગ્રહિત તમામ સંવેદનશીલ ડેટા scrypt કી ડેરિવેશન સાથે AES-256-GCMનો ઉપયોગ કરીને એન્ક્રિપ્ટ કરવામાં આવે છે:

  • API કીઓ, ઍક્સેસ ટોકન, રિફ્રેશ ટોકન અને ID ટોકન
  • વર્ઝનયુક્ત ફૉર્મેટ: enc:v1:<iv>:<ciphertext>:<authTag>
  • જ્યારે STORAGE_ENCRYPTION_KEY સેટ ન હોય ત્યારે પાસથ્રૂ મોડ (સાદું લખાણ)
# એન્ક્રિપ્શન કી બનાવો:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🛡️ સુરક્ષા નિયંત્રણોનું ફ્રેમવર્ક

OmniRoute પ્રાથમિકતાના ક્રમમાં ગોઠવાયેલાં 3 બિલ્ટ-ઇન સુરક્ષા નિયંત્રણો સાથે હૉટ-રીલોડ કરી શકાય તેવી સુરક્ષા નિયંત્રણોની રજિસ્ટ્રી (src/lib/guardrails/) પ્રદાન કરે છે:

સુરક્ષા નિયંત્રણ પ્રાથમિકતા હેતુ
vision-bridge 5 છબી-જાગૃત વર્ણનો દ્વારા નૉન-વિઝન મોડેલોને જોડે છે; છબી URL માટે SSRF સુરક્ષા
pii-masker 10 કૉલ પહેલાં અને પછી PIIનું રીડૅક્શન (ઇમેઇલ, ફોન, CPF, CNPJ, ક્રેડિટ કાર્ડ, SSN)
prompt-injection 20 ઓવરરાઇડ/રોલ-હાઇજૅક/જેલબ્રેક/લીક પૅટર્ન શોધે છે

કસ્ટમ સુરક્ષા નિયંત્રણો registerGuardrail(new MyGuardrail()) દ્વારા રજિસ્ટર થાય છે. મોડેલ ફેઇલ-ઓપન છે (અપવાદો ક્યારેય ટ્રાફિકને અવરોધતા નથી). x-omniroute-disabled-guardrails હેડર દ્વારા દરેક વિનંતી માટે અલગથી ઑપ્ટ-આઉટ કરી શકાય છે. → docs/security/GUARDRAILS.md જુઓ.

🧠 પ્રોમ્પ્ટ ઇન્જેક્શન સુરક્ષા

LLM વિનંતીઓમાં પ્રોમ્પ્ટ ઇન્જેક્શન પૅટર્ન શોધતું શ્રેષ્ઠ-પ્રયાસ આધારિત હ્યુરિસ્ટિક મિડલવેર. આ સંપૂર્ણ પ્રોમ્પ્ટ-ઇન્જેક્શન ફાયરવૉલ નથી — તે ખોટા પૉઝિટિવ (નિર્દોષ પર્સોના/RPG પ્રોમ્પ્ટ) અને ખોટા નેગેટિવ (લીટસ્પીક, સ્પેસિંગ, અંગ્રેજી સિવાયના પૅટર્ન) આપી શકે છે.

પૅટર્નનો પ્રકાર ગંભીરતા ઉદાહરણ
સિસ્ટમ ઓવરરાઇડ ઊંચી "અગાઉની બધી સૂચનાઓ અવગણો"
રોલ હાઇજૅક મધ્યમ "હવે તમે DAN છો, તમે કંઈપણ કરી શકો છો"
ડિલિમિટર ઇન્જેક્શન ઊંચી સંદર્ભની સીમાઓ તોડવા માટે એન્કોડ કરેલા વિભાજકો
DAN/જેલબ્રેક મધ્યમ જાણીતા જેલબ્રેક પ્રોમ્પ્ટ પૅટર્ન
સૂચના લીક ઊંચી "મને તમારો સિસ્ટમ પ્રોમ્પ્ટ બતાવો"
એન્કોડિંગ એવેઝન મધ્યમ base64/rot13/hex ડિકોડ + સૂચનાના કીવર્ડ્સ

block મોડમાં માત્ર ઊંચી ગંભીરતાવાળી શોધ અવરોધવામાં આવે છે. મધ્યમ-ગંભીરતાવાળા વર્ગો લૉગ થાય છે, પરંતુ sanitizeRequest દ્વારા ક્યારેય અવરોધવામાં આવતા નથી.

ડૅશબોર્ડ (સેટિંગ્સ → સુરક્ષા) અથવા .env દ્વારા કૉન્ફિગર કરો:

INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block    # warn | block (ઇન્જેક્શન નીતિ; લેગસી "redact" ઇન્જેક્શન ટેક્સ્ટને દૂર કરતું નથી)
INPUT_SANITIZER_BLOCK_THRESHOLD=high  # high (ડિફૉલ્ટ) | medium | low — આ સ્તરે અથવા તેનાથી ઉપરની ગંભીરતાઓ block મોડમાં અવરોધવામાં આવે છે

🔒 PII રીડૅક્શન

વ્યક્તિગત રીતે ઓળખી શકાય તેવી માહિતીની સ્વચાલિત શોધ અને વૈકલ્પિક રીડૅક્શન:

PII પ્રકાર પેટર્ન પ્રતિસ્થાપન
ઇમેઇલ user@domain.com [EMAIL_REDACTED]
CPF (બ્રાઝિલ) 123.456.789-00 [CPF_REDACTED]
CNPJ (બ્રાઝિલ) 12.345.678/0001-00 [CNPJ_REDACTED]
ક્રેડિટ કાર્ડ 4111-1111-1111-1111 [CC_REDACTED]
ફોન +55 11 99999-9999 [PHONE_REDACTED]
SSN (યુએસ) 123-45-6789 [SSN_REDACTED]
PII_REDACTION_ENABLED=true   # વિનંતીમાં PII પુનર્લેખન; INPUT_SANITIZER_MODEથી સ્વતંત્ર
PII_RESPONSE_SANITIZATION=true  # વૈકલ્પિક: ક્લાયન્ટને પરત કરાતા પ્રદાતાના પ્રતિસાદોમાં PII છુપાવો

🌐 નેટવર્ક સુરક્ષા

સુવિધા વર્ણન
CORS સ્પષ્ટ ક્રોસ-ઓરિજિન મંજૂરીસૂચિ (CORS_ALLOWED_ORIGINS; લેગસી CORS_ORIGIN)
IP ફિલ્ટરિંગ ડૅશબોર્ડમાં મંજૂરીસૂચિ/અવરોધસૂચિ IP રેન્જ
દર મર્યાદા સ્વચાલિત બૅકઑફ સાથે પ્રદાતા-દીઠ દર મર્યાદાઓ
એન્ટિ-થન્ડરિંગ હર્ડ Mutex + કનેક્શન-દીઠ લૉકિંગ કૅસ્કેડિંગ 502ને અટકાવે છે
TLS ફિંગરપ્રિન્ટ બૉટ શોધ ઘટાડવા માટે બ્રાઉઝર-જેવી TLS ફિંગરપ્રિન્ટ સ્પૂફિંગ
CLI ફિંગરપ્રિન્ટ નેટિવ CLI સિગ્નેચર સાથે મેળ ખાતો પ્રદાતા-દીઠ હેડર/બૉડી ક્રમ

🔌 સ્થિતિસ્થાપકતા અને ઉપલબ્ધતા

સુવિધા વર્ણન
સર્કિટ બ્રેકર પ્રદાતા-દીઠ 3-સ્થિતિ (બંધ → ખુલ્લી → અર્ધ-ખુલ્લી), SQLiteમાં સંગ્રહિત
વિનંતી આઇડેમ્પોટેન્સી ડુપ્લિકેટ વિનંતીઓ માટે 5-સેકન્ડની ડીડુપ્લિકેશન વિન્ડો
એક્સ્પોનેન્શિયલ બૅકઑફ વધતા વિલંબ સાથે સ્વચાલિત પુનઃપ્રયાસ
હેલ્થ ડૅશબોર્ડ રીઅલ-ટાઇમ પ્રદાતા સ્વાસ્થ્ય મોનિટરિંગ

📋 અનુપાલન

સુવિધા વર્ણન
લૉગ જાળવણી CALL_LOG_RETENTION_DAYS પછી સ્વચાલિત સફાઈ
નો-લૉગ ઑપ્ટ-આઉટ API કી-દીઠ noLog ફ્લૅગ વિનંતી લૉગિંગને અક્ષમ કરે છે
ઑડિટ લૉગ audit_log ટેબલમાં વહીવટી ક્રિયાઓ ટ્રૅક કરવામાં આવે છે
MCP ઑડિટ તમામ MCP ટૂલ કૉલ માટે SQLite-આધારિત ઑડિટ લૉગિંગ
Zod માન્યતા મોડ્યુલ લોડ સમયે તમામ API ઇનપુટ Zod v4 સ્કીમા વડે માન્ય કરાય છે

આવશ્યક પર્યાવરણ વેરિએબલ્સ

સર્વર શરૂ કરતા પહેલાં તમામ સિક્રેટ્સ સેટ કરેલા હોવા આવશ્યક છે. જો તે ખૂટતા અથવા નબળા હશે, તો સર્વર તરત નિષ્ફળ થશે.

# આવશ્યક — આના વિના સર્વર શરૂ થશે નહીં:
JWT_SECRET=$(openssl rand -base64 48)     # ઓછામાં ઓછા 32 અક્ષરો
API_KEY_SECRET=$(openssl rand -hex 32)    # ઓછામાં ઓછા 16 અક્ષરો

# ભલામણ કરેલ — સંગ્રહિત ડેટા માટે એન્ક્રિપ્શન સક્ષમ કરે છે:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

સર્વર changeme, secret, અથવા password જેવા જાણીતા નબળા મૂલ્યોને સક્રિય રીતે નકારે છે.


Docker સુરક્ષા

  • પ્રોડક્શનમાં non-root વપરાશકર્તાનો ઉપયોગ કરો
  • સિક્રેટ્સને read-only volumes તરીકે માઉન્ટ કરો
  • .env ફાઇલોને ક્યારેય Docker imagesમાં કૉપિ કરશો નહીં
  • સંવેદનશીલ ફાઇલોને બાકાત રાખવા માટે .dockerignoreનો ઉપયોગ કરો
  • HTTPS પાછળ હોય ત્યારે 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

નિર્ભરતાઓ

  • નિયમિતપણે npm audit ચલાવો (npm run audit:deps મુખ્ય + electronને આવરી લે છે)
  • નિર્ભરતાઓને અપડેટ રાખો
  • પ્રોજેક્ટ pre-commit તપાસો માટે husky + lint-stagedનો ઉપયોગ કરે છે (lint-staged + check-docs-sync + check:any-budget:t11)
  • CI pipeline દરેક push પર ESLint સુરક્ષા નિયમો ચલાવે છે (no-eval, no-implied-eval, no-new-func = ભૂલ)
  • Zod દ્વારા module load સમયે provider constants માન્ય કરવામાં આવે છે (src/shared/validation/schemas.ts)
  • ઉપયોગમાં લેવાતી મૂળભૂત રીતે સુરક્ષિત libraries: dompurify / isomorphic-dompurify (XSS), jose (JWT), better-sqlite3 (parameterized queriesને કારણે SQLiનું જોખમ નથી), bcryptjs (પાસવર્ડ hashing)

કડક સુરક્ષા નિયમો

આ નિયમો tooling અને reviewers દ્વારા લાગુ કરવામાં આવે છે:

  1. સિક્રેટ્સ ક્યારેય commit કરશો નહીં — .env gitignoreમાં છે; .env.example template છે (કોઈ literals નહીં, માત્ર comments — નીચે PUBLIC_CREDS.md જુઓ)
  2. eval(), new Function(), અથવા implied evalનો ક્યારેય ઉપયોગ કરશો નહીં — ESLint આને લાગુ કરે છે
  3. સ્પષ્ટ operator મંજૂરી વિના Husky hooksને ક્યારેય bypass કરશો નહીં (--no-verify, --no-gpg-sign)
  4. Routesમાં ક્યારેય raw SQL લખશો નહીં — હંમેશાં src/lib/db/ મારફતે જાઓ (parameterized)
  5. Inputsને હંમેશાં Zod વડે માન્ય કરો — src/shared/validation/schemas.ts
  6. Upstream headersને હંમેશાં sanitize કરો — src/shared/constants/upstreamHeaders.tsમાં denylist
  7. સંગ્રહિત credentialsને encrypt કરો — src/lib/db/encryption.ts મારફતે AES-256-GCM
  8. resolvePublicCred() મારફતે સાર્વજનિક upstream OAuth identifiers — sourceમાં ક્યારેય AIza… / GOCSPX-… / …apps.googleusercontent.com literals embed કરશો નહીં. docs/security/PUBLIC_CREDS.md જુઓ.
  9. buildErrorBody() / sanitizeErrorMessage() મારફતે error responses — HTTP / SSE / executor / MCP response bodiesમાં ક્યારેય raw err.stack / err.message મૂકશો નહીં. docs/security/ERROR_SANITIZATION.md જુઓ.
  10. env option મારફતે exec() / spawn() runtime values — shellમાં મોકલાતી scriptsમાં external paths અથવા અવિશ્વસનીય valuesને ક્યારેય string-interpolate કરશો નહીં. સંદર્ભ: src/mitm/cert/install.ts::updateNssDatabases.
  11. મૂળભૂત રીતે સુરક્ષિત librariesને પ્રાધાન્ય આપો — tldrsec/awesome-secure-defaults જુઓ (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). પોતાનું implementation બનાવતા પહેલાં તેનો ઉપયોગ કરો.

સપ્લાય-ચેઇન સ્કેનરના તારણો (Socket.dev / Snyk / સમાન)

વ્યાપ નોંધ: રિપોઝિટરીના રૂટ પરની socket.yml ફક્ત પ્રકાશિત npm આર્ટિફેક્ટના Socket.dev રજિસ્ટ્રી-સાઇડ પોસ્ટ-પબ્લિશ સ્કેન માટે projectIgnorePaths ને આકાર આપે છે — તે ફરજિયાત CI/PR મર્જ ગેટ નથી. .github/workflows માં કોઈ વર્કફ્લો, કોઈ package.json સ્ક્રિપ્ટ અને કોઈ Makefile ટાર્ગેટ Socket.dev ને ચલાવતું નથી.

પ્રકાશિત omniroute npm આર્ટિફેક્ટ Next.js output: "standalone" બિલ્ડને બંડલ કરે છે, જેનો અર્થ એ છે કે દરેક રૂટ હેન્ડલર — દસ્તાવેજીકૃત વિશેષાધિકારવાળી સુવિધાઓ (MITM, Zed ઇમ્પોર્ટ, Cloud Sync, એમ્બેડેડ સર્વિસ સુપરવાઇઝર) સહિત — અંતે .next/server/*.js મિનિફાઇડ ચંક્સમાં સામેલ થાય છે. હ્યુરિસ્ટિક સપ્લાય-ચેઇન સ્કેનરો વારંવાર તે ચંક્સને માલવેર સિગ્નેચર્સ સાથે પેટર્ન-મેચ કરે છે.

અમે ઉપયોગ કરીએ છીએ તે સ્કેનર કૉન્ફિગરેશન રેપો રૂટમાં socket.yml ખાતે છે (Socket.dev GitHub App ફોર્મેટ v2 — જુઓ https://docs.socket.dev/docs/socket-yml). તે સ્પષ્ટપણે વિતરિત ન થતી ડિરેક્ટરીઓ (tests/, _tasks/, _references/, _ideia/, _mono_repo/, docs/, વગેરે)ને બાકાત રાખે છે, જેથી સ્કેનર ફક્ત એવા કોડ પાથ્સ વિશે રિપોર્ટ કરે જે ખરેખર પ્રકાશિત વપરાશકર્તાઓ સુધી પહોંચે — સ્કેન પોતે આ ફાઇલ વાંચતી Socket GitHub App દ્વારા ચલાવવામાં આવે છે, આ રિપોઝિટરીના કોઈ વર્કફ્લો દ્વારા નહીં.

દરેક તારણની શ્રેણી માટે અમે તારણ-દીઠ મેઇન્ટેનર પ્રમાણન જાળવીએ છીએ:

  • docs/security/SOCKET_DEV_FINDINGS.md — તારણ-દીઠ નકશો: સોર્સ ફાઇલ ↔ ફ્લૅગ કરાયેલ ચંક ↔ વર્તણૂક ↔ v3.8.6 માં લાગુ કરાયેલ નિવારણ.
  • દરેક ફ્લૅગ કરાયેલા ફંક્શન પરના ઇન-સોર્સ SECURITY-AUDITOR-NOTE: બ્લૉક્સ એ જ દસ્તાવેજ તરફ નિર્દેશ કરે છે.

જે વપરાશકર્તાઓની પાઇપલાઇન આ ચેતવણીને શિથિલ કરી શકતી નથી તેમના માટે: OMNIROUTE_BUILD_PROFILE=minimal npm run build વડે બિલ્ડ કરો. તે ચાર સંવેદનશીલ મોડ્યુલોને એવા સ્ટબ્સથી બદલે છે જે રનટાઇમ પર HTTP 503 feature-disabled પરત કરે છે, જેથી વિશેષાધિકારવાળા કોડ પાથ્સ બંડલમાંથી ભૌતિક રીતે ગેરહાજર રહે છે. પ્રકાશન પ્રક્રિયા માટે docs/security/SOCKET_DEV_FINDINGS.md જુઓ.

સંદર્ભો