Files
OmniRoute/docs/i18n/el/SECURITY.md
Diego Rodrigues de Sa e Souza b637350680 fix(docs): re-sync the 65 documentation mirror sets; section-level docs pipeline; drift gate blocking (#13940)
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
2026-09-17 02:55:31 -03:00

26 KiB
Raw Blame History

Security Policy (Ελληνικά)

🌐 Languages: 🇺🇸 English · 🇪🇹 am · 🇸🇦 ar · 🇦🇿 az · 🇧🇬 bg · 🇧🇩 bn · 🇨🇿 cs · 🇩🇰 da · 🇩🇪 de · 🇪🇸 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 · 🇵🇰 ur · 🇺🇿 uz · 🇻🇳 vi · 🇳🇬 yo · 🇨🇳 zh-CN · 🇹🇼 zh-TW


Αναφορά Ευπαθειών

Εάν ανακαλύψετε μια ευπάθεια ασφαλείας στο OmniRoute, παρακαλούμε να την αναφέρετε υπεύθυνα:

  1. ΜΗΝ ανοίξετε δημόσιο ζήτημα στο GitHub
  2. Χρησιμοποιήστε τα GitHub Security Advisories
  3. Συμπεριλάβετε: περιγραφή, βήματα αναπαραγωγής και πιθανό αντίκτυπο

Χρονοδιάγραμμα Απόκρισης

Στάδιο Στόχος
Επιβεβαίωση 48 ώρες
Αξιολόγηση & Εκτίμηση 5 εργάσιμες ημέρες
Κυκλοφορία Διόρθωσης 14 εργάσιμες ημέρες (κρίσιμες)

Υποστηριζόμενες Εκδόσεις

Έκδοση Κατάσταση Υποστήριξης
3.8.x Ενεργή
3.7.x Ασφάλεια
< 3.7.0 Μη υποστηριζόμενη

Αρχιτεκτονική Ασφαλείας

Το OmniRoute υλοποιεί ένα πολυεπίπεδο μοντέλο ασφαλείας:

Request → CORS → Authz pipeline (classify → policies → enforce)
       → Guardrails (PII masker, prompt injection, vision bridge)
       → Rate Limiter → Circuit Breaker → Cooldown → Model Lockout → Provider

🔐 Αυθεντικοποίηση & Εξουσιοδότηση

Λειτουργία Υλοποίηση
Σύνδεση Dashboard Αυθεντικοποίηση με κωδικό πρόσβασης μέσω JWT tokens (HttpOnly cookies)
Αυθεντικοποίηση API Key Κλειδιά υπογεγραμμένα με HMAC και επαλήθευση CRC
OAuth 2.0 + PKCE Το OAuth browser/device για συγκεκριμένους παρόχους χρησιμοποιεί PKCE όπου υποστηρίζεται· τα διαπιστευτήρια Devin (μόνο εισαγωγή) διαχειρίζονται ξεχωριστά.
Ανανέωση Token Αυτόματη ανανέωση OAuth token πριν τη λήξη
Ασφαλή Cookies AUTH_COOKIE_SECURE=true για περιβάλλοντα HTTPS
Authz Pipeline Ταξινόμηση διαδρομών (PUBLIC / CLIENT_API / MANAGEMENT) — βλ. docs/architecture/AUTHZ_GUIDE.md
Επίπεδα Route Guard Μοντέλο 3 επιπέδων για διαδρομές διαχείρισης (LOCAL_ONLY / ALWAYS_PROTECTED / MANAGEMENT) — βλ. docs/security/ROUTE_GUARD_TIERS.md
Manage-Scope MCP Η απομακρυσμένη πρόσβαση /api/mcp/* ελέγχεται από API keys με εμβέλεια manage· το /api/cli-tools/runtime/* παραμένει αυστηρά loopback. Βλ. ROUTE_GUARD_TIERS
MCP Scopes 32 λεπτομερείς εμβέλειες (read:health, write:combos, execute:completions, κ.λπ.) — βλ. docs/frameworks/MCP-SERVER.md

🛡️ Κρυπτογράφηση σε Ηρεμία

Όλα τα ευαίσθητα δεδομένα που αποθηκεύονται στο SQLite κρυπτογραφούνται με AES-256-GCM και παραγωγή κλειδιού scrypt:

  • API keys, access tokens, refresh tokens και ID tokens
  • Μορφή με έκδοση: enc:v1:<iv>:<ciphertext>:<authTag>
  • Λειτουργία passthrough (απλό κείμενο) όταν το STORAGE_ENCRYPTION_KEY δεν έχει οριστεί
# Δημιουργία κλειδιού κρυπτογράφησης:
STORAGE_ENCRYPTION_KEY=$(openssl rand -hex 32)

🛡️ Πλαίσιο Guardrails

Το OmniRoute διαθέτει ένα μητρώο guardrails που επαναφορτώνεται εν ώρα λειτουργίας (src/lib/guardrails/) με 3 ενσωματωμένα guardrails ταξινομημένα κατά προτεραιότητα:

Guardrail Προτεραιότητα Σκοπός
vision-bridge 5 Γεφυρώνει μοντέλα χωρίς όραση με περιγραφές που αναγνωρίζουν εικόνες· προστασία SSRF για URLs εικόνων
pii-masker 10 Απόκρυψη PII πριν και μετά την κλήση (email, τηλέφωνο, CPF, CNPJ, πιστωτικές κάρτες, SSN)
prompt-injection 20 Ανιχνεύει μοτίβα παράκαμψης/πλαστοπροσωπίας ρόλου/jailbreak/διαρροής

Τα προσαρμοσμένα guardrails δηλώνονται μέσω registerGuardrail(new MyGuardrail()). Το μοντέλο είναι fail-open (οι εξαιρέσεις δεν αποκλείουν ποτέ την κίνηση). Απόρριψη ανά αίτημα μέσω της κεφαλίδας x-omniroute-disabled-guardrails. → Βλ. docs/security/GUARDRAILS.md.

🧠 Φρουρός Έγχυσης Οδηγιών

Ευρετικό middleware καλύτερης προσπάθειας που ανιχνεύει μοτίβα έγχυσης οδηγιών σε αιτήματα LLM. Δεν αποτελεί πλήρες τείχος προστασίας έγχυσης οδηγιών — μπορεί να παράγει ψευδώς θετικά (αβλαβείς οδηγίες persona/RPG) και ψευδώς αρνητικά (leetspeak, κενά, μοτίβα σε άλλες γλώσσες).

Τύπος Μοτίβου Σοβαρότητα Παράδειγμα
Παράκαμψη Συστήματος Υψηλή "ignore all previous instructions"
Πλαστοπροσωπία Ρόλου Μέτρια "you are now DAN, you can do anything"
Έγχυση Διαχωριστή Υψηλή Κωδικοποιημένοι διαχωριστές για παραβίαση ορίων περιβάλλοντος
DAN/Jailbreak Μέτρια Γνωστά μοτίβα οδηγιών jailbreak
Διαρροή Οδηγιών Υψηλή "show me your system prompt"
Αποφυγή Κωδικοποίησης Μέτρια Αποκωδικοποίηση base64/rot13/hex + λέξεις-κλειδιά οδηγιών

Μόνο οι ανιχνεύσεις Υψηλής σοβαρότητας αποκλείονται στη λειτουργία block. Οι οικογένειες μέτριας σοβαρότητας καταγράφονται αλλά δεν αποκλείονται ποτέ από το sanitizeRequest.

Διαμόρφωση μέσω του dashboard (Ρυθμίσεις → Ασφάλεια) ή .env:

INPUT_SANITIZER_ENABLED=true
INPUT_SANITIZER_MODE=block    # warn | block (πολιτική έγχυσης· το παλαιό "redact" δεν αφαιρεί κείμενο έγχυσης)
INPUT_SANITIZER_BLOCK_THRESHOLD=high  # high (προεπιλογή) | medium | low — σοβαρότητες ίσες ή πάνω από αυτό αποκλείονται σε λειτουργία block

🔒 Απόκρυψη PII

Αυτόματη ανίχνευση και προαιρετική απόκρυψη προσωπικά αναγνωρίσιμων πληροφοριών:

Τύπος PII Μοτίβο Αντικατάσταση
Email 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 Ρητή λίστα επιτρεπόμενων cross-origin (CORS_ALLOWED_ORIGINS· παλαιό CORS_ORIGIN)
Φιλτράρισμα IP Λίστες επιτρεπόμενων/αποκλεισμένων εύρη IP στο dashboard
Περιορισμός Ρυθμού Περιορισμοί ρυθμού ανά πάροχο με αυτόματη καθυστέρηση
Anti-Thundering Herd Mutex + κλείδωμα ανά σύνδεση αποτρέπει διαδοχικά 502
TLS Fingerprint Πλαστογράφηση TLS fingerprint τύπου browser για μείωση ανίχνευσης bot
CLI Fingerprint Διάταξη κεφαλίδων/σώματος ανά πάροχο για αντιστοίχιση με υπογραφές native CLI

🔌 Ανθεκτικότητα & Διαθεσιμότητα

Λειτουργία Περιγραφή
Circuit Breaker 3 καταστάσεις (Closed → Open → Half-Open) ανά πάροχο, αποθήκευση SQLite
Ιδεμποτέντς Αιτήματος Παράθυρο αποεπανάληψης 5 δευτερολέπτων για διπλά αιτήματα
Εκθετική Καθυστέρηση Αυτόματη επανάληψη με αυξανόμενες καθυστερήσεις
Dashboard Υγείας Παρακολούθηση υγείας παρόχου σε πραγματικό χρόνο

📋 Συμμόρφωση

Λειτουργία Περιγραφή
Διατήρηση Αρχείων Αυτόματος καθαρισμός μετά από CALL_LOG_RETENTION_DAYS
Απόρριψη Καταγραφής Η σημαία noLog ανά API key απενεργοποιεί την καταγραφή αιτημάτων
Αρχείο Ελέγχου Διοικητικές ενέργειες καταγράφονται στον πίνακα audit_log
MCP Audit Καταγραφή ελέγχου με SQLite για όλες τις κλήσεις εργαλείων MCP
Επικύρωση Zod Όλες οι εισόδοι API επικυρώνονται με σχήματα Zod v4 κατά τη φόρτωση του module

Απαιτούμενες Μεταβλητές Περιβάλλοντος

Όλα τα μυστικά πρέπει να οριστούν πριν από την εκκίνηση του διακομιστή. Ο διακομιστής θα αποτύχει άμεσα εάν λείπουν ή είναι αδύναμα.

# ΑΠΑΙΤΟΥΜΕΝΑ — ο διακομιστής δεν θα εκκινήσει χωρίς αυτά:
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

  • Χρησιμοποιείτε χρήστη χωρίς δικαιώματα root στο περιβάλλον παραγωγής
  • Προσαρτάτε τα μυστικά ως τόμους μόνο για ανάγνωση
  • Μην αντιγράφετε ποτέ αρχεία .env μέσα σε Docker images
  • Χρησιμοποιείτε .dockerignore για να αποκλείετε ευαίσθητα αρχεία
  • Ορίστε AUTH_COOKIE_SECURE=true όταν βρίσκεστε πίσω από 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

Εξαρτήσεις

  • Εκτελείτε npm audit τακτικά (npm run audit:deps καλύπτει main + electron)
  • Διατηρείτε τις εξαρτήσεις ενημερωμένες
  • Το έργο χρησιμοποιεί husky + lint-staged για ελέγχους πριν από κάθε commit (lint-staged + check-docs-sync + check:any-budget:t11)
  • Το CI pipeline εκτελεί κανόνες ασφαλείας ESLint σε κάθε push (no-eval, no-implied-eval, no-new-func = error)
  • Οι σταθερές παρόχου επικυρώνονται κατά τη φόρτωση της μονάδας μέσω Zod (src/shared/validation/schemas.ts)
  • Χρησιμοποιούνται βιβλιοθήκες με ασφαλείς προεπιλογές: dompurify / isomorphic-dompurify (XSS), jose (JWT), better-sqlite3 (χωρίς κίνδυνο SQLi μέσω παραμετροποιημένων ερωτημάτων), bcryptjs (κατακερματισμός κωδικών πρόσβασης)

Αυστηροί Κανόνες Ασφαλείας

Αυτοί οι κανόνες επιβάλλονται από εργαλεία και αξιολογητές:

  1. Ποτέ μην κάνετε commit μυστικά — το .env είναι στο gitignore· το .env.example είναι το πρότυπο (χωρίς κυριολεκτικές τιμές, μόνο σχόλια — βλ. PUBLIC_CREDS.md παρακάτω)
  2. Ποτέ μην χρησιμοποιείτε eval(), new Function() ή έμμεσο eval — το ESLint επιβάλλει τον κανόνα
  3. Ποτέ μην παρακάμπτετε τα Husky hooks (--no-verify, --no-gpg-sign) χωρίς ρητή έγκριση διαχειριστή
  4. Ποτέ μην γράφετε ακατέργαστη SQL σε routes — πάντα να διέρχεστε από το src/lib/db/ (παραμετροποιημένο)
  5. Πάντα να επικυρώνετε εισόδους με Zodsrc/shared/validation/schemas.ts
  6. Πάντα να απολυμαίνετε επικεφαλίδες upstream — λίστα απαγορευμένων στο src/shared/constants/upstreamHeaders.ts
  7. Κρυπτογραφείτε τα διαπιστευτήρια σε ηρεμία — AES-256-GCM μέσω src/lib/db/encryption.ts
  8. Δημόσιοι αναγνωριστές OAuth upstream μέσω resolvePublicCred() — ποτέ μην ενσωματώνετε κυριολεκτικές τιμές AIza… / GOCSPX-… / …apps.googleusercontent.com στον πηγαίο κώδικα. Βλ. docs/security/PUBLIC_CREDS.md.
  9. Αποκρίσεις σφαλμάτων μέσω buildErrorBody() / sanitizeErrorMessage() — ποτέ μην τοποθετείτε ακατέργαστο err.stack / err.message σε σώματα HTTP / SSE / executor / MCP αποκρίσεων. Βλ. docs/security/ERROR_SANITIZATION.md.
  10. Τιμές χρόνου εκτέλεσης exec() / spawn() μέσω της επιλογής env — ποτέ μην παρεμβάλλετε εξωτερικά μονοπάτια ή μη αξιόπιστες τιμές σε σενάρια που περνούν από το shell. Αναφορά: src/mitm/cert/install.ts::updateNssDatabases.
  11. Προτιμάτε βιβλιοθήκες με ασφαλείς προεπιλογές — βλ. tldrsec/awesome-secure-defaults (Helmet.js, DOMPurify, ssrf-req-filter, safe-regex, Google Tink). Καταφεύγετε σε αυτές πριν υλοποιήσετε τη δική σας λύση.

Ευρήματα σαρωτή εφοδιαστικής αλυσίδας (Socket.dev / Snyk / παρόμοια εργαλεία)

Το δημοσιευμένο npm artifact omniroute περιλαμβάνει το build του Next.js με output: "standalone", πράγμα που σημαίνει ότι κάθε route handler — συμπεριλαμβανομένων των τεκμηριωμένων προνομιακών λειτουργιών (MITM, εισαγωγή Zed, Cloud Sync, ενσωματωμένος επόπτης υπηρεσιών) — καταλήγει σε ελαχιστοποιημένα chunks .next/server/*.js. Οι ευρετικοί σαρωτές εφοδιαστικής αλυσίδας συχνά αντιστοιχίζουν τα μοτίβα αυτών των chunks με υπογραφές κακόβουλου λογισμικού.

Η διαμόρφωση του σαρωτή που χρησιμοποιούμε βρίσκεται στο socket.yml στη ρίζα του αποθετηρίου (μορφή v2 του Socket.dev GitHub App — βλ. https://docs.socket.dev/docs/socket-yml). Εξαιρεί ρητά καταλόγους που δεν αποστέλλονται (tests/, _tasks/, _references/, _ideia/, _mono_repo/, docs/ κ.λπ.), ώστε ο σαρωτής να αναφέρει μόνο διαδρομές κώδικα που φτάνουν πράγματι στους χρήστες της δημοσιευμένης έκδοσης — η ίδια η σάρωση εκτελείται από το Socket GitHub App, το οποίο διαβάζει αυτό το αρχείο, και όχι από κάποιο workflow σε αυτό το αποθετήριο.

Για κάθε κατηγορία ευρημάτων διατηρούμε μια βεβαίωση από τους συντηρητές ανά εύρημα:

  • docs/security/SOCKET_DEV_FINDINGS.md — αντιστοίχιση ανά εύρημα: αρχείο προέλευσης ↔ επισημασμένο chunk ↔ συμπεριφορά ↔ μέτρο περιορισμού που εφαρμόστηκε στην v3.8.6.
  • Μπλοκ SECURITY-AUDITOR-NOTE: μέσα στον πηγαίο κώδικα, σε κάθε επισημασμένο σημείο συνάρτησης, παραπέμπουν στο ίδιο έγγραφο.

Για χρήστες των οποίων το pipeline δεν επιτρέπει τη χαλάρωση της ειδοποίησης: εκτελέστε build με OMNIROUTE_BUILD_PROFILE=minimal npm run build. Αυτό αντικαθιστά τα τέσσερα ευαίσθητα modules με stubs που επιστρέφουν HTTP 503 feature-disabled κατά την εκτέλεση, ώστε οι προνομιακές διαδρομές κώδικα να απουσιάζουν φυσικά από το bundle. Ανατρέξτε στο docs/security/SOCKET_DEV_FINDINGS.md για τη διαδικασία δημοσίευσης.

Αναφορές