briandevans
66356fe24b
fix(backup): drop setuid/setgid from the mode restored onto imported files
...
``_extract_member_atomically`` carries the replaced file's permissions
across the publish so that routing through mkstemp does not change what
the caller would otherwise have produced. But ``_preserve_file_mode``
returns ``stat.S_IMODE``, which is all twelve bits, and this restore is
deliberate on both sides of the replace: the mode is fchmod'd onto the
temp before ``atomic_replace`` and re-applied afterwards because chown
clears the elevated bits. So a target sitting at 0o4755 comes out of
``hermes import`` still at 0o4755 — with contents supplied by the zip.
That is a regression introduced by the atomic rewrite rather than a
pre-existing one. The overwrite it replaced was an in-place
``open(target, "wb")``, and an in-place write by a process without
CAP_FSETID has the elevated bits stripped by the kernel, so the old path
left 0o4755 as 0o755.
The blast radius is not limited to Hermes' own state: the ``_external/``
branch of ``run_import`` publishes members anywhere under ``$HOME``, and
this is the path that documents ``sudo`` use so ownership survives a
restore. An archive that happens to contain a member matching some
existing privileged file would take over the identity that file runs as.
Mask the two bits off the preserved mode. The masking happens once,
before the temp file is chmod'd, so there is no transient elevation
either. The sticky bit is kept — it is inert on a regular file. The
ordinary permission bits are unaffected, so the Docker/NAS installs the
preservation exists for still get their broader modes back.
This is the one write path in the repo where the bytes are untrusted;
the ``utils`` writers that preserve the full mode re-serialize content
the process itself produced, and are correct as they stand.
2026-08-14 21:47:23 -07:00
..
2026-08-14 21:39:01 +00:00
2026-08-12 18:52:08 -07:00
2026-08-04 15:10:41 -07:00
2026-07-22 16:51:01 -04:00
2026-08-12 19:56:44 -07:00
2026-08-14 21:08:14 -07:00
2026-08-13 11:52:47 -07:00
2026-07-29 21:30:53 -07:00
2026-08-08 04:03:41 -07:00
2026-08-08 18:58:06 -07:00
2026-08-02 21:13:12 +05:30
2026-08-12 19:44:04 -07:00
2026-07-28 12:11:52 -05:00
2026-08-02 14:55:32 +05:30
2026-08-08 23:56:46 -07:00
2026-07-26 21:13:03 -07:00
2026-08-12 16:26:55 -07:00
2026-08-07 08:57:39 -07:00
2026-08-07 08:57:39 -07:00
2026-07-17 11:37:25 +05:30
2026-08-14 01:06:13 -07:00
2026-07-11 12:28:55 +05:30
2026-08-14 21:47:23 -07:00
2026-07-31 21:21:20 -07:00
2026-08-14 13:46:33 -07:00
2026-08-07 17:45:06 +05:30
2026-07-29 23:16:18 -07:00
2026-05-28 22:26:25 -07:00
2026-08-02 20:21:59 -07:00
2026-08-08 15:10:35 +05:30
2026-07-24 11:45:57 -07:00
2026-08-14 20:47:13 -07:00
2026-07-29 11:53:39 -07:00
2026-08-14 13:40:19 -07:00
2026-07-29 08:42:16 -07:00
2026-07-21 05:27:13 -07:00
2026-07-01 23:51:54 +05:30
2026-08-14 13:40:19 -07:00
2026-06-01 19:51:03 -07:00
2026-08-14 21:47:16 -07:00
2026-08-14 16:50:30 -07:00
2026-08-14 16:36:39 -07:00
2026-08-12 01:45:18 -07:00
2026-08-01 10:52:34 -07:00
2026-07-22 21:17:21 -07:00
2026-08-03 21:16:09 +05:30
2026-07-19 03:02:21 -07:00
2026-08-08 13:48:00 +05:30
2026-07-25 19:27:17 -07:00
2026-08-10 15:13:29 -04:00
2026-08-14 21:46:32 -07:00
2026-06-27 21:30:37 -07:00
2026-08-04 11:53:32 -06:00
2026-06-24 18:56:26 -07:00
2026-08-13 02:38:28 -07:00
2026-06-30 17:29:23 -07:00
2026-07-07 04:09:35 -07:00
2026-08-13 02:38:28 -07:00
2026-08-13 02:38:28 -07:00
2026-08-02 16:16:36 -07:00
2026-08-12 19:13:32 -07:00
2026-07-26 23:41:54 -07:00
2026-07-31 22:35:26 -07:00
2026-07-26 18:10:34 -07:00
2026-07-29 11:53:39 -07:00
2026-07-26 17:50:54 -07:00
2026-08-14 21:44:28 -07:00
2026-08-10 12:43:46 -07:00
2026-08-05 11:47:05 -04:00
2026-08-05 22:32:55 -07:00
2026-08-13 23:10:16 +05:30
2026-07-26 17:46:29 -07:00
2026-07-15 07:39:42 -07:00
2026-07-28 03:52:33 -05:00
2026-07-01 16:25:48 -05:00
2026-08-13 12:21:04 -07:00
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-07-15 07:39:17 -07:00
2026-08-10 12:43:46 -07:00
2026-08-13 10:47:40 -07:00
2026-07-27 21:10:51 -07:00
2026-08-05 11:47:05 -04:00
2026-07-05 13:42:46 -07:00
2026-08-14 13:40:19 -07:00
2026-08-14 21:46:32 -07:00
2026-06-19 07:46:33 -07:00
2026-08-01 23:06:47 -05:00
2026-08-03 22:55:36 +05:30
2026-07-28 00:53:16 -05:00
2026-06-21 19:05:27 -07:00
2026-08-07 09:44:21 -07:00
2026-08-02 22:44:38 +05:30
2026-06-22 19:16:47 -05:00
2026-08-13 23:15:25 +05:30
2026-07-29 11:53:39 -07:00
2026-08-12 21:50:35 -07:00
2026-08-12 21:50:35 -07:00
2026-08-01 14:52:18 -07:00
2026-08-14 01:31:31 -07:00
2026-08-14 01:06:13 -07:00
2026-08-04 19:35:57 +00:00
2026-07-26 21:22:40 -07:00
2026-08-14 01:06:13 -07:00
2026-08-13 22:09:50 -07:00
2026-08-14 03:31:22 +05:30
2026-08-14 20:47:13 -07:00
2026-08-07 19:47:40 +05:30
2026-06-21 22:43:48 -07:00
2026-07-29 10:13:50 -07:00
2026-08-13 02:38:28 -07:00
2026-08-14 21:35:30 -07:00
2026-07-29 10:14:11 -07:00
2026-08-08 12:31:19 -07:00
2026-07-29 17:51:40 -05:00
2026-07-02 05:10:31 -07:00
2026-08-09 10:33:58 -07:00
2026-06-24 13:48:38 -05:00
2026-08-12 20:10:51 -07:00
2026-08-12 20:10:51 -07:00
2026-08-12 18:39:22 -07:00
2026-08-12 18:52:08 -07:00
2026-08-12 19:56:44 -07:00
2026-08-13 13:38:58 -07:00
2026-08-13 13:38:58 -07:00
2026-07-28 22:42:19 -07:00
2026-07-15 07:39:17 -07:00
2026-08-06 05:00:17 +05:30
2026-08-10 22:48:24 -07:00
2026-06-25 16:40:26 -05:00
2026-07-21 10:09:31 -04:00
2026-08-03 23:23:39 +05:30
2026-07-31 21:21:16 -07:00
2026-06-25 13:52:06 -07:00
2026-08-13 03:06:08 -07:00
2026-07-29 11:53:39 -07:00
2026-07-30 03:39:26 -05:00
2026-07-29 10:14:11 -07:00
2026-08-14 13:51:26 -07:00
2026-06-27 15:59:00 -07:00
2026-08-10 17:02:56 -07:00
2026-07-29 17:13:48 +05:30
2026-08-14 20:47:13 -07:00
2026-06-17 01:04:26 +08:00
2026-07-29 10:14:11 -07:00
2026-05-29 13:24:12 -07:00
2026-07-29 11:53:39 -07:00
2026-08-01 10:47:20 -07:00
2026-08-08 12:32:23 -07:00
2026-08-14 21:07:21 -07:00
2026-07-29 11:53:39 -07:00
2026-07-07 12:36:41 -07:00
2026-07-07 13:29:58 -07:00
2026-07-26 19:30:21 -07:00
2026-07-31 22:36:55 -07:00
2026-08-12 19:43:47 -07:00
2026-07-17 04:53:38 -07:00
2026-08-12 19:43:47 -07:00
2026-08-14 21:41:26 -07:00
2026-07-26 08:43:24 -07:00
2026-06-11 07:51:01 -07:00
2026-08-12 16:59:37 -07:00
2026-08-08 15:10:35 +05:30
2026-07-09 19:57:54 -07:00
2026-08-02 13:31:16 +05:30
2026-08-05 11:59:33 +05:30
2026-07-21 21:00:43 -05:00
2026-07-29 09:33:48 -07:00
2026-07-29 12:11:24 -07:00
2026-07-24 16:00:03 -07:00
2026-07-31 23:18:12 -07:00
2026-06-25 16:40:26 -05:00
2026-08-07 08:58:14 -07:00
2026-05-28 22:26:25 -07:00
2026-08-07 17:45:06 +05:30
2026-06-05 03:20:10 -07:00
2026-08-02 16:16:36 -07:00
2026-08-14 00:26:11 -07:00
2026-08-14 13:51:07 -07:00
2026-07-29 11:53:39 -07:00
2026-08-06 05:00:17 +05:30
2026-08-14 13:36:42 -07:00
2026-07-31 22:28:46 -07:00
2026-08-14 16:43:37 -07:00
2026-07-29 19:48:37 -07:00
2026-08-07 10:11:05 -07:00
2026-08-08 22:54:20 +05:30
2026-07-29 16:21:54 -07:00
2026-08-09 06:21:04 -05:00
2026-08-09 06:21:04 -05:00
2026-08-14 21:36:29 -07:00
2026-07-24 11:45:57 -07:00
2026-07-29 10:14:11 -07:00
2026-08-01 14:30:16 -07:00
2026-06-09 23:21:14 -07:00
2026-08-06 05:00:17 +05:30