Que0x
b4289200ba
fix(web-server): close OAuth token TOCTOU by writing 0o600 atomically
...
`_save_anthropic_oauth_creds` wrote the Anthropic OAuth token file with
`os.replace(tmp, path)` followed by a post-hoc `chmod(0o600)`. Between the
rename and the chmod the token file existed at the default umask (0o644 on most
hosts) — a window in which another local user could read the access/refresh
tokens.
Write via `utils.atomic_json_write(..., mode=0o600)`, which creates the temp
with mode 0o600 *before* any content is written, fsyncs, atomically replaces,
preserves the existing file's owner, and cleans up its temp on failure. This
matches the `atomic_json_write(mode=0o600)` call already used elsewhere in this
module for the credential-pool write, and #56644 's owner preservation.
Tests updated for the new mechanism, plus a check that the write goes through
`atomic_json_write(mode=0o600)` (mutation-verified).
2026-07-07 13:54:07 -07:00
..
2026-07-06 03:18:02 -07:00
2026-07-05 14:48:28 -07:00
2026-07-07 05:12:24 -07:00
2026-07-01 13:07:40 -07:00
2026-07-06 11:10:51 -07:00
2026-06-27 15:59:00 -07:00
2026-06-24 00:54:18 +05:30
2026-07-05 13:42:46 -07:00
2026-07-07 00:53:56 -07:00
2026-07-05 13:42:46 -07:00
2026-07-06 11:17:41 -07:00
2026-06-11 10:49:47 -07:00
2026-07-03 01:05:22 -07:00
2026-06-27 15:59:00 -07:00
2026-06-19 16:59:43 -07:00
2026-07-05 13:42:46 -07:00
2026-06-27 15:59:00 -07:00
2026-07-01 23:51:54 +05:30
2026-07-05 04:34:14 -07:00
2026-07-07 13:46:51 -07:00
2026-07-03 20:18:00 +05:30
2026-06-29 21:12:36 -07:00
2026-06-21 16:31:56 +05:30
2026-06-30 03:27:41 -07:00
2026-07-01 02:48:36 -07:00
2026-07-06 12:26:21 -07:00
2026-06-27 21:30:37 -07:00
2026-07-05 13:42:46 -07:00
2026-06-24 18:56:26 -07:00
2026-06-27 20:45:31 -07:00
2026-06-30 17:29:23 -07:00
2026-07-07 04:09:35 -07:00
2026-07-05 23:00:34 +05:30
2026-07-02 19:52:18 -05:00
2026-07-06 04:58:07 -07:00
2026-06-27 21:30:37 -07:00
2026-06-27 15:59:00 -07:00
2026-07-05 13:42:46 -07:00
2026-06-22 12:20:09 -07:00
2026-06-06 18:22:38 -07:00
2026-06-30 00:59:29 -05:00
2026-07-06 13:08:50 -07:00
2026-07-01 16:25:48 -05:00
2026-06-28 02:44:04 -07:00
2026-06-06 19:29:00 -07:00
2026-07-05 13:42:46 -07:00
2026-06-07 06:14:24 -07:00
2026-06-21 17:06:48 -07:00
2026-06-25 21:46:58 -07:00
2026-07-05 13:42:46 -07:00
2026-07-07 13:29:58 -07:00
2026-06-19 07:46:33 -07:00
2026-06-27 15:59:00 -07:00
2026-06-27 15:59:00 -07:00
2026-07-06 03:18:07 -07:00
2026-06-21 19:05:27 -07:00
2026-06-30 02:08:37 -07:00
2026-06-22 19:16:47 -05:00
2026-06-18 16:48:47 -05:00
2026-07-07 04:09:35 -07:00
2026-06-06 23:07:25 +05:30
2026-06-25 13:52:06 -07:00
2026-07-03 01:02:44 -07:00
2026-06-08 22:31:06 -07:00
2026-06-10 00:24:06 -07:00
2026-06-13 13:47:08 -07:00
2026-07-05 13:42:46 -07:00
2026-07-06 13:08:50 -07:00
2026-07-05 00:44:15 -07:00
2026-06-12 08:51:10 +00:00
2026-06-21 22:43:48 -07:00
2026-06-19 01:53:32 +05:30
2026-06-24 00:14:49 -07:00
2026-07-06 04:58:07 -07:00
2026-07-06 11:10:51 -07:00
2026-07-02 05:10:31 -07:00
2026-06-24 13:48:38 -05:00
2026-07-06 11:20:47 -07:00
2026-07-07 02:32:32 -07:00
2026-07-05 13:42:46 -07:00
2026-06-27 15:59:00 -07:00
2026-07-05 13:42:46 -07:00
2026-06-25 16:40:26 -05:00
2026-06-25 16:40:26 -05:00
2026-07-05 19:13:20 -07:00
2026-06-25 13:52:06 -07:00
2026-06-29 02:25:48 -07:00
2026-06-08 07:03:12 -07:00
2026-06-27 15:59:00 -07:00
2026-07-03 00:46:45 -07:00
2026-06-17 01:04:26 +08:00
2026-06-06 18:36:40 -07:00
2026-06-21 19:05:27 -07:00
2026-06-19 07:46:33 -07:00
2026-06-29 21:33:00 +10:00
2026-07-07 13:29:58 -07:00
2026-07-07 12:36:41 -07:00
2026-07-07 13:29:58 -07:00
2026-07-05 22:04:52 -07:00
2026-07-03 13:44:00 -07:00
2026-06-11 07:51:01 -07:00
2026-07-07 05:11:10 -07:00
2026-06-14 22:54:54 +05:30
2026-06-26 11:04:41 -07:00
2026-06-29 01:02:53 -07:00
2026-06-25 16:40:26 -05:00
2026-07-05 14:01:03 -07:00
2026-07-05 13:42:46 -07:00
2026-06-05 03:20:10 -07:00
2026-06-27 04:01:12 +05:30
2026-07-05 05:35:44 -07:00
2026-06-26 14:07:43 +05:30
2026-07-07 05:12:24 -07:00
2026-06-28 14:29:59 -05:00
2026-07-07 13:54:07 -07:00
2026-07-05 13:42:46 -07:00
2026-06-08 11:32:43 -07:00
2026-06-09 23:21:14 -07:00
2026-07-05 23:00:34 +05:30