Juan Denis
048a560f8c
fix(security): correct PROTECTED_ROOTS path math; tighten root matching
...
Copilot review on the GHSA-rm3m-9mvw-68fh patch caught two issues:
- _BACKEND_DIR/_INSTALL_DIR were one level too shallow (backend/app and
backend/ instead of backend/ and the install root), which left
<install>/.env and frontend/dist reachable on the deployed layout —
the exact PoC path from the advisory. _BACKEND_DIR stays in
PROTECTED_ROOTS so flat layouts (code at /app) are covered too.
- The ALLOWED_ROOTS check used a bare startswith, so e.g. /optfoo
matched the /opt root. Both checks now require an exact match or a
path-boundary prefix.
New tests pin the level math (the existing cases computed the expected
layout independently and passed on Windows for the wrong reason) and
simulate the deployed layout with the install dir inside an allowed root.
2026-08-02 18:56:33 -04:00
..
2026-07-07 20:29:31 -04:00
2026-07-22 19:22:43 -04:00
2026-07-09 05:27:22 -04:00
2026-07-25 13:50:53 -04:00
2026-06-12 18:35:35 -04:00
2026-06-12 17:31:26 -04:00
2026-05-31 14:46:47 -04:00
2026-05-31 16:08:13 -04:00
2026-06-12 17:33:29 -04:00
2026-06-01 02:39:05 -04:00
2026-07-25 14:15:29 -04:00
2026-07-14 22:34:24 -04:00
2026-06-23 18:23:47 -04:00
2026-07-21 22:57:33 -04:00
2026-07-21 22:57:33 -04:00
2026-07-01 20:49:41 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-05-03 15:57:02 -04:00
2026-07-07 20:29:24 -04:00
2026-07-02 22:36:34 -04:00
2026-07-07 20:29:25 -04:00
2026-06-19 13:22:43 -04:00
2026-06-24 14:19:32 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:25 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:27:08 -04:00
2026-06-24 14:20:43 -04:00
2026-07-09 04:41:00 -04:00
2026-06-22 19:53:23 -04:00
2026-06-24 14:16:45 -04:00
2026-07-07 20:29:25 -04:00
2026-07-03 15:21:48 -04:00
2026-07-25 12:38:56 -04:00
2026-06-23 18:49:04 -04:00
2026-07-25 15:48:36 -04:00
2026-07-03 15:21:22 -04:00
2026-07-11 01:22:49 -04:00
2026-07-04 01:46:34 -04:00
2026-07-14 22:22:18 -04:00
2026-07-02 01:04:03 -04:00
2026-07-09 05:02:54 -04:00
2026-07-02 01:04:03 -04:00
2026-07-21 22:57:33 -04:00
2026-07-25 16:19:33 -04:00
2026-06-24 14:24:13 -04:00
2026-06-23 21:15:16 -04:00
2026-05-05 14:03:31 -04:00
2026-07-01 20:49:41 -04:00
2026-06-19 10:13:50 -04:00
2026-06-19 09:54:40 -04:00
2026-06-23 18:23:47 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-07-27 22:44:40 -04:00
2026-07-25 21:23:14 -04:00
2026-07-26 00:19:46 -04:00
2026-07-25 22:51:04 -04:00
2026-07-03 14:24:15 -04:00
2026-07-03 14:24:03 -04:00
2026-06-15 00:01:41 -04:00
2026-07-03 14:24:02 -04:00
2026-07-22 17:31:18 -04:00
2026-06-19 03:12:07 -04:00
2026-07-23 16:58:46 -04:00
2026-07-03 14:23:50 -04:00
2026-07-25 20:04:39 -04:00
2026-06-24 14:52:04 -04:00
2026-06-22 16:24:53 -04:00
2026-06-22 16:34:17 -04:00
2026-06-22 16:12:31 -04:00
2026-06-22 16:12:31 -04:00
2026-07-08 01:41:22 -04:00
2026-07-09 04:50:16 -04:00
2026-07-08 01:41:22 -04:00
2026-06-30 23:31:57 -04:00
2026-06-22 16:24:53 -04:00
2026-06-23 00:34:55 -04:00
2026-07-03 23:18:08 -04:00
2026-06-22 16:40:35 -04:00
2026-07-25 22:01:15 -04:00
2026-06-24 01:43:29 -04:00
2026-07-07 20:29:24 -04:00
2026-06-19 01:34:02 -04:00
2026-07-04 01:28:16 -04:00
2026-07-03 15:21:09 -04:00
2026-06-23 21:33:53 -04:00
2026-07-09 04:55:53 -04:00
2026-07-03 23:18:08 -04:00
2026-06-24 14:32:41 -04:00
2026-06-24 14:36:08 -04:00
2026-06-23 20:04:04 -04:00
2026-07-08 23:12:48 -04:00
2026-07-12 21:42:26 -04:00
2026-07-01 22:11:09 -04:00
2026-07-22 17:37:20 -04:00
2026-07-03 15:21:34 -04:00
2026-08-02 18:56:33 -04:00
2026-07-09 04:41:00 -04:00
2026-07-08 01:41:13 -04:00
2026-06-23 21:15:16 -04:00
2026-07-08 01:41:13 -04:00
2026-07-09 04:41:00 -04:00
2026-07-14 22:15:07 -04:00
2026-07-22 18:14:35 -04:00
2026-07-07 20:29:24 -04:00
2026-07-10 23:06:09 -04:00
2026-07-07 20:29:31 -04:00
2026-07-03 15:22:05 -04:00
2026-07-22 19:22:43 -04:00
2026-06-19 09:37:30 -04:00
2026-06-23 20:57:40 -04:00
2026-07-25 16:51:44 -04:00
2026-08-02 18:35:25 -04:00
2026-07-22 00:48:13 -04:00
2026-07-18 00:59:19 -04:00
2026-07-03 14:23:50 -04:00
2026-07-03 15:21:23 -04:00
2026-07-01 20:49:41 -04:00
2026-07-03 14:24:15 -04:00
2026-07-09 03:35:53 -04:00
2026-07-09 02:57:23 -04:00
2026-07-09 03:05:08 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:21:14 -04:00
2026-07-09 03:28:08 -04:00
2026-07-04 01:16:29 -04:00
2026-07-04 01:46:34 -04:00
2026-07-09 03:35:53 -04:00
2026-07-04 01:34:54 -04:00
2026-07-10 01:13:14 -04:00
2026-07-04 01:39:53 -04:00
2026-07-09 03:13:54 -04:00
2026-07-08 01:41:43 -04:00
2026-07-03 14:23:11 -04:00
2026-07-03 15:21:50 -04:00
2026-07-25 20:35:19 -04:00
2026-07-22 18:14:35 -04:00
2026-07-02 00:15:10 -04:00
2026-07-28 00:28:19 -04:00
2026-06-15 23:20:00 -04:00
2026-07-07 20:29:31 -04:00
2026-06-21 19:57:02 -04:00
2026-07-07 20:29:29 -04:00
2026-07-07 20:29:29 -04:00
2026-07-08 01:41:43 -04:00
2026-07-09 04:41:00 -04:00
2026-07-14 22:34:24 -04:00
2026-07-09 04:41:00 -04:00
2026-07-14 22:11:59 -04:00
2026-06-12 18:35:43 -04:00
2026-05-31 16:08:32 -04:00
2026-07-02 22:19:14 -04:00
2026-07-08 01:41:43 -04:00
2026-07-25 14:02:08 -04:00
2026-07-25 13:59:51 -04:00
2026-07-25 12:46:59 -04:00
2026-07-25 13:56:09 -04:00
2026-07-09 01:52:38 -04:00
2026-07-25 13:40:00 -04:00
2026-07-25 13:51:11 -04:00
2026-07-25 19:24:41 -04:00
2026-06-23 19:33:44 -04:00
2026-06-23 19:33:44 -04:00
2026-07-14 22:22:18 -04:00
2026-06-23 19:33:44 -04:00
2026-06-20 22:25:06 -04:00
2026-06-20 22:38:38 -04:00
2026-07-22 23:18:33 -04:00
2026-07-14 22:27:02 -04:00
2026-07-07 20:29:29 -04:00
2026-05-03 07:07:57 -04:00
2026-06-05 23:08:44 -04:00
2026-07-22 16:36:58 -04:00
2026-07-22 17:24:36 -04:00
2026-07-22 17:24:36 -04:00
2026-07-11 00:26:40 -04:00
2026-06-21 01:54:51 -04:00
2026-08-02 18:35:25 -04:00
2026-06-19 16:52:40 -04:00
2026-07-08 01:41:43 -04:00
2026-07-31 14:56:37 -04:00
2026-06-23 20:04:04 -04:00
2026-07-07 20:29:24 -04:00
2026-07-01 22:55:11 -04:00
2026-07-25 14:19:06 -04:00
2026-06-25 01:06:44 -04:00
2026-05-05 14:03:31 -04:00
2026-06-23 17:31:28 -04:00
2026-06-24 14:06:05 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-07 20:29:23 -04:00
2026-07-09 04:41:00 -04:00
2026-06-23 20:04:04 -04:00
2026-07-01 00:31:22 -04:00
2026-07-03 14:24:29 -04:00
2026-07-03 14:24:29 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-06-30 23:48:28 -04:00
2026-07-03 14:23:29 -04:00
2026-07-08 23:58:45 -04:00
2026-07-09 04:41:00 -04:00
2026-06-24 14:40:08 -04:00
2026-07-14 22:34:24 -04:00
2026-07-03 15:21:22 -04:00
2026-07-09 04:41:00 -04:00
2026-07-09 04:41:00 -04:00
2026-07-07 20:29:24 -04:00
2026-06-22 01:45:15 -04:00
2026-07-25 20:09:05 -04:00
2026-07-21 23:26:13 -04:00
2026-06-23 18:23:47 -04:00
2026-07-10 02:38:46 -04:00
2026-07-23 09:25:01 -04:00
2026-07-23 09:25:01 -04:00
2026-07-20 01:16:16 -04:00
2026-07-18 00:51:21 -04:00
2026-07-02 00:15:10 -04:00
2026-02-10 16:03:19 -05:00
2026-07-25 05:41:00 -04:00
2026-06-19 14:02:24 -04:00
2026-07-02 00:15:10 -04:00
2026-06-15 21:00:57 -04:00
2026-07-09 04:41:00 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-07-02 00:15:10 -04:00
2026-06-24 14:09:35 -04:00
2026-07-02 00:15:10 -04:00
2026-07-25 13:29:12 -04:00
2026-07-02 00:15:10 -04:00
2026-07-03 14:24:31 -04:00
2026-07-03 15:21:23 -04:00