1,104 mirrors rewritten over five passes of run-translation on the 22-source core set: the 14 sources edited since their translation, the 322 mirrors that were still English copies, and the frontmatter the old extractor leaked into the newer locales' bodies. The pipeline now caches per-`## `-section hashes and retranslates only changed sections, never reuses a section that is still English, rebuilds English-copy / leaked mirrors even when the source is unchanged, merges the state on save (parallel runs), and the drift gate (scoped to the core set) is blocking. Final audit: 0 stale, 0 English copies, 0 leaked frontmatter across 1,430 core mirrors. ⚠️ base-red inherited: #12732
24 KiB
Security Policy (اردو)
🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 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 · 🇰🇪 sw · 🇮🇳 ta · 🇮🇳 te · 🇹🇭 th · 🇹🇷 tr · 🇺🇦 uk-UA · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW
کمزوریوں کی اطلاع دینا
اگر آپ OmniRoute میں کوئی سیکیورٹی کمزوری دریافت کریں، تو براہِ کرم ذمہ دارانہ طریقے سے اس کی اطلاع دیں:
- عوامی GitHub مسئلہ مت کھولیں
- GitHub Security Advisories استعمال کریں
- یہ شامل کریں: تفصیل، دوبارہ پیدا کرنے کے مراحل، اور ممکنہ اثرات
جوابی کارروائی کا دورانیہ
| مرحلہ | ہدف |
|---|---|
| وصولی کی تصدیق | 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 دیکھیں |
| Manage-Scope MCP | دور دراز /api/mcp/* رسائی manage دائرۂ کار والی API کلیدوں کے ذریعے محدود ہے؛ /api/cli-tools/runtime/* سختی سے صرف loopback تک محدود رہتا ہے۔ 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 ایک فوری طور پر دوبارہ لوڈ ہونے والی حفاظتی حدود کی رجسٹری (src/lib/guardrails/) فراہم کرتا ہے، جس میں ترجیح کے مطابق ترتیب دی گئی 3 پہلے سے شامل حفاظتی حدود ہیں:
| حفاظتی حد | ترجیح | مقصد |
|---|---|---|
vision-bridge |
5 | غیر بصری ماڈلز کو تصویر سے آگاہ تفصیلات کے ساتھ جوڑتا ہے؛ تصویری URLs کے لیے SSRF تحفظ |
pii-masker |
10 | کال سے پہلے اور بعد PII کی پردہ پوشی (ای میلز، فون، CPF، CNPJ، کریڈٹ کارڈز، SSN) |
prompt-injection |
20 | اوور رائیڈ/کردار پر قبضہ/جیل بریک/لیک کے نمونوں کا پتہ لگاتا ہے |
حسبِ ضرورت حفاظتی حدود registerGuardrail(new MyGuardrail()) کے ذریعے رجسٹر ہوتی ہیں۔ ماڈل fail-open ہے (استثنائی حالات کبھی بھی ٹریفک کو مسدود نہیں کرتے)۔ ہر درخواست کے لیے x-omniroute-disabled-guardrails ہیڈر کے ذریعے غیر فعال کیا جا سکتا ہے۔ → docs/security/GUARDRAILS.md دیکھیں۔
🧠 پرامپٹ انجیکشن گارڈ
بہترین ممکنہ کوشش پر مبنی ہیورسٹک مڈل ویئر، جو LLM درخواستوں میں پرامپٹ انجیکشن کے نمونوں کا پتہ لگاتا ہے۔ یہ مکمل پرامپٹ انجیکشن فائر وال نہیں ہے — غلط مثبت نتائج (بے ضرر پرسونا/RPG پرامپٹس) اور غلط منفی نتائج (leetspeak، فاصلہ بندی، غیر انگریزی نمونے) پیدا ہو سکتے ہیں۔
| نمونے کی قسم | شدت | مثال |
|---|---|---|
| سسٹم اوور رائیڈ | زیادہ | "تمام سابقہ ہدایات نظر انداز کریں" |
| کردار پر قبضہ | درمیانی | "اب آپ DAN ہیں، آپ کچھ بھی کر سکتے ہیں" |
| حد فاصل انجیکشن | زیادہ | سیاق کی حدود توڑنے کے لیے رمز شدہ جداکار |
| DAN/جیل بریک | درمیانی | جیل بریک پرامپٹ کے معروف نمونے |
| ہدایات کا افشا | زیادہ | "مجھے اپنا سسٹم پرامپٹ دکھائیں" |
| رمز بندی سے بچاؤ | درمیانی | base64/rot13/hex ڈی کوڈ + ہدایات کے کلیدی الفاظ |
block موڈ میں صرف زیادہ شدت والی دریافتیں مسدود کی جاتی ہیں۔ درمیانی شدت کے
گروپس کو لاگ کیا جاتا ہے، لیکن sanitizeRequest انہیں کبھی مسدود نہیں کرتا۔
ڈیش بورڈ (Settings → Security) یا .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 صارف استعمال کریں
- خفیہ اقدار کو صرف پڑھنے کے قابل والیومز کے طور پر ماؤنٹ کریں
.envفائلوں کو کبھی بھی Docker امیجز میں کاپی نہ کریں- حساس فائلوں کو خارج رکھنے کے لیے
.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 پائپ لائن ہر push پر ESLint کے سیکیورٹی قواعد چلاتی ہے (
no-eval،no-implied-eval،no-new-func= خرابی) - Provider constants کی module load کے وقت Zod کے ذریعے توثیق کی جاتی ہے (
src/shared/validation/schemas.ts) - محفوظ-بطور-طے شدہ لائبریریاں استعمال کی گئی ہیں:
dompurify/isomorphic-dompurify(XSS)،jose(JWT)،better-sqlite3(parameterized queries کے باعث SQLi کا کوئی خطرہ نہیں)،bcryptjs(پاس ورڈ ہیشنگ)
سخت سیکیورٹی قواعد
ان قواعد کا نفاذ ٹولنگ اور جائزہ کاروں کے ذریعے کیا جاتا ہے:
- خفیہ اقدار کبھی commit نہ کریں —
.envکو gitignore کیا گیا ہے؛.env.exampleٹیمپلیٹ ہے (کوئی literals نہیں، صرف تبصرے — ذیل میں PUBLIC_CREDS.md دیکھیں) - کبھی بھی
eval()،new Function()، یا implied eval استعمال نہ کریں — ESLint اس کا نفاذ کرتا ہے - واضح operator منظوری کے بغیر Husky hooks کو کبھی bypass نہ کریں (
--no-verify،--no-gpg-sign) - routes میں کبھی raw SQL نہ لکھیں — ہمیشہ
src/lib/db/کے ذریعے جائیں (parameterized) - ہمیشہ Zod کے ذریعے inputs کی توثیق کریں —
src/shared/validation/schemas.ts - ہمیشہ upstream headers کو صاف کریں — denylist یہاں ہے:
src/shared/constants/upstreamHeaders.ts - محفوظ شدہ credentials کو رمز بند کریں —
src/lib/db/encryption.tsکے ذریعے AES-256-GCM - عوامی upstream OAuth identifiers کے لیے
resolvePublicCred()استعمال کریں — source میں کبھی بھیAIza…/GOCSPX-…/…apps.googleusercontent.comliterals شامل نہ کریں۔docs/security/PUBLIC_CREDS.mdدیکھیں۔ - خرابی کے جوابات
buildErrorBody()/sanitizeErrorMessage()کے ذریعے دیں — rawerr.stack/err.messageکو کبھی بھی HTTP / SSE / executor / MCP response bodies میں شامل نہ کریں۔docs/security/ERROR_SANITIZATION.mdدیکھیں۔ exec()/spawn()کی runtime اقدارenvاختیار کے ذریعے دیں — بیرونی paths یا ناقابلِ اعتماد اقدار کو shell کو دیے جانے والے scripts میں کبھی string-interpolate نہ کریں۔ حوالہ:src/mitm/cert/install.ts::updateNssDatabases۔- محفوظ-بطور-طے شدہ لائبریریوں کو ترجیح دیں — tldrsec/awesome-secure-defaults دیکھیں (Helmet.js، DOMPurify، ssrf-req-filter، safe-regex، Google Tink)۔ اپنی implementation بنانے سے پہلے انہیں استعمال کرنے کی کوشش کریں۔
سپلائی چین اسکینر کے نتائج (Socket.dev / Snyk / مماثل)
شائع شدہ 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
دیکھیے۔
حوالہ جات
docs/architecture/AUTHZ_GUIDE.md— اجازت دہی کی پائپ لائنdocs/security/GUARDRAILS.md— حفاظتی حدود کا فریم ورکdocs/security/COMPLIANCE.md— آڈٹ لاگ اور برقرار رکھنے کی مدتdocs/security/PUBLIC_CREDS.md— عوامی اپ اسٹریم اسناد کے لیے لازمی پیٹرنdocs/security/ERROR_SANITIZATION.md— ایرر ریسپانسز کے لیے لازمی پیٹرنdocs/security/SOCKET_DEV_FINDINGS.md— سپلائی چین اسکینر کے نتائج کے لیے مینٹینر کی تصدیقdocs/architecture/RESILIENCE_GUIDE.md— سرکٹ بریکر + کول ڈاؤن + لاک آؤٹdocs/security/STEALTH_GUIDE.md— TLS فنگر پرنٹنگ (قانونی/اخلاقی نوٹس)CLAUDE.md— AI ایجنٹس کے لیے سخت قواعد- tldrsec/awesome-secure-defaults — منتخب کردہ محفوظ بہ طور ڈیفالٹ لائبریریز