agim-cli 1.2.68 → 1.2.70
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +106 -0
- package/dist/core/llm/fs-dispatcher.js +56 -6
- package/dist/core/llm/fs-dispatcher.js.map +1 -1
- package/dist/core/llm/web-dispatcher.d.ts +18 -0
- package/dist/core/llm/web-dispatcher.d.ts.map +1 -1
- package/dist/core/llm/web-dispatcher.js +196 -42
- package/dist/core/llm/web-dispatcher.js.map +1 -1
- package/dist/core/onboarding.d.ts.map +1 -1
- package/dist/core/onboarding.js +10 -4
- package/dist/core/onboarding.js.map +1 -1
- package/dist/core/registry.d.ts +10 -0
- package/dist/core/registry.d.ts.map +1 -1
- package/dist/core/registry.js +58 -0
- package/dist/core/registry.js.map +1 -1
- package/dist/web/public/assets/{a2a-D5jnlU3x.js → a2a-CzOCrC9J.js} +2 -2
- package/dist/web/public/assets/{a2a-D5jnlU3x.js.map → a2a-CzOCrC9J.js.map} +1 -1
- package/dist/web/public/assets/{activity-Ch5O6khO.js → activity-BlasCFZq.js} +2 -2
- package/dist/web/public/assets/{activity-Ch5O6khO.js.map → activity-BlasCFZq.js.map} +1 -1
- package/dist/web/public/assets/{admins-_M1ylhz4.js → admins-CQOShfRl.js} +2 -2
- package/dist/web/public/assets/{admins-_M1ylhz4.js.map → admins-CQOShfRl.js.map} +1 -1
- package/dist/web/public/assets/{agents-ixbQiOsI.js → agents-UstP4DoK.js} +2 -2
- package/dist/web/public/assets/{agents-ixbQiOsI.js.map → agents-UstP4DoK.js.map} +1 -1
- package/dist/web/public/assets/{approvals-BrAHLmtR.js → approvals-BvfcdYLU.js} +2 -2
- package/dist/web/public/assets/{approvals-BrAHLmtR.js.map → approvals-BvfcdYLU.js.map} +1 -1
- package/dist/web/public/assets/{asks-DSSkZWYd.js → asks-DAJ1edZu.js} +2 -2
- package/dist/web/public/assets/{asks-DSSkZWYd.js.map → asks-DAJ1edZu.js.map} +1 -1
- package/dist/web/public/assets/{audit-CgOnCOYX.js → audit-CAOadRDl.js} +2 -2
- package/dist/web/public/assets/{audit-CgOnCOYX.js.map → audit-CAOadRDl.js.map} +1 -1
- package/dist/web/public/assets/{bell-DAEjZGtn.js → bell-BuZoWBMK.js} +2 -2
- package/dist/web/public/assets/{bell-DAEjZGtn.js.map → bell-BuZoWBMK.js.map} +1 -1
- package/dist/web/public/assets/{bgjobs-B9KPxiJl.js → bgjobs-C5jF3BWG.js} +2 -2
- package/dist/web/public/assets/{bgjobs-B9KPxiJl.js.map → bgjobs-C5jF3BWG.js.map} +1 -1
- package/dist/web/public/assets/{brain-D7iZGtff.js → brain-DaFGi4GZ.js} +2 -2
- package/dist/web/public/assets/{brain-D7iZGtff.js.map → brain-DaFGi4GZ.js.map} +1 -1
- package/dist/web/public/assets/{briefcase-DVifKdtB.js → briefcase-BXKiYFAz.js} +2 -2
- package/dist/web/public/assets/{briefcase-DVifKdtB.js.map → briefcase-BXKiYFAz.js.map} +1 -1
- package/dist/web/public/assets/{chevron-right-ES5OLdHR.js → chevron-right-Bi2RmsHt.js} +2 -2
- package/dist/web/public/assets/{chevron-right-ES5OLdHR.js.map → chevron-right-Bi2RmsHt.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-B56tPP-z.js → circle-check-NYJSuZMK.js} +2 -2
- package/dist/web/public/assets/{circle-check-B56tPP-z.js.map → circle-check-NYJSuZMK.js.map} +1 -1
- package/dist/web/public/assets/{circle-check-big-krrxgPiD.js → circle-check-big-wxQV9Apf.js} +2 -2
- package/dist/web/public/assets/{circle-check-big-krrxgPiD.js.map → circle-check-big-wxQV9Apf.js.map} +1 -1
- package/dist/web/public/assets/{circle-x-D6zUfmKm.js → circle-x-D7EpTdJQ.js} +2 -2
- package/dist/web/public/assets/{circle-x-D6zUfmKm.js.map → circle-x-D7EpTdJQ.js.map} +1 -1
- package/dist/web/public/assets/{confirm-dialog-Dw9H-rCY.js → confirm-dialog-BecM1NAT.js} +2 -2
- package/dist/web/public/assets/{confirm-dialog-Dw9H-rCY.js.map → confirm-dialog-BecM1NAT.js.map} +1 -1
- package/dist/web/public/assets/{data-table-CTpyjb3w.js → data-table-Bh5TFhXw.js} +2 -2
- package/dist/web/public/assets/{data-table-CTpyjb3w.js.map → data-table-Bh5TFhXw.js.map} +1 -1
- package/dist/web/public/assets/{dialog-C65YjHki.js → dialog-8m5Uihhi.js} +2 -2
- package/dist/web/public/assets/{dialog-C65YjHki.js.map → dialog-8m5Uihhi.js.map} +1 -1
- package/dist/web/public/assets/{download-DsbMB1e1.js → download-DWvNllY2.js} +2 -2
- package/dist/web/public/assets/{download-DsbMB1e1.js.map → download-DWvNllY2.js.map} +1 -1
- package/dist/web/public/assets/{email-CUJkdRDB.js → email-Cr1x3fdt.js} +2 -2
- package/dist/web/public/assets/{email-CUJkdRDB.js.map → email-Cr1x3fdt.js.map} +1 -1
- package/dist/web/public/assets/{empty-state-Cm17gTVv.js → empty-state-BESUGVnV.js} +2 -2
- package/dist/web/public/assets/{empty-state-Cm17gTVv.js.map → empty-state-BESUGVnV.js.map} +1 -1
- package/dist/web/public/assets/{external-link-e4jSLO58.js → external-link-BwscsXby.js} +2 -2
- package/dist/web/public/assets/{external-link-e4jSLO58.js.map → external-link-BwscsXby.js.map} +1 -1
- package/dist/web/public/assets/{eye-CooHmujZ.js → eye-C7gaSIZv.js} +2 -2
- package/dist/web/public/assets/{eye-CooHmujZ.js.map → eye-C7gaSIZv.js.map} +1 -1
- package/dist/web/public/assets/{facts-DynPEPya.js → facts-B9hm9627.js} +2 -2
- package/dist/web/public/assets/{facts-DynPEPya.js.map → facts-B9hm9627.js.map} +1 -1
- package/dist/web/public/assets/{goals-t0vB4Tfm.js → goals-D3f1Dw2M.js} +2 -2
- package/dist/web/public/assets/{goals-t0vB4Tfm.js.map → goals-D3f1Dw2M.js.map} +1 -1
- package/dist/web/public/assets/{health-B6Nf5nrQ.js → health-BLwrXebg.js} +2 -2
- package/dist/web/public/assets/{health-B6Nf5nrQ.js.map → health-BLwrXebg.js.map} +1 -1
- package/dist/web/public/assets/{heart-pulse-D167fJJk.js → heart-pulse-BtioxtCU.js} +2 -2
- package/dist/web/public/assets/{heart-pulse-D167fJJk.js.map → heart-pulse-BtioxtCU.js.map} +1 -1
- package/dist/web/public/assets/{heartbeat-mUU1PBDP.js → heartbeat-BHPx1z33.js} +2 -2
- package/dist/web/public/assets/{heartbeat-mUU1PBDP.js.map → heartbeat-BHPx1z33.js.map} +1 -1
- package/dist/web/public/assets/{hot-BSPUd7sX.js → hot-CuaGMYzV.js} +2 -2
- package/dist/web/public/assets/{hot-BSPUd7sX.js.map → hot-CuaGMYzV.js.map} +1 -1
- package/dist/web/public/assets/{index-DG_LHVpy.js → index-Cc8hxJWT.js} +4 -4
- package/dist/web/public/assets/{index-DG_LHVpy.js.map → index-Cc8hxJWT.js.map} +1 -1
- package/dist/web/public/assets/{installed-BsoeXLFx.js → installed-D_BoGzel.js} +2 -2
- package/dist/web/public/assets/{installed-BsoeXLFx.js.map → installed-D_BoGzel.js.map} +1 -1
- package/dist/web/public/assets/{jobs-HxUYTICT.js → jobs-D0eeD9ye.js} +2 -2
- package/dist/web/public/assets/{jobs-HxUYTICT.js.map → jobs-D0eeD9ye.js.map} +1 -1
- package/dist/web/public/assets/{layout-IkZ1uemn.js → layout-CQe9ncYF.js} +2 -2
- package/dist/web/public/assets/{layout-IkZ1uemn.js.map → layout-CQe9ncYF.js.map} +1 -1
- package/dist/web/public/assets/{layout-C_hnc_UF.js → layout-CvRW3Bn_.js} +2 -2
- package/dist/web/public/assets/{layout-C_hnc_UF.js.map → layout-CvRW3Bn_.js.map} +1 -1
- package/dist/web/public/assets/{layout-7GnGj0lA.js → layout-DPxfAgBW.js} +2 -2
- package/dist/web/public/assets/{layout-7GnGj0lA.js.map → layout-DPxfAgBW.js.map} +1 -1
- package/dist/web/public/assets/{layout-Cgu_PEw0.js → layout-Wl7Pr1-s.js} +2 -2
- package/dist/web/public/assets/{layout-Cgu_PEw0.js.map → layout-Wl7Pr1-s.js.map} +1 -1
- package/dist/web/public/assets/{layout-CvOpVhvp.js → layout-bRkGiGF-.js} +2 -2
- package/dist/web/public/assets/{layout-CvOpVhvp.js.map → layout-bRkGiGF-.js.map} +1 -1
- package/dist/web/public/assets/{llm-B2y8oyog.js → llm-CJGxq9Ru.js} +2 -2
- package/dist/web/public/assets/{llm-B2y8oyog.js.map → llm-CJGxq9Ru.js.map} +1 -1
- package/dist/web/public/assets/{loader-circle-DPuvakPP.js → loader-circle-D4WrM89N.js} +2 -2
- package/dist/web/public/assets/{loader-circle-DPuvakPP.js.map → loader-circle-D4WrM89N.js.map} +1 -1
- package/dist/web/public/assets/{map-pin-DzrzVdfp.js → map-pin-DGSzw_UH.js} +2 -2
- package/dist/web/public/assets/{map-pin-DzrzVdfp.js.map → map-pin-DGSzw_UH.js.map} +1 -1
- package/dist/web/public/assets/{mcp-BvjO6Qxb.js → mcp-DYp7QbX8.js} +2 -2
- package/dist/web/public/assets/{mcp-BvjO6Qxb.js.map → mcp-DYp7QbX8.js.map} +1 -1
- package/dist/web/public/assets/{memos-bmjNc9qk.js → memos-Dz0jD4R5.js} +2 -2
- package/dist/web/public/assets/{memos-bmjNc9qk.js.map → memos-Dz0jD4R5.js.map} +1 -1
- package/dist/web/public/assets/{messengers-B5GHoXqI.js → messengers-Bewhby2_.js} +2 -2
- package/dist/web/public/assets/{messengers-B5GHoXqI.js.map → messengers-Bewhby2_.js.map} +1 -1
- package/dist/web/public/assets/{native-agent-yRX-IBe1.js → native-agent-ChgK3ceB.js} +2 -2
- package/dist/web/public/assets/{native-agent-yRX-IBe1.js.map → native-agent-ChgK3ceB.js.map} +1 -1
- package/dist/web/public/assets/{network-Dac8A7p-.js → network-D8uD8vuE.js} +2 -2
- package/dist/web/public/assets/{network-Dac8A7p-.js.map → network-D8uD8vuE.js.map} +1 -1
- package/dist/web/public/assets/{outbox-Dx_FvKMP.js → outbox-CRcmD2P1.js} +2 -2
- package/dist/web/public/assets/{outbox-Dx_FvKMP.js.map → outbox-CRcmD2P1.js.map} +1 -1
- package/dist/web/public/assets/{pagination-D9B2d2q0.js → pagination-BK8pXuOn.js} +2 -2
- package/dist/web/public/assets/{pagination-D9B2d2q0.js.map → pagination-BK8pXuOn.js.map} +1 -1
- package/dist/web/public/assets/{persona-BXKRIYXm.js → persona-Dk4Y24TF.js} +2 -2
- package/dist/web/public/assets/{persona-BXKRIYXm.js.map → persona-Dk4Y24TF.js.map} +1 -1
- package/dist/web/public/assets/{play-BUdq9hBS.js → play-BAwY0kZY.js} +2 -2
- package/dist/web/public/assets/{play-BUdq9hBS.js.map → play-BAwY0kZY.js.map} +1 -1
- package/dist/web/public/assets/{plus-CuVC2G0S.js → plus-Qg7H_hBC.js} +2 -2
- package/dist/web/public/assets/{plus-CuVC2G0S.js.map → plus-Qg7H_hBC.js.map} +1 -1
- package/dist/web/public/assets/{policy-D3lhzoun.js → policy-bd1_X4KT.js} +2 -2
- package/dist/web/public/assets/{policy-D3lhzoun.js.map → policy-bd1_X4KT.js.map} +1 -1
- package/dist/web/public/assets/{refresh-ccw-KVbKtjsH.js → refresh-ccw-DjeeSzbz.js} +2 -2
- package/dist/web/public/assets/{refresh-ccw-KVbKtjsH.js.map → refresh-ccw-DjeeSzbz.js.map} +1 -1
- package/dist/web/public/assets/{reminders-CGyUyQBl.js → reminders-CyNYrPCo.js} +2 -2
- package/dist/web/public/assets/{reminders-CGyUyQBl.js.map → reminders-CyNYrPCo.js.map} +1 -1
- package/dist/web/public/assets/{save-CXEX7AiY.js → save-B6_ssx8c.js} +2 -2
- package/dist/web/public/assets/{save-CXEX7AiY.js.map → save-B6_ssx8c.js.map} +1 -1
- package/dist/web/public/assets/{schedules-lWx5lIO-.js → schedules-DVxENvba.js} +2 -2
- package/dist/web/public/assets/{schedules-lWx5lIO-.js.map → schedules-DVxENvba.js.map} +1 -1
- package/dist/web/public/assets/{search-BxQJVSx8.js → search-BJwBDf0Q.js} +2 -2
- package/dist/web/public/assets/{search-BxQJVSx8.js.map → search-BJwBDf0Q.js.map} +1 -1
- package/dist/web/public/assets/security-Co1823U6.js +7 -0
- package/dist/web/public/assets/security-Co1823U6.js.map +1 -0
- package/dist/web/public/assets/{service-B5Xmuldn.js → service-BJ2kE446.js} +2 -2
- package/dist/web/public/assets/{service-B5Xmuldn.js.map → service-BJ2kE446.js.map} +1 -1
- package/dist/web/public/assets/{status-badge-MM6M-eFF.js → status-badge-3nnQTZXz.js} +2 -2
- package/dist/web/public/assets/{status-badge-MM6M-eFF.js.map → status-badge-3nnQTZXz.js.map} +1 -1
- package/dist/web/public/assets/{subtasks-B6MyfzRw.js → subtasks-BgHm-5dB.js} +2 -2
- package/dist/web/public/assets/{subtasks-B6MyfzRw.js.map → subtasks-BgHm-5dB.js.map} +1 -1
- package/dist/web/public/assets/{table-DCYYH-Yk.js → table-CNXI0HD-.js} +2 -2
- package/dist/web/public/assets/{table-DCYYH-Yk.js.map → table-CNXI0HD-.js.map} +1 -1
- package/dist/web/public/assets/{topn-CaRu8cFq.js → topn-C1PyG8Ns.js} +2 -2
- package/dist/web/public/assets/{topn-CaRu8cFq.js.map → topn-C1PyG8Ns.js.map} +1 -1
- package/dist/web/public/assets/{trash-2-BC232qKU.js → trash-2-CjkttCxU.js} +2 -2
- package/dist/web/public/assets/{trash-2-BC232qKU.js.map → trash-2-CjkttCxU.js.map} +1 -1
- package/dist/web/public/assets/{use-background-tasks-B8Glf2JM.js → use-background-tasks-CLf78_yn.js} +2 -2
- package/dist/web/public/assets/{use-background-tasks-B8Glf2JM.js.map → use-background-tasks-CLf78_yn.js.map} +1 -1
- package/dist/web/public/assets/{use-llm-admin-DM34gUYq.js → use-llm-admin-CzL0zcIi.js} +2 -2
- package/dist/web/public/assets/{use-llm-admin-DM34gUYq.js.map → use-llm-admin-CzL0zcIi.js.map} +1 -1
- package/dist/web/public/assets/{use-memory-BDlIEEfk.js → use-memory-DrJjdPYo.js} +2 -2
- package/dist/web/public/assets/{use-memory-BDlIEEfk.js.map → use-memory-DrJjdPYo.js.map} +1 -1
- package/dist/web/public/assets/{use-observability-D7ePifSS.js → use-observability-1j7-vMy5.js} +2 -2
- package/dist/web/public/assets/{use-observability-D7ePifSS.js.map → use-observability-1j7-vMy5.js.map} +1 -1
- package/dist/web/public/assets/{use-settings-D6y3lscb.js → use-settings-BLcy2mrv.js} +2 -2
- package/dist/web/public/assets/{use-settings-D6y3lscb.js.map → use-settings-BLcy2mrv.js.map} +1 -1
- package/dist/web/public/assets/{use-workspace-C9WiGclY.js → use-workspace-BLXvLTDF.js} +2 -2
- package/dist/web/public/assets/{use-workspace-C9WiGclY.js.map → use-workspace-BLXvLTDF.js.map} +1 -1
- package/dist/web/public/assets/{useQuery-D6icKl-l.js → useQuery-xB5dCeu-.js} +2 -2
- package/dist/web/public/assets/{useQuery-D6icKl-l.js.map → useQuery-xB5dCeu-.js.map} +1 -1
- package/dist/web/public/assets/{vector-DgyB8_1O.js → vector-EOjQsr7r.js} +2 -2
- package/dist/web/public/assets/{vector-DgyB8_1O.js.map → vector-EOjQsr7r.js.map} +1 -1
- package/dist/web/public/assets/{viewer-D6Lc51GN.js → viewer-D_I2ikzf.js} +2 -2
- package/dist/web/public/assets/{viewer-D6Lc51GN.js.map → viewer-D_I2ikzf.js.map} +1 -1
- package/dist/web/public/assets/{workspace-BB3GxkMv.js → workspace-lMCzYJAB.js} +2 -2
- package/dist/web/public/assets/{workspace-BB3GxkMv.js.map → workspace-lMCzYJAB.js.map} +1 -1
- package/dist/web/public/assets/{workspaces-DeZZzq6K.js → workspaces-Ciyjiowm.js} +2 -2
- package/dist/web/public/assets/{workspaces-DeZZzq6K.js.map → workspaces-Ciyjiowm.js.map} +1 -1
- package/dist/web/public/assets/{x-CwtxXdNl.js → x-DP0VnoG9.js} +2 -2
- package/dist/web/public/assets/{x-CwtxXdNl.js.map → x-DP0VnoG9.js.map} +1 -1
- package/dist/web/public/index.html +1 -1
- package/dist/web/server.js +24 -5
- package/dist/web/server.js.map +1 -1
- package/package.json +1 -1
- package/dist/web/public/assets/security-DBfcNVw-.js +0 -7
- package/dist/web/public/assets/security-DBfcNVw-.js.map +0 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,112 @@ All notable changes to this project will be documented in this file.
|
|
|
4
4
|
|
|
5
5
|
## [Unreleased]
|
|
6
6
|
|
|
7
|
+
## [1.2.70] - 2026-05-26
|
|
8
|
+
|
|
9
|
+
### Security
|
|
10
|
+
|
|
11
|
+
- **CR-1 / CR-3 / CR-4 — fixes from the v1.2.55–v1.2.69 code review.**
|
|
12
|
+
Closes three holes flagged as 🔴 critical in
|
|
13
|
+
`CODE_REVIEW_v1.2.55-v1.2.69.md`.
|
|
14
|
+
|
|
15
|
+
- **CR-1: fs-dispatcher symlink escape guard.**
|
|
16
|
+
`core/llm/fs-dispatcher.ts:resolveAndCheck` is now async and runs an
|
|
17
|
+
extra `realpathSoft(abs)` after the lexical sensitive-path +
|
|
18
|
+
workspace-relative check. The resolved real path is re-validated
|
|
19
|
+
against `isSensitivePath` and the workspace boundary. A symlink
|
|
20
|
+
inside the agent cwd that points at `/etc/passwd` (or any path
|
|
21
|
+
outside the workspace) is rejected with reason
|
|
22
|
+
`"sensitive path (via symlink): …"` / `"symlink target … is outside
|
|
23
|
+
workspace"`. Non-existent targets (typical for `native_write_file`
|
|
24
|
+
to a new path) fall back to resolving the parent dir, catching the
|
|
25
|
+
"create file inside a symlinked directory" case.
|
|
26
|
+
|
|
27
|
+
- **CR-3: SSRF parser accepts integer / hex / octal IPv4 forms.**
|
|
28
|
+
`core/llm/web-dispatcher.ts:checkUrlSafety` no longer relies on a
|
|
29
|
+
dotted-quad regex. New `tryParseIPv4Variants(host)` expands every
|
|
30
|
+
RFC3986 form Node's URL parser accepts: dotted quad, 1-/2-/3-part
|
|
31
|
+
short form (e.g. `127.1` → `127.0.0.1`), decimal int
|
|
32
|
+
(`2130706433`), hex int (`0x7f000001`), octal-prefixed octets
|
|
33
|
+
(`0177.0.0.1`). Each octet's range is validated, closing the
|
|
34
|
+
`999.999.999.999` overflow path. In practice Node's URL parser
|
|
35
|
+
already canonicalises most of these to dotted quad, but
|
|
36
|
+
defense-in-depth covers any consumer that hands us a raw hostname.
|
|
37
|
+
|
|
38
|
+
- **CR-4: IPv6 ULA / link-local check now uses bit-masks, not regex.**
|
|
39
|
+
New `checkIpv6Safety(addr)` + `expandIpv6(addr)` canonicalise the
|
|
40
|
+
address to 8 × 16-bit groups via `net.isIPv6()`, then apply prefix
|
|
41
|
+
masks: `fe80::/10` (link-local), `fc00::/7` (ULA, covers `fc**` and
|
|
42
|
+
`fd**`), `::1` (loopback), `::ffff:V4` (mapped — recursively
|
|
43
|
+
checked against IPv4 safety), `::` (unspecified). Compressed forms
|
|
44
|
+
like `[fcab:1234::5]` or `[fd00::dead]` that the old regex missed
|
|
45
|
+
are now correctly blocked.
|
|
46
|
+
|
|
47
|
+
### Tests
|
|
48
|
+
|
|
49
|
+
- **+11 red-team cases** across the two dispatchers covering the
|
|
50
|
+
fixes above:
|
|
51
|
+
- `web-dispatcher.test.ts`: IPv6 ULA compressed forms, IPv6
|
|
52
|
+
loopback, mapped-v4 RFC1918, decimal/hex/octal/short-form IPv4,
|
|
53
|
+
overflow-octet rejection, public IPv6 still allowed, unit test
|
|
54
|
+
for `tryParseIPv4Variants` itself.
|
|
55
|
+
- `fs-dispatcher.test.ts`: symlink whose target is `/etc/passwd`,
|
|
56
|
+
symlink to an outside-workspace path, symlinked directory used
|
|
57
|
+
as write parent, symlink that DOES resolve inside the workspace
|
|
58
|
+
(positive case).
|
|
59
|
+
- Total dispatcher tests: 53/53 green.
|
|
60
|
+
|
|
61
|
+
### Notes
|
|
62
|
+
|
|
63
|
+
- CR-5 (exec-dispatcher dangerous-pattern regex bypass) and CR-6
|
|
64
|
+
(`IMHUB_NATIVE_EXEC_SANDBOX` defaults off) deferred to the next
|
|
65
|
+
batch alongside CR-2 (DNS-aware SSRF resolver).
|
|
66
|
+
|
|
67
|
+
## [1.2.69] - 2026-05-26
|
|
68
|
+
|
|
69
|
+
### Added
|
|
70
|
+
|
|
71
|
+
- **`IMHUB_PLATFORM_BLACKLIST` env** — comma-separated list of IM
|
|
72
|
+
platform ids that the bot will REFUSE to enable. Default empty
|
|
73
|
+
(no blocks; backward compatible). Three-layer enforcement:
|
|
74
|
+
1. **Registry** (`core/registry.ts`): `registry.registerMessenger`
|
|
75
|
+
refuses adapters whose `name` matches the list (or its
|
|
76
|
+
`wechat ⇔ wechat-ilink` aliases). Refusal logs
|
|
77
|
+
`event=messenger.blacklisted` and skips the registration even
|
|
78
|
+
when credentials are present in `~/.agim/env`.
|
|
79
|
+
2. **CLI wizard** (`core/onboarding.ts`): blacklisted platforms
|
|
80
|
+
vanish from `getAvailableMessengers()` so the wizard never
|
|
81
|
+
prompts for them. Layered on top of the existing
|
|
82
|
+
`IMHUB_ENABLE_GLOBAL_IM` filter.
|
|
83
|
+
3. **Web admin** (`/api/messengers` GET): per-platform credential
|
|
84
|
+
blocks (`telegram` / `discord` / `feishu` / `dingtalk` /
|
|
85
|
+
`wechat`) are omitted from the response when their id (or
|
|
86
|
+
alias) is on the list. The `messengers` dictionary is also
|
|
87
|
+
filtered. The SPA sees nothing → renders nothing.
|
|
88
|
+
- **New helpers exported from `core/registry.ts`**:
|
|
89
|
+
`parsePlatformBlacklist(raw)`, `isPlatformBlacklisted(name)`,
|
|
90
|
+
`getPlatformBlacklist()`. Each re-reads `process.env` so a hot
|
|
91
|
+
env-file update (via PUT /api/env) takes effect on the next
|
|
92
|
+
call without a service restart for the *filter* logic. Adapter
|
|
93
|
+
un-registration still requires restart (registry init runs
|
|
94
|
+
once).
|
|
95
|
+
|
|
96
|
+
### Changed
|
|
97
|
+
|
|
98
|
+
- `/settings/security` page gains:
|
|
99
|
+
- "IM platform blacklist" diagnostic row (green when empty,
|
|
100
|
+
warning when populated; shows the active list).
|
|
101
|
+
- New section at the bottom: input field for the blacklist CSV
|
|
102
|
+
+ live preview of "currently in force" entries.
|
|
103
|
+
- `ENV_EDITABLE_KEYS` in `web/server.ts` extended with
|
|
104
|
+
`IMHUB_PLATFORM_BLACKLIST`.
|
|
105
|
+
- `/api/security/diagnostics` returns `platformBlacklist: string[]`.
|
|
106
|
+
|
|
107
|
+
### Internal
|
|
108
|
+
|
|
109
|
+
- 11 unit tests in `test/unit/platform-blacklist.test.ts` cover
|
|
110
|
+
parser, alias expansion, hot env-update, case-insensitivity, and
|
|
111
|
+
list snapshotting.
|
|
112
|
+
|
|
7
113
|
## [1.2.68] - 2026-05-26
|
|
8
114
|
|
|
9
115
|
### Fixed
|
|
@@ -161,7 +161,7 @@ async function runOne(name, args, ctx, signal) {
|
|
|
161
161
|
function workspaceRestricted() {
|
|
162
162
|
return process.env.IMHUB_NATIVE_FS_RESTRICT !== '0';
|
|
163
163
|
}
|
|
164
|
-
function resolveAndCheck(input, ctx) {
|
|
164
|
+
async function resolveAndCheck(input, ctx) {
|
|
165
165
|
if (typeof input !== 'string' || input.length === 0) {
|
|
166
166
|
return { abs: '', ok: false, reason: 'path must be a non-empty string' };
|
|
167
167
|
}
|
|
@@ -185,11 +185,61 @@ function resolveAndCheck(input, ctx) {
|
|
|
185
185
|
};
|
|
186
186
|
}
|
|
187
187
|
}
|
|
188
|
+
// v1.2.70 — CR-1: realpath guard against symlink escape. Lexical
|
|
189
|
+
// checks alone don't see symlinks that point outside the workspace
|
|
190
|
+
// or at sensitive paths (e.g. a symlink "evil" → "/etc/passwd"
|
|
191
|
+
// dropped inside the agent cwd). Re-run sensitive + workspace
|
|
192
|
+
// checks against the resolved real path. Non-existent paths have
|
|
193
|
+
// no symlink to follow yet, so realpath ENOENT falls back to
|
|
194
|
+
// resolving the parent (which catches the "directory itself is a
|
|
195
|
+
// symlink" case) or leaves abs as-is.
|
|
196
|
+
const real = await realpathSoft(abs);
|
|
197
|
+
if (real !== abs) {
|
|
198
|
+
const sensReal = isSensitivePath(real, { cwd: ctx.cwd });
|
|
199
|
+
if (sensReal.sensitive) {
|
|
200
|
+
return { abs: real, ok: false, reason: `sensitive path (via symlink): ${sensReal.reason}` };
|
|
201
|
+
}
|
|
202
|
+
if (workspaceRestricted()) {
|
|
203
|
+
const relReal = relative(ctx.cwd, real);
|
|
204
|
+
if (relReal.startsWith('..') || (relReal.length > 0 && isAbsolute(relReal))) {
|
|
205
|
+
return {
|
|
206
|
+
abs: real,
|
|
207
|
+
ok: false,
|
|
208
|
+
reason: `symlink target "${real}" is outside workspace "${ctx.cwd}". ` +
|
|
209
|
+
'Set IMHUB_NATIVE_FS_RESTRICT=0 to allow broader access.',
|
|
210
|
+
};
|
|
211
|
+
}
|
|
212
|
+
}
|
|
213
|
+
}
|
|
188
214
|
return { abs, ok: true };
|
|
189
215
|
}
|
|
216
|
+
/** Resolve symlinks in `abs`. If the path itself doesn't exist
|
|
217
|
+
* (ENOENT — typical for write_file targeting a new file), resolve
|
|
218
|
+
* the parent and rejoin with the basename. If the parent also
|
|
219
|
+
* doesn't exist, return `abs` verbatim — there's no symlink to
|
|
220
|
+
* follow yet, so lexical checks already cover us. */
|
|
221
|
+
async function realpathSoft(abs) {
|
|
222
|
+
try {
|
|
223
|
+
return await fs.realpath(abs);
|
|
224
|
+
}
|
|
225
|
+
catch {
|
|
226
|
+
const lastSep = abs.lastIndexOf(sep);
|
|
227
|
+
if (lastSep <= 0)
|
|
228
|
+
return abs;
|
|
229
|
+
const parent = abs.slice(0, lastSep);
|
|
230
|
+
const name = abs.slice(lastSep + 1);
|
|
231
|
+
try {
|
|
232
|
+
const realParent = await fs.realpath(parent);
|
|
233
|
+
return resolvePath(realParent, name);
|
|
234
|
+
}
|
|
235
|
+
catch {
|
|
236
|
+
return abs;
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
190
240
|
// ─── tools ───────────────────────────────────────────────────────────
|
|
191
241
|
async function runReadFile(args, ctx) {
|
|
192
|
-
const p = resolveAndCheck(args.path, ctx);
|
|
242
|
+
const p = await resolveAndCheck(args.path, ctx);
|
|
193
243
|
if (!p.ok)
|
|
194
244
|
return { text: p.reason ?? 'invalid path', isError: true, source: 'fs' };
|
|
195
245
|
const maxBytes = clampNumber(args.max_bytes, DEFAULT_READ_MAX_BYTES, 1, 8 * 1024 * 1024);
|
|
@@ -220,7 +270,7 @@ async function runReadFile(args, ctx) {
|
|
|
220
270
|
}
|
|
221
271
|
}
|
|
222
272
|
async function runWriteFile(args, ctx) {
|
|
223
|
-
const p = resolveAndCheck(args.path, ctx);
|
|
273
|
+
const p = await resolveAndCheck(args.path, ctx);
|
|
224
274
|
if (!p.ok)
|
|
225
275
|
return { text: p.reason ?? 'invalid path', isError: true, source: 'fs' };
|
|
226
276
|
const content = typeof args.content === 'string' ? args.content : '';
|
|
@@ -251,7 +301,7 @@ async function runWriteFile(args, ctx) {
|
|
|
251
301
|
}
|
|
252
302
|
}
|
|
253
303
|
async function runListDir(args, ctx) {
|
|
254
|
-
const p = resolveAndCheck(args.path, ctx);
|
|
304
|
+
const p = await resolveAndCheck(args.path, ctx);
|
|
255
305
|
if (!p.ok)
|
|
256
306
|
return { text: p.reason ?? 'invalid path', isError: true, source: 'fs' };
|
|
257
307
|
const maxEntries = clampNumber(args.max_entries, DEFAULT_LIST_MAX_ENTRIES, 1, 5000);
|
|
@@ -288,7 +338,7 @@ async function runGlob(args, ctx, signal) {
|
|
|
288
338
|
if (!pattern)
|
|
289
339
|
return { text: 'pattern required', isError: true, source: 'fs' };
|
|
290
340
|
const rootInput = typeof args.root === 'string' ? args.root : '.';
|
|
291
|
-
const p = resolveAndCheck(rootInput, ctx);
|
|
341
|
+
const p = await resolveAndCheck(rootInput, ctx);
|
|
292
342
|
if (!p.ok)
|
|
293
343
|
return { text: p.reason ?? 'invalid root', isError: true, source: 'fs' };
|
|
294
344
|
const maxResults = clampNumber(args.max_results, DEFAULT_GLOB_MAX_RESULTS, 1, 5000);
|
|
@@ -312,7 +362,7 @@ async function runGrep(args, ctx, signal) {
|
|
|
312
362
|
if (!pattern)
|
|
313
363
|
return { text: 'pattern required', isError: true, source: 'fs' };
|
|
314
364
|
const inputPath = typeof args.path === 'string' ? args.path : '.';
|
|
315
|
-
const p = resolveAndCheck(inputPath, ctx);
|
|
365
|
+
const p = await resolveAndCheck(inputPath, ctx);
|
|
316
366
|
if (!p.ok)
|
|
317
367
|
return { text: p.reason ?? 'invalid path', isError: true, source: 'fs' };
|
|
318
368
|
const glob = typeof args.glob === 'string' ? args.glob : undefined;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"fs-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/fs-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"fs-dispatcher.js","sourceRoot":"","sources":["../../../src/core/llm/fs-dispatcher.ts"],"names":[],"mappings":"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"}
|
|
@@ -23,6 +23,24 @@ interface SafetyResult {
|
|
|
23
23
|
reason?: string;
|
|
24
24
|
}
|
|
25
25
|
export declare function checkUrlSafety(raw: string): SafetyResult;
|
|
26
|
+
/**
|
|
27
|
+
* v1.2.70 — IPv4 parser that accepts every form Node's URL parser
|
|
28
|
+
* also accepts:
|
|
29
|
+
* - dotted quad "127.0.0.1"
|
|
30
|
+
* - 3-part "127.1" (rare but valid per RFC 3986)
|
|
31
|
+
* - decimal integer "2130706433"
|
|
32
|
+
* - hex integer "0x7f000001" / "0x7f.0.0.1"
|
|
33
|
+
* - octal "0177.0.0.1"
|
|
34
|
+
* Returns the 4-octet form or null if the input isn't a valid IPv4
|
|
35
|
+
* representation. Validates each octet's range, closing CR-3
|
|
36
|
+
* (999.999.999.999 overflow) — any out-of-range part → null.
|
|
37
|
+
*/
|
|
38
|
+
export declare function tryParseIPv4Variants(host: string): [number, number, number, number] | null;
|
|
39
|
+
/** Expand `addr` (already validated by net.isIPv6) into 8 × 16-bit
|
|
40
|
+
* groups. Returns null only if the form somehow can't be normalized
|
|
41
|
+
* (shouldn't happen post-net.isIPv6).
|
|
42
|
+
*/
|
|
43
|
+
export declare function expandIpv6(addr: string): number[] | null;
|
|
26
44
|
interface Cidr4 {
|
|
27
45
|
network: number;
|
|
28
46
|
mask: number;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"web-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/web-dispatcher.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"web-dispatcher.d.ts","sourceRoot":"","sources":["../../../src/core/llm/web-dispatcher.ts"],"names":[],"mappings":"AAoBA,OAAO,KAAK,EAAE,OAAO,EAAE,MAAM,oBAAoB,CAAA;AACjD,OAAO,KAAK,EAAoB,cAAc,EAAE,MAAM,sBAAsB,CAAA;AAY5E,wBAAgB,aAAa,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAEnD;AAED,wBAAgB,WAAW,IAAI,OAAO,EAAE,CA0DvC;AAED,wBAAgB,kBAAkB,IAAI,cAAc,CAcnD;AAgHD,UAAU,SAAS;IACjB,KAAK,EAAE,MAAM,CAAA;IACb,GAAG,EAAE,MAAM,CAAA;IACX,OAAO,EAAE,MAAM,CAAA;CAChB;AA2CD;;;;sBAIsB;AACtB,wBAAgB,YAAY,CAAC,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAgBnE;AA6CD;;4BAE4B;AAC5B,wBAAgB,kBAAkB,CAAC,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,MAAM,GAAG,SAAS,EAAE,CAwB1E;AAID,UAAU,YAAY;IAAG,EAAE,EAAE,OAAO,CAAC;IAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CAAE;AAEvD,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAyCxD;AAED;;;;;;;;;;;GAWG;AACH,wBAAgB,oBAAoB,CAAC,IAAI,EAAE,MAAM,GAAG,CAAC,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,CAAC,GAAG,IAAI,CAuC1F;AAsED;;;GAGG;AACH,wBAAgB,UAAU,CAAC,IAAI,EAAE,MAAM,GAAG,MAAM,EAAE,GAAG,IAAI,CAgCxD;AAKD,UAAU,KAAK;IAAG,OAAO,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAA;CAAE;AAEjD,wBAAgB,kBAAkB,CAAC,GAAG,EAAE,MAAM,GAAG,SAAS,GAAG,KAAK,EAAE,CAiBnE"}
|
|
@@ -15,6 +15,7 @@
|
|
|
15
15
|
// 2. metaso — fallback when ddg returns 0/error, uses METASO_API_KEY
|
|
16
16
|
//
|
|
17
17
|
// Both tools are read-only and safe to default-allow in native's policy.
|
|
18
|
+
import net from 'node:net';
|
|
18
19
|
import { logger as rootLogger } from '../logger.js';
|
|
19
20
|
const log = rootLogger.child({ component: 'web-dispatcher' });
|
|
20
21
|
const DEFAULT_TIMEOUT_MS = 30_000;
|
|
@@ -361,61 +362,214 @@ export function checkUrlSafety(raw) {
|
|
|
361
362
|
}
|
|
362
363
|
if (process.env.IMHUB_NATIVE_WEB_ALLOW_PRIVATE === '1')
|
|
363
364
|
return { ok: true };
|
|
364
|
-
// v1.2.66
|
|
365
|
-
// private-IP block. Use case: Tailscale (100.64.0.0/10), internal
|
|
366
|
-
// VPN subnets, OpenAI-compat services on internal docker networks.
|
|
367
|
-
// Format: `IMHUB_NATIVE_WEB_SSRF_WHITELIST=10.20.0.0/16,100.64.0.0/10`.
|
|
368
|
-
// Parsed once per call (cheap; called per fetch); cache could be
|
|
369
|
-
// added but the list is small and changes are rare.
|
|
365
|
+
// CIDR whitelist (v1.2.66). Tailscale 100.64.0.0/10 etc.
|
|
370
366
|
const whitelist = parseSsrfWhitelist(process.env.IMHUB_NATIVE_WEB_SSRF_WHITELIST);
|
|
371
367
|
const host = u.hostname.toLowerCase();
|
|
372
368
|
if (host === 'localhost' || host === '::1' || host.endsWith('.localhost')) {
|
|
373
369
|
return { ok: false, reason: 'localhost is private (set IMHUB_NATIVE_WEB_ALLOW_PRIVATE=1 or whitelist via IMHUB_NATIVE_WEB_SSRF_WHITELIST)' };
|
|
374
370
|
}
|
|
375
|
-
//
|
|
376
|
-
|
|
371
|
+
// v1.2.70 — normalize hostname to an IP if possible BEFORE pattern
|
|
372
|
+
// matching. Closes CR-3 (999.999.999.999 / decimal int / hex int
|
|
373
|
+
// bypass) and CR-4 (IPv6 compressed-form ULA regex hole).
|
|
374
|
+
//
|
|
375
|
+
// Three parse paths:
|
|
376
|
+
// - bracketed IPv6 host ("[fe80::1]") → strip + net.isIPv6
|
|
377
|
+
// - dotted-quad / decimal-int / hex-int / octal-int → tryParseIPv4Variants
|
|
378
|
+
// - hostname → leave for v4/v6 check; non-IP names pass (treated
|
|
379
|
+
// as DNS targets; CR-2 DNS rebind is a separate fix slot)
|
|
380
|
+
const v6Host = host.startsWith('[') && host.endsWith(']') ? host.slice(1, -1) : host;
|
|
381
|
+
if (net.isIPv6(v6Host)) {
|
|
382
|
+
return checkIpv6Safety(v6Host);
|
|
383
|
+
}
|
|
384
|
+
// IPv4 variants — including decimal int, hex int, octal, and any
|
|
385
|
+
// dotted-quad form Node's URL parser accepted but the regex missed.
|
|
386
|
+
const v4 = tryParseIPv4Variants(host);
|
|
377
387
|
if (v4) {
|
|
378
|
-
|
|
379
|
-
if (whitelist.length > 0 && octets.every((o) => Number.isFinite(o) && o >= 0 && o <= 255)
|
|
380
|
-
&& ipInAnyCidr4(octets, whitelist)) {
|
|
388
|
+
if (whitelist.length > 0 && ipInAnyCidr4(v4, whitelist))
|
|
381
389
|
return { ok: true };
|
|
382
|
-
|
|
383
|
-
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
392
|
-
|
|
393
|
-
|
|
394
|
-
|
|
395
|
-
|
|
396
|
-
|
|
397
|
-
|
|
398
|
-
|
|
399
|
-
|
|
400
|
-
|
|
401
|
-
|
|
402
|
-
|
|
403
|
-
|
|
404
|
-
|
|
405
|
-
|
|
406
|
-
|
|
407
|
-
|
|
390
|
+
return checkIpv4Safety(v4);
|
|
391
|
+
}
|
|
392
|
+
// Not an IP literal — DNS hostname. Pass without resolution at this
|
|
393
|
+
// layer; CR-2 (DNS-aware SSRF via custom http.Agent.lookup) is a
|
|
394
|
+
// separate hardening track.
|
|
395
|
+
return { ok: true };
|
|
396
|
+
}
|
|
397
|
+
/**
|
|
398
|
+
* v1.2.70 — IPv4 parser that accepts every form Node's URL parser
|
|
399
|
+
* also accepts:
|
|
400
|
+
* - dotted quad "127.0.0.1"
|
|
401
|
+
* - 3-part "127.1" (rare but valid per RFC 3986)
|
|
402
|
+
* - decimal integer "2130706433"
|
|
403
|
+
* - hex integer "0x7f000001" / "0x7f.0.0.1"
|
|
404
|
+
* - octal "0177.0.0.1"
|
|
405
|
+
* Returns the 4-octet form or null if the input isn't a valid IPv4
|
|
406
|
+
* representation. Validates each octet's range, closing CR-3
|
|
407
|
+
* (999.999.999.999 overflow) — any out-of-range part → null.
|
|
408
|
+
*/
|
|
409
|
+
export function tryParseIPv4Variants(host) {
|
|
410
|
+
// 1. canonical dotted quad with strict 0-255 range
|
|
411
|
+
const dq = /^(\d{1,3})\.(\d{1,3})\.(\d{1,3})\.(\d{1,3})$/.exec(host);
|
|
412
|
+
if (dq) {
|
|
413
|
+
const o = [Number(dq[1]), Number(dq[2]), Number(dq[3]), Number(dq[4])];
|
|
414
|
+
if (o.every((x) => x >= 0 && x <= 255))
|
|
415
|
+
return [o[0], o[1], o[2], o[3]];
|
|
416
|
+
return null;
|
|
417
|
+
}
|
|
418
|
+
// 2. one-to-four parts, each in decimal/hex/octal.
|
|
419
|
+
const parts = host.split('.');
|
|
420
|
+
if (parts.length < 1 || parts.length > 4)
|
|
421
|
+
return null;
|
|
422
|
+
const numeric = [];
|
|
423
|
+
for (const p of parts) {
|
|
424
|
+
const n = parseIntegerVariant(p);
|
|
425
|
+
if (n === null)
|
|
426
|
+
return null;
|
|
427
|
+
numeric.push(n);
|
|
428
|
+
}
|
|
429
|
+
// RFC 3986 §3.2.2 (Old-style URL parsers): expand the last part
|
|
430
|
+
// across the remaining bytes. E.g. "127.1" → 127.0.0.1.
|
|
431
|
+
if (numeric.length === 1) {
|
|
432
|
+
const v = numeric[0];
|
|
433
|
+
if (v < 0 || v > 0xffffffff)
|
|
434
|
+
return null;
|
|
435
|
+
return [(v >>> 24) & 0xff, (v >>> 16) & 0xff, (v >>> 8) & 0xff, v & 0xff];
|
|
436
|
+
}
|
|
437
|
+
if (numeric.length === 2) {
|
|
438
|
+
const a = numeric[0], rest = numeric[1];
|
|
439
|
+
if (a < 0 || a > 255 || rest < 0 || rest > 0xffffff)
|
|
440
|
+
return null;
|
|
441
|
+
return [a, (rest >>> 16) & 0xff, (rest >>> 8) & 0xff, rest & 0xff];
|
|
442
|
+
}
|
|
443
|
+
if (numeric.length === 3) {
|
|
444
|
+
const [a, b, rest] = numeric;
|
|
445
|
+
if (a > 255 || b > 255 || rest < 0 || rest > 0xffff)
|
|
446
|
+
return null;
|
|
447
|
+
return [a, b, (rest >>> 8) & 0xff, rest & 0xff];
|
|
448
|
+
}
|
|
449
|
+
// 4 parts → all must fit 0-255
|
|
450
|
+
if (numeric.every((x) => x >= 0 && x <= 255)) {
|
|
451
|
+
return [numeric[0], numeric[1], numeric[2], numeric[3]];
|
|
452
|
+
}
|
|
453
|
+
return null;
|
|
454
|
+
}
|
|
455
|
+
/** Parse a single integer-form octet. Hex prefix 0x, octal prefix 0
|
|
456
|
+
* (only when followed by 0-7, else decimal). Returns null on invalid. */
|
|
457
|
+
function parseIntegerVariant(s) {
|
|
458
|
+
if (s.length === 0)
|
|
459
|
+
return null;
|
|
460
|
+
if (/^0x[0-9a-f]+$/i.test(s))
|
|
461
|
+
return Number.parseInt(s, 16);
|
|
462
|
+
// octal: leading 0 followed by 1+ digits, ALL digits must be 0-7
|
|
463
|
+
if (/^0[0-7]+$/.test(s))
|
|
464
|
+
return Number.parseInt(s, 8);
|
|
465
|
+
if (/^[0-9]+$/.test(s))
|
|
466
|
+
return Number.parseInt(s, 10);
|
|
467
|
+
return null;
|
|
468
|
+
}
|
|
469
|
+
function checkIpv4Safety(octets) {
|
|
470
|
+
const [a, b] = octets;
|
|
471
|
+
if (a === 10)
|
|
472
|
+
return { ok: false, reason: 'RFC1918 10.0.0.0/8 private' };
|
|
473
|
+
if (a === 172 && b >= 16 && b <= 31)
|
|
474
|
+
return { ok: false, reason: 'RFC1918 172.16.0.0/12 private' };
|
|
475
|
+
if (a === 192 && b === 168)
|
|
476
|
+
return { ok: false, reason: 'RFC1918 192.168.0.0/16 private' };
|
|
477
|
+
if (a === 127)
|
|
478
|
+
return { ok: false, reason: '127.0.0.0/8 loopback' };
|
|
479
|
+
if (a === 169 && b === 254) {
|
|
480
|
+
return { ok: false, reason: '169.254.0.0/16 link-local (covers AWS/Azure IMDS 169.254.169.254)' };
|
|
481
|
+
}
|
|
482
|
+
if (a === 100 && b >= 64 && b <= 127) {
|
|
483
|
+
return {
|
|
484
|
+
ok: false,
|
|
485
|
+
reason: '100.64.0.0/10 carrier-grade NAT (whitelist via IMHUB_NATIVE_WEB_SSRF_WHITELIST=100.64.0.0/10 if intentional, e.g. Tailscale)',
|
|
486
|
+
};
|
|
487
|
+
}
|
|
488
|
+
if (a === 0)
|
|
489
|
+
return { ok: false, reason: '0.0.0.0/8 invalid' };
|
|
490
|
+
return { ok: true };
|
|
491
|
+
}
|
|
492
|
+
/**
|
|
493
|
+
* v1.2.70 — proper IPv6 safety check via numeric prefix parsing.
|
|
494
|
+
* Replaces the ad-hoc regex that missed compressed forms
|
|
495
|
+
* ("[fc::1]", "[fd00::]"). Uses the 16-bit groups returned by a
|
|
496
|
+
* canonical expansion so the prefix bits actually drive the
|
|
497
|
+
* decision.
|
|
498
|
+
*/
|
|
499
|
+
function checkIpv6Safety(addr) {
|
|
500
|
+
const groups = expandIpv6(addr);
|
|
501
|
+
if (!groups)
|
|
502
|
+
return { ok: false, reason: `invalid IPv6 address: ${addr}` };
|
|
503
|
+
// ::1 loopback
|
|
504
|
+
if (groups.every((g, i) => (i < 7 ? g === 0 : g === 1))) {
|
|
408
505
|
return { ok: false, reason: 'IPv6 loopback ::1' };
|
|
409
|
-
|
|
506
|
+
}
|
|
507
|
+
// fe80::/10 — first 10 bits are 1111 1110 10
|
|
508
|
+
if ((groups[0] & 0xffc0) === 0xfe80) {
|
|
410
509
|
return { ok: false, reason: 'IPv6 link-local fe80::/10' };
|
|
411
510
|
}
|
|
412
|
-
|
|
413
|
-
|
|
414
|
-
|
|
415
|
-
|
|
511
|
+
// fc00::/7 — first 7 bits are 1111 110 (matches fc** and fd**)
|
|
512
|
+
if ((groups[0] & 0xfe00) === 0xfc00) {
|
|
513
|
+
return { ok: false, reason: 'IPv6 ULA fc00::/7' };
|
|
514
|
+
}
|
|
515
|
+
// ::ffff:V4 — IPv4-mapped. Extract embedded v4 and re-check.
|
|
516
|
+
if (groups[0] === 0 && groups[1] === 0 && groups[2] === 0
|
|
517
|
+
&& groups[3] === 0 && groups[4] === 0 && groups[5] === 0xffff) {
|
|
518
|
+
const a = (groups[6] >>> 8) & 0xff;
|
|
519
|
+
const b = groups[6] & 0xff;
|
|
520
|
+
const c = (groups[7] >>> 8) & 0xff;
|
|
521
|
+
const d = groups[7] & 0xff;
|
|
522
|
+
return checkIpv4Safety([a, b, c, d]);
|
|
523
|
+
}
|
|
524
|
+
// Unspecified ::
|
|
525
|
+
if (groups.every((g) => g === 0)) {
|
|
526
|
+
return { ok: false, reason: 'IPv6 unspecified ::' };
|
|
416
527
|
}
|
|
417
528
|
return { ok: true };
|
|
418
529
|
}
|
|
530
|
+
/** Expand `addr` (already validated by net.isIPv6) into 8 × 16-bit
|
|
531
|
+
* groups. Returns null only if the form somehow can't be normalized
|
|
532
|
+
* (shouldn't happen post-net.isIPv6).
|
|
533
|
+
*/
|
|
534
|
+
export function expandIpv6(addr) {
|
|
535
|
+
const lower = addr.toLowerCase();
|
|
536
|
+
// Embedded IPv4 form like "::ffff:127.0.0.1"
|
|
537
|
+
let working = lower;
|
|
538
|
+
const v4Tail = /([0-9]+\.[0-9]+\.[0-9]+\.[0-9]+)$/.exec(lower);
|
|
539
|
+
if (v4Tail) {
|
|
540
|
+
const v4 = tryParseIPv4Variants(v4Tail[1]);
|
|
541
|
+
if (!v4)
|
|
542
|
+
return null;
|
|
543
|
+
const hex1 = ((v4[0] << 8) | v4[1]).toString(16);
|
|
544
|
+
const hex2 = ((v4[2] << 8) | v4[3]).toString(16);
|
|
545
|
+
working = lower.slice(0, v4Tail.index) + hex1 + ':' + hex2;
|
|
546
|
+
}
|
|
547
|
+
const [head, tail] = working.split('::');
|
|
548
|
+
const headGroups = head ? head.split(':') : [];
|
|
549
|
+
const tailGroups = tail !== undefined ? (tail ? tail.split(':') : []) : null;
|
|
550
|
+
let groups;
|
|
551
|
+
if (tailGroups === null) {
|
|
552
|
+
// No "::" present — must have exactly 8 groups
|
|
553
|
+
if (headGroups.length !== 8)
|
|
554
|
+
return null;
|
|
555
|
+
groups = headGroups;
|
|
556
|
+
}
|
|
557
|
+
else {
|
|
558
|
+
const missing = 8 - headGroups.length - tailGroups.length;
|
|
559
|
+
if (missing < 0)
|
|
560
|
+
return null;
|
|
561
|
+
groups = [...headGroups, ...Array(missing).fill('0'), ...tailGroups];
|
|
562
|
+
}
|
|
563
|
+
const out = [];
|
|
564
|
+
for (const g of groups) {
|
|
565
|
+
if (g === '' || g.length > 4 || !/^[0-9a-f]+$/.test(g))
|
|
566
|
+
return null;
|
|
567
|
+
out.push(Number.parseInt(g, 16));
|
|
568
|
+
}
|
|
569
|
+
if (out.length !== 8)
|
|
570
|
+
return null;
|
|
571
|
+
return out;
|
|
572
|
+
}
|
|
419
573
|
export function parseSsrfWhitelist(raw) {
|
|
420
574
|
if (!raw)
|
|
421
575
|
return [];
|