Files
OmniRoute/docs/i18n/phi/docs/security/SOCKET_DEV_FINDINGS.md
Diego Rodrigues de Sa e Souza 8feea123bb feat(docs): mirror every docs/ page in all 65 locales (#14106)
* 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.
2026-09-18 13:16:46 -03:00

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:

  1. Magkaroon ang mga operator ng security pipeline ng iisang sanggunian na mababanggit kapag kailangan nilang suriin ang mga natuklasan laban sa aktuwal na source.
  2. 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.
  3. 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 — pampublikong installCert() / uninstallCert(), at installCertWindows/Mac/Linux para sa bawat platform.
  • src/mitm/systemCommands.ts — mga nakabahaging helper para sa execFile / 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 .ps1 file para sa bawat call (mode 0o600, sa loob ng pribadong mkdtempSync directory) at tinutukoy sa pamamagitan ng -File. Ina-unlink ang file sa finally. Inaalis nito ang karaniwang base64-elevation-via-PowerShell fingerprint na na-flag ng AI classifier ng Socket.dev.
  • Naglalaman ang installCertWindows ng inline na SECURITY-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.ts
  • src/lib/zed-oauth/keychain-reader.ts
  • src/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:

  1. Ibinabalik ng POST /api/providers/zed/discover ang { candidates: [{ provider, service, account, fingerprint }] }. Ang raw token ay hindi kailanman ipinapadala. Ang fingerprint ay sha256(service|account|token).slice(0,16).
  2. Ipinapakita ng dashboard ang listahan ng mga kandidato, pinipili ng operator kung alin ang ii-import, at ipinapadala ang { confirmedAccounts: [{ service, account, fingerprint }] } sa POST /api/providers/zed/import.
  3. 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 parehong runElevatedPowerShell at execFileWithPassword ang mga naka-allowlist na caller at ang nakapirming listahan ng mga executable.
  • Ang tawag na spawn() ng execFileWithPassword ay may marker na nosemgrep kasama ang allowlist ng mga executable na pinapayagang matanggap ng helper — walang landas mula sa input ng user patungo sa finalCommand/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 sa src/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 ang src/lib/db/migrations/071_services.sql:19). Hindi nagsisimula ang serbisyo sa unang paglunsad.
  • Tinatawag ang spawn() gamit ang binary path na ibinalik ng resolveSpawnArgs(apiKey, PORT) sa src/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.tssyncToCloud() / updateLocalTokens().
  • src/app/api/keys/[id]/route.ts — tinatawag ang syncKeysToCloudIfEnabled().

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:

  1. Pag-verify ng HMAC: sinusuri ng verifyCloudSignature(rawBody, sigHeader) ang X-Cloud-Sig header (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.
  2. Tahasan na pag-opt in sa mga secret field: lamang pinapatungan ang accessToken / refreshToken / providerSpecificData kapag OMNIROUTE_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.