* feat(docs): mirror every docs/ page in all 65 locales Extends the documentation mirrors from the 22-page core set (#13940) to every Markdown page under docs/: 152 sources x 65 locales = 9,880 mirrors (6,208 new), language bars rewritten for the full locale list, state adopted so the blocking drift gate now covers all 152 pages. run-translation.mjs: an oversized block made only of table rows or list items (PROVIDER_REFERENCE.md 244-row table, FREE_TIERS.md 71-item list) is cut at item boundaries and rejoined without a blank line — the single 16-40 KB request outlived the backend socket for verbose scripts. 48 older mirrors whose tables had lost rows were retranslated with --force. * docs(i18n): refresh mirrors for the sources the base changed since the branch cut Section-level retranslation of the 29 docs (and README.md) whose source or mirrors moved on release/v3.8.51 during the run, then state adoption; the drift gate is green again on the merged tree.
17 KiB
Socket.dev / supply-chain finding attestation (Filipino)
🌐 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 · 🇵🇱 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
Ang dokumentong ito ang pagpapatunay na isinulat ng maintainer para sa anim na
natuklasang AI-detected potential malware laban sa omniroute@3.8.5 at
sa mga mitigasyong inilapat sa omniroute@3.8.6. Umiiral ito upang:
- Magkaroon ang mga operator ng security pipeline ng iisang sanggunian na mababanggit kapag kailangan nilang suriin ang mga natuklasan laban sa aktuwal na source.
- Matukoy ng mga AI scanner sa hinaharap ang claim na nilagdaan ng maintainer na ang bawat na-flag na path ay sinadya, opt-in, at dokumentado.
- Magkaroon tayo ng nakasulat na tala kung bakit ganito ang pagkakabuo ng bawat call site — upang hindi aksidenteng maibalik ng isang refactor sa hinaharap ang isang fingerprint na sadyang inalis.
Kung nagpapatakbo ka ng scanner na muling nagfa-flag sa alinman sa mga call site sa ibaba pagkatapos mailabas ang mga mitigasyon ng v3.8.6, mangyaring magbukas ng issue kasama ang scan trace at palalawakin namin ang pagpapatunay dito.
§1 — Pag-install ng MITM root CA (77484.js)
Mga source file:
src/mitm/cert/install.ts— pampublikonginstallCert()/uninstallCert(), atinstallCertWindows/Mac/Linuxpara sa bawat platform.src/mitm/systemCommands.ts— mga nakabahaging helper para saexecFile/spawn/ PowerShell na ginagamit ng mga path sa pag-install.
Trigger: iki-click ng user ang "Enable MITM proxy" sa lokal na dashboard sa
/dashboard/cli-tools/mitm. Loopback-only ang route — tingnan ang hard rule #17 sa
CLAUDE.md at src/server/authz/routeGuard.ts::isLocalOnlyPath(). Ang isang na-leak na
JWT na nalantad sa pamamagitan ng tunnel ay hindi makakapag-trigger sa code path na ito.
Mga isinasagawang privileged operation (bawat platform):
| OS | (Mga) command |
|---|---|
| Windows | certutil -addstore Root <cert> sa pamamagitan ng UAC |
| macOS | sudo security add-trusted-cert -d -r trustRoot -k /Library/Keychains/System.keychain <cert> |
| Linux | sudo cp <cert> <distro-trust-dir> + sudo update-ca-certificates (Debian) / sudo update-ca-trust (RHEL/SUSE) |
| Linux+Firefox/Chromium | pag-update sa NSS DB ng bawat profile sa pamamagitan ng certutil -d sql:<profile> |
Ito rin ang mga command na ginagamit ng mitmproxy, Charles Proxy, Fiddler, at
Caddy. Ang katunayang umiiral ang mga ito sa OmniRoute ay nakadokumento sa
docs/security/STEALTH_GUIDE.md.
Mitigasyon sa v3.8.6:
- Hindi na ginagamit ng
runElevatedPowerShell()ang-EncodedCommand <base64utf16le>. Isinusulat ang elevated payload sa isang pansamantalang.ps1file para sa bawat call (mode 0o600, sa loob ng pribadongmkdtempSyncdirectory) at tinutukoy sa pamamagitan ng-File. Ina-unlink ang file safinally. Inaalis nito ang karaniwang base64-elevation-via-PowerShell fingerprint na na-flag ng AI classifier ng Socket.dev. - Naglalaman ang
installCertWindowsng inline naSECURITY-AUDITOR-NOTE:block na tumuturo rito.
Bakit namin ito pinapanatili: ang MITM proxy ay isang dokumentadong feature na ginagamit ng
docs/security/STEALTH_GUIDE.md at docs/frameworks/MITM-PROXY.md. Ang pag-aalis
nito ay sisira sa hanay ng mga feature ng agent bridge.
§2 — Pag-import ng kredensyal ng Zed (app/api/providers/zed/import/route.js)
Mga source file:
src/app/api/providers/zed/discover/route.ts(bago sa v3.8.6)src/app/api/providers/zed/import/route.tssrc/lib/zed-oauth/keychain-reader.tssrc/lib/zed-oauth/credentialFingerprint.ts(bago sa v3.8.6)
Trigger: iki-click ng user ang "Mag-import mula sa Zed" sa pahina ng Providers
ng lokal na dashboard. Protektado ang endpoint ng requireManagementAuth. Ang Zed editor mismo
ang nagsusulat ng mga provider API key nito sa OS keychain sa ilalim ng mga dokumentadong pangalan
ng serbisyo — tingnan ang https://zed.dev/docs/ai/llm-providers.
Gawi sa v3.8.5 (ang na-flag ng Socket.dev):
Tinuklas ng POST /import ang mga kredensyal at awtomatikong sine-save ang mga ito sa lokal na
SQLite store sa iisang round-trip. Walang kumpirmasyon para sa bawat account, walang
fingerprint, "nakahanap ng N token, na-import lahat" lamang.
Mitigasyon sa v3.8.6 — 2-hakbang na kumpirmasyon:
- Ibinabalik ng
POST /api/providers/zed/discoverang{ candidates: [{ provider, service, account, fingerprint }] }. Ang raw token ay hindi kailanman ipinapadala. Ang fingerprint aysha256(service|account|token).slice(0,16). - Ipinapakita ng dashboard ang listahan ng mga kandidato, pinipili ng operator kung alin ang
ii-import, at ipinapadala ang
{ confirmedAccounts: [{ service, account, fingerprint }] }saPOST /api/providers/zed/import. - Muling binabasa ng import endpoint ang keychain sa server at nagfi-filter ayon sa
(service, account, fingerprint). Hindi maaaring linlangin ng isang binago o muling ginamit na discover response ang import endpoint upang mag-save ng hindi kaugnay na token — kung nagbago ang aktibong token mula noong discover, hindi na tumutugma ang fingerprint at nilalaktawan ang kredensyal.
Pinapanatili ng env flag na OMNIROUTE_ZED_IMPORT_LEGACY_ONE_STEP=true ang gawi ng v3.8.5
para sa mga operator na hindi pa naa-update ang kanilang automation. Aalisin ito
sa v3.9.
Bakit namin ito pinapanatili: Ang pag-import mula sa Zed ang pinakamadaling paraan ng onboarding para sa mga user na gumagamit na ng Zed at gustong kopyahin ang kanilang mga provider key sa OmniRoute nang hindi muling nagpe-paste.
§3 — execFile / spawn / PowerShell na may mataas na pribilehiyo (21843.js)
Mga source file: src/mitm/systemCommands.ts.
Bakit na-flag: muling ine-export ng chunk ang execFileWithPassword,
runElevatedPowerShell, at ang pinagsasaluhang helper na quotePowerShell. Itinuturing ang mga ito ng
AI classifier ng Socket.dev bilang isang generic na "toolkit para sa pagpapatakbo sa host + pagtataas ng
pribilehiyo." Sa loob ng OmniRoute, ginagamit lamang ang mga ito ng landas sa pag-install ng MITM cert
(§1) at ng execFileWithPassword para sa pagpapatakbo ng command na sudo.
Mitigasyon sa v3.8.6:
- Refactor ng
runElevatedPowerShell(tingnan ang §1). - Idinodokumento ng inline na block na
SECURITY-AUDITOR-NOTE:sa parehongrunElevatedPowerShellatexecFileWithPasswordang mga naka-allowlist na caller at ang nakapirming listahan ng mga executable. - Ang tawag na
spawn()ngexecFileWithPassworday may marker nanosemgrepkasama ang allowlist ng mga executable na pinapayagang matanggap ng helper — walang landas mula sa input ng user patungo safinalCommand/finalArgs.
§4 / §6 — Supervisor ng serbisyo ng 9router (api/services/9router/{start,restart}/route.js)
Mga source file:
src/app/api/services/9router/_lib.ts— factory ng supervisor.src/app/api/services/9router/{start,stop,restart,status,install,update,auto-start}/route.ts.src/lib/services/ServiceSupervisor.ts— generic na spawn / health-poll / log-buffer.
Trigger: iki-click ng user ang "I-install" / "Simulan" sa pahina ng mga naka-embed na serbisyo sa lokal na dashboard.
Mga proteksiyong umiiral na:
- Ang lahat ng route na
/api/services/*ay LOCAL_ONLY ayon sasrc/server/authz/routeGuard.ts(mahigpit na panuntunan #17). Nagaganap ang pagpapatupad ng loopback bago ang anumang pagsusuri sa auth — hindi maaabot ng isang na-leak na JWT ang mga ito. - Sini-seed ang DB row ng 9router bilang
status='not_installed', auto_start=0(tingnan angsrc/lib/db/migrations/071_services.sql:19). Hindi nagsisimula ang serbisyo sa unang paglunsad. - Tinatawag ang
spawn()gamit ang binary path na ibinalik ngresolveSpawnArgs(apiKey, PORT)sasrc/lib/services/installers/ninerouter.ts, na isang nakapirming allowlist ng mga sinusuportahang binary. - Bina-buffer sa memory ang stdout/stderr (5 MB na limitasyon, tingnan ang
_lib.ts) — walang pagsusulat sa disk maliban kung i-enable ng user ang logging mula sa dashboard.
Mitigasyon sa v3.8.6: walang pagbabago sa functionality. Pinapalitan ng minimal na build profile
(OMNIROUTE_BUILD_PROFILE=minimal) ang
src/lib/services/installers/ninerouter.ts ng stub para sa mga user na gustong
pisikal na alisin sa bundle ang mga landas na may mataas na pribilehiyo.
Bakit namin ito pinapanatili: Ang 9router ay isang opsyonal na companion service na maaaring lokal na i-install (isipin: plugin na parang sa WordPress) — mahigpit na opt-in.
§5 — Pagsulat pabalik ng kredensyal sa OmniRoute Cloud Sync (api/keys/[id]/route.js)
Mga source file:
src/lib/cloudSync.ts—syncToCloud()/updateLocalTokens().src/app/api/keys/[id]/route.ts— tinatawag angsyncKeysToCloudIfEnabled().
Trigger: nagbabalik ang isCloudEnabled() ng true (itinakda mula sa dashboard) at
naka-configure ang CLOUD_URL. Kapag parehong naka-off, walang papalabas na network call na
ipinapadala sa Cloud endpoint.
Gawi ng v3.8.5 (ang bug na wastong natukoy ng Socket.dev):
Pinapatungan ng updateLocalTokens() ang accessToken, refreshToken, at
providerSpecificData mula sa tugon ng Cloud kapag
cloudUpdatedAt > localUpdatedAt. Walang HMAC, walang lagda, walang checksum. Maaaring
palitan nang palihim ng isang maling pagkaka-configure o mapaminsalang CLOUD_URL (o ng isang MITM sa channel) ang
mga OAuth token ng provider.
Mitigasyon sa v3.8.6:
- Pag-verify ng HMAC: sinusuri ng
verifyCloudSignature(rawBody, sigHeader)angX-Cloud-Sigheader (HMAC-SHA256(OMNIROUTE_CLOUD_SYNC_SECRET, rawBody)) bago i-parse ang JSON. Kung nakatakda ang secret, kinakailangan ang lagda. Kung hindi (legacy mode), nagla-log ng babala at tinatanggap ang tugon — kakailanganin na ang secret sa v3.9. - Tahasan na pag-opt in sa mga secret field: lamang pinapatungan ang
accessToken/refreshToken/providerSpecificDatakapagOMNIROUTE_CLOUD_SYNC_SECRETS=true. Metadata lamang na hindi kredensyal ang sini-sync ng default na mode (expiresAt,status,lastError*,rateLimitedUntil,updatedAt). Isa itong breaking change para sa mga user na umaasa sa remote token sync — kailangan nilang tahasang mag-opt in.
Bakit namin ito pinananatili: Ang Cloud Sync ang tanging paraan para sa isang tenant ng OmniRoute Cloud na maisentralisa ang mga kredensyal ng team. Ginagawang malinaw ng pag-aayos ang threat model: "lumalagda ang server, nagbe-verify ang client, nag-o-opt in ang operator."
Build profile: minimal
Para sa mga user na nangangailangan ng artifact na angkop sa Socket, mag-build gamit ang:
OMNIROUTE_BUILD_PROFILE=minimal npm run build
Ina-alias ng webpack NormalModuleReplacementPlugin ang apat na module sa mga stub:
| Module | Stub |
|---|---|
src/mitm/cert/install.ts |
src/mitm/cert/install.stub.ts |
src/lib/zed-oauth/keychain-reader.ts |
src/lib/zed-oauth/keychain-reader.stub.ts |
src/lib/cloudSync.ts |
src/lib/cloudSync.stub.ts |
src/lib/services/installers/ninerouter.ts |
src/lib/services/installers/ninerouter.stub.ts |
Nag-e-export ang bawat stub ng parehong interface, ngunit naghahagis ang bawat function ng
featureDisabledError(name) sa runtime. Nagbabalik ang mga route na nakadepende sa naka-disable na
module ng HTTP 503 na may malinaw na mensahe sa halip na i-activate ang
sensitibong code path.
Nilalayong i-publish ang mabubuong bundle bilang omniroute-secure. Tingnan ang
docs/ops/PUBLISHING_SECURE.md para sa proseso ng pag-publish.
Paghahati ng plugin (sinusubaybayan para sa v4)
Sa pangmatagalan, nilalayon naming hatiin ang npm package sa mga module na maaaring i-audit nang magkakahiwalay. Tingnan ang v4 milestone sa tagasubaybay ng mga isyu sa GitHub para sa isyu sa pagsubaybay.