9285b19d6a
[Security] Stop USB device names from being executed as Hyprland Lua ( #8129 )
...
* Stop device names from being executed as Hyprland Lua
Hyprland input-device and monitor names come from USB descriptors and
hyprctl output, so they are attacker-influenceable, yet the toggle and
monitor commands interpolated them straight into hyprctl eval and into
generated Lua that Hyprland re-executes on every reload. The input-device
toggle keys are bound with locked = true, so a malicious USB name reached
Lua code execution from the lock screen; a persisted disable made it run
on every start. This closes that class everywhere it appeared.
- The touchpad/touchscreen disable is now the device name in a plain-text
sidecar file, read back by a packaged Lua module on reload, never a
generated Lua file. hyprctl eval Lua-quotes the name and control
characters are rejected outright.
- Dropped the shipped *-disabled.lua templates so nothing seeds a
disabled state to /etc/skel, making the name file the single source of
truth read from a hardcoded ~/.local/state to match the sibling tools.
- The reload loader excludes those two legacy filenames, so a leftover
generated *-disabled.lua on a not-yet-migrated install can never be
sourced as code again; a migration then recovers the device name from
it and deletes it, sanitizing installs that ran the vulnerable version.
- All four monitor scripts (internal, mirror, clamshell, scaling) now
validate an output name against a plain-connector-name pattern before
writing it as Lua, closing the same latent pattern in the siblings.
- paths.lua treats a set-but-empty XDG_STATE_HOME as unset, matching the
bash side so state is never read from the filesystem root.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_0144ZDt44vtxjyF8j9Y88NrM
* Let a failing Lua assertion fail the test
lua discards the status of a chunk read from stdin, so a blown assert printed its traceback and still exited 0: the surrounding `set -euo pipefail` never fired and the following `pass` printed `ok`. Every Lua block in these two files was unenforced, including the assertion that a quoted `hyprctl eval` cannot reach `os.execute` and the negative control that proves the test can detect the injection at all. Passing the chunk as a script argument makes lua report the failure.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
* Re-apply a recovered input-device disable to the running session
The package hook reloads Hyprland during `omarchy-update-system-pkgs`, before `omarchy-migrate` runs, and at that reload the generated Lua is already excluded while the name file does not exist yet — so a touchpad or touchscreen the user had switched off comes back on, and stays on until their next login. Reload once more once the name has been recovered, which is the same path a login already takes to read it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Co-Authored-By: Codex XHigh <codex@openai.com >
---------
Co-authored-by: Claude Fable 5 <noreply@anthropic.com >
Co-authored-by: Omarchybot <omabot@omarchy.org >
Co-authored-by: Codex XHigh <codex@openai.com >
2026-08-25 11:03:12 +02:00
..
2026-08-24 17:58:52 +02:00
2026-08-23 11:44:23 +02:00
2026-08-12 18:37:40 +02:00
2026-08-12 17:56:19 +02:00
2026-08-13 12:13:41 +02:00
2026-08-13 13:47:44 +02:00
2026-08-07 23:49:43 +02:00
2026-08-19 20:16:47 +02:00
2026-08-10 14:14:57 -07:00
2026-08-10 14:14:57 -07:00
2026-08-10 14:14:57 -07:00
2026-08-24 17:58:52 +02:00
2026-05-16 20:34:09 +02:00
2026-05-21 11:53:48 +02:00
2026-07-24 18:25:02 -07:00
2026-07-24 18:25:02 -07:00
2026-07-24 18:25:02 -07:00
2026-07-24 18:25:02 -07:00
2026-07-24 18:25:02 -07:00
2026-05-22 13:26:26 +02:00
2026-08-07 23:43:49 +02:00
2026-08-11 11:07:14 +02:00
2026-07-08 11:49:56 -07:00
2026-05-21 15:45:36 +02:00
2026-05-01 17:40:22 +02:00
2026-07-20 16:37:33 -07:00
2026-08-10 20:27:40 +02:00
2026-08-10 20:27:40 +02:00
2026-08-01 19:55:02 -05:00
2026-08-22 17:19:23 +02:00
2026-08-01 19:55:02 -05:00
2026-08-01 15:35:34 -05:00
2026-06-24 13:52:37 +02:00
2026-08-01 15:35:34 -05:00
2026-06-24 13:52:37 +02:00
2026-05-02 10:24:31 +02:00
2026-08-11 13:56:09 +02:00
2026-08-10 10:17:08 -07:00
2026-08-23 14:26:25 -04:00
2026-08-13 12:23:48 +02:00
2026-08-23 14:26:25 -04:00
2026-07-15 18:23:40 -07:00
2026-08-13 12:23:48 +02:00
2026-07-26 15:27:06 -07:00
2026-06-29 11:28:32 -05:00
2026-07-23 17:05:29 -07:00
2026-07-22 17:25:28 -07:00
2026-08-23 14:26:25 -04:00
2026-07-24 12:25:20 -07:00
2026-06-29 13:45:11 -05:00
2026-07-24 12:25:20 -07:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-19 09:59:13 -07:00
2026-08-23 14:26:25 -04:00
2026-07-29 09:15:53 -07:00
2026-08-10 11:59:39 +02:00
2026-08-23 11:44:23 +02:00
2026-08-15 12:34:28 +02:00
2026-08-15 12:34:28 +02:00
2026-08-15 12:34:28 +02:00
2026-06-12 13:49:46 -04:00
2026-07-22 17:32:01 -07:00
2026-05-17 21:55:53 +02:00
2026-08-13 19:46:46 +02:00
2026-08-07 23:43:49 +02:00
2026-08-11 11:04:50 -04:00
2026-06-06 20:36:21 -04:00
2026-08-11 11:04:50 -04:00
2026-07-18 16:24:51 -07:00
2026-05-21 19:30:30 +02:00
2026-08-11 11:04:50 -04:00
2026-08-07 23:04:42 +02:00
2026-07-31 22:05:00 -05:00
2026-08-25 09:37:55 +02:00
2026-07-16 21:53:15 -07:00
2026-05-01 17:40:22 +02:00
2026-07-18 18:21:39 -07:00
2026-05-06 12:58:55 +02:00
2026-08-11 14:24:17 +02:00
2026-05-14 16:34:21 -04:00
2026-05-01 17:40:22 +02:00
2026-07-25 08:46:39 -07:00
2026-05-11 13:01:45 +02:00
2026-06-04 18:37:32 -04:00
2026-08-25 09:10:20 +02:00
2026-05-01 17:40:22 +02:00
2026-05-15 11:03:21 +02:00
2026-07-18 10:08:43 -07:00
2026-05-07 10:33:12 +02:00
2026-05-07 10:34:28 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-07 12:10:45 +02:00
2026-07-23 13:51:07 -07:00
2026-05-08 21:07:51 +02:00
2026-05-01 17:40:22 +02:00
2026-08-07 23:59:50 +02:00
2026-08-13 12:25:25 +02:00
2026-08-12 14:01:58 +02:00
2026-05-01 17:40:22 +02:00
2026-08-13 12:37:43 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-18 12:31:25 -07:00
2026-07-20 08:09:07 -07:00
2026-07-23 13:51:07 -07:00
2026-05-01 17:40:22 +02:00
2026-08-11 18:34:07 +02:00
2026-08-11 18:34:07 +02:00
2026-08-11 18:34:07 +02:00
2026-05-11 10:40:26 -04:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-08-13 12:23:48 +02:00
2026-08-13 20:28:43 +02:00
2026-08-25 11:03:12 +02:00
2026-08-11 18:25:44 +02:00
2026-05-01 17:40:22 +02:00
2026-08-01 15:35:34 -05:00
2026-08-25 11:03:12 +02:00
2026-08-25 11:03:12 +02:00
2026-07-24 12:28:55 -07:00
2026-08-11 13:26:24 +02:00
2026-08-25 11:03:12 +02:00
2026-08-11 13:26:24 +02:00
2026-08-11 13:26:24 +02:00
2026-08-11 11:29:35 +02:00
2026-05-17 19:51:29 +02:00
2026-05-11 10:40:26 -04:00
2026-05-11 10:40:26 -04:00
2026-07-16 21:19:28 -07:00
2026-05-01 17:40:22 +02:00
2026-05-11 10:40:26 -04:00
2026-05-10 11:26:59 +02:00
2026-05-29 15:59:13 +02:00
2026-05-11 10:40:26 -04:00
2026-05-23 13:37:57 +02:00
2026-07-23 21:03:43 -07:00
2026-08-12 15:56:40 +02:00
2026-08-04 12:16:54 -05:00
2026-05-14 17:43:12 -04:00
2026-08-15 12:34:28 +02:00
2026-07-22 17:25:28 -07:00
2026-05-04 13:23:27 +02:00
2026-06-04 11:15:28 +02:00
2026-05-01 17:40:22 +02:00
2026-05-04 13:23:27 +02:00
2026-08-04 12:16:54 -05:00
2026-06-09 19:48:37 -04:00
2026-08-04 12:16:54 -05:00
2026-08-04 12:16:54 -05:00
2026-05-14 17:43:12 -04:00
2026-06-24 13:31:17 +02:00
2026-05-27 11:15:21 +02:00
2026-05-27 11:15:21 +02:00
2026-08-04 12:16:54 -05:00
2026-05-04 13:23:27 +02:00
2026-07-18 12:30:54 -07:00
2026-08-04 12:16:54 -05:00
2026-05-27 11:15:21 +02:00
2026-05-27 11:15:21 +02:00
2026-08-14 12:30:32 +02:00
2026-05-25 17:29:02 +02:00
2026-07-29 22:39:55 -04:00
2026-08-05 22:57:56 +02:00
2026-05-27 10:53:30 +02:00
2026-05-25 18:19:06 +02:00
2026-05-25 18:12:40 +02:00
2026-06-04 18:37:32 -04:00
2026-07-29 22:39:55 -04:00
2026-05-15 17:44:09 +02:00
2026-06-23 16:22:27 +02:00
2026-06-23 16:22:27 +02:00
2026-07-22 16:10:45 -07:00
2026-08-22 20:18:14 +02:00
2026-05-21 19:30:30 +02:00
2026-07-29 17:15:27 -04:00
2026-05-19 17:08:14 +02:00
2026-08-11 22:26:52 +02:00
2026-08-24 21:58:27 +02:00
2026-05-22 14:24:04 +02:00
2026-07-20 09:44:48 -07:00
2026-05-14 13:15:03 +02:00
2026-05-14 11:12:25 +02:00
2026-05-11 10:40:26 -04:00
2026-08-08 11:05:05 +02:00
2026-05-01 17:40:22 +02:00
2026-08-19 20:16:47 +02:00
2026-08-12 16:42:37 +02:00
2026-05-25 18:19:06 +02:00
2026-05-25 18:12:40 +02:00
2026-05-14 10:56:10 +02:00
2026-08-10 18:44:19 +02:00
2026-05-14 10:57:44 +02:00
2026-08-08 11:05:05 +02:00
2026-05-01 17:40:22 +02:00
2026-08-10 13:33:07 -07:00
2026-05-20 14:09:09 +02:00
2026-05-20 14:12:06 +02:00
2026-05-29 15:25:21 +02:00
2026-05-19 20:54:20 +02:00
2026-08-10 18:44:19 +02:00
2026-08-13 09:58:15 +02:00
2026-05-19 20:54:20 +02:00
2026-08-22 16:55:01 +02:00
2026-08-15 17:04:04 +02:00
2026-08-07 02:38:06 -07:00
2026-08-11 14:24:17 +02:00
2026-06-29 08:51:15 -05:00
2026-07-19 10:00:46 -07:00
2026-07-26 14:53:29 -07:00
2026-08-23 14:26:25 -04:00
2026-08-15 17:00:19 +02:00
2026-08-11 18:25:44 +02:00
2026-07-30 10:11:23 -04:00
2026-07-31 17:18:42 -04:00
2026-08-07 12:50:04 +02:00
2026-07-22 15:52:58 -07:00
2026-08-19 20:16:47 +02:00
2026-05-14 12:02:53 +02:00
2026-05-20 14:24:19 +02:00
2026-08-23 17:18:58 -04:00
2026-05-14 12:02:53 +02:00
2026-07-26 14:53:29 -07:00
2026-07-07 09:18:03 -07:00
2026-07-24 16:48:14 -07:00
2026-06-04 18:35:01 -04:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-18 12:31:03 -07:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-08-25 09:10:20 +02:00
2026-07-29 22:39:55 -04:00
2026-08-01 13:13:39 -05:00
2026-07-29 21:34:47 -04:00
2026-07-29 22:39:55 -04:00
2026-07-29 21:34:47 -04:00
2026-07-29 22:39:55 -04:00
2026-07-29 21:34:47 -04:00
2026-07-29 21:34:47 -04:00
2026-07-24 12:19:39 -07:00
2026-07-24 12:19:39 -07:00
2026-07-18 10:08:43 -07:00
2026-07-24 12:20:04 -07:00
2026-08-23 16:43:31 +02:00
2026-07-24 12:19:39 -07:00
2026-07-24 12:19:39 -07:00
2026-06-29 10:49:43 -05:00
2026-07-19 09:33:23 -07:00
2026-07-19 21:29:15 -07:00
2026-07-19 21:29:15 -07:00
2026-08-12 17:56:19 +02:00
2026-08-24 19:46:02 +02:00
2026-08-20 22:28:31 +02:00
2026-06-04 18:37:32 -04:00
2026-08-01 12:44:40 -07:00
2026-06-22 18:30:16 +02:00
2026-08-09 13:57:36 +02:00
2026-06-16 01:25:04 -04:00
2026-05-01 17:40:22 +02:00
2026-08-09 13:17:28 +02:00
2026-06-04 18:38:25 -04:00
2026-07-18 10:08:43 -07:00
2026-07-18 10:08:43 -07:00
2026-07-16 21:15:00 -07:00
2026-05-01 17:40:22 +02:00
2026-06-04 18:37:32 -04:00
2026-06-04 18:38:25 -04:00
2026-06-04 18:38:25 -04:00
2026-05-23 18:04:21 +02:00
2026-08-19 17:29:36 +02:00
2026-08-19 17:29:36 +02:00
2026-08-19 17:29:36 +02:00
2026-08-19 17:29:36 +02:00
2026-08-19 17:29:36 +02:00
2026-07-24 09:01:17 -07:00
2026-08-19 20:16:47 +02:00
2026-06-29 14:49:39 -05:00
2026-07-18 10:08:43 -07:00
2026-05-04 11:18:25 +02:00
2026-05-04 10:31:06 +02:00
2026-05-04 08:57:19 +02:00
2026-07-18 12:30:54 -07:00
2026-05-04 08:57:19 +02:00
2026-05-04 09:57:13 +02:00
2026-05-27 11:15:21 +02:00
2026-07-18 10:08:43 -07:00
2026-08-23 11:44:23 +02:00
2026-05-08 20:52:29 +02:00
2026-07-26 12:31:04 -07:00
2026-07-18 16:09:03 -07:00
2026-08-24 21:58:27 +02:00
2026-05-25 17:29:02 +02:00
2026-07-29 22:39:55 -04:00
2026-05-16 13:00:30 +02:00
2026-07-29 22:39:55 -04:00
2026-05-01 17:40:22 +02:00
2026-05-22 13:26:46 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-20 09:44:48 -07:00
2026-05-05 12:53:51 +02:00
2026-08-09 13:57:36 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-08-22 15:02:12 +02:00
2026-05-01 17:40:22 +02:00
2026-07-23 17:40:47 -07:00
2026-05-05 14:22:03 +02:00
2026-05-21 10:19:36 +02:00
2026-07-27 09:49:15 -07:00
2026-08-10 13:59:20 +02:00
2026-08-09 13:17:28 +02:00
2026-05-08 20:52:29 +02:00
2026-08-09 21:54:01 +02:00
2026-08-16 10:14:42 +02:00
2026-08-24 21:58:27 +02:00
2026-08-11 11:07:14 +02:00
2026-07-24 12:16:51 -07:00
2026-08-24 19:46:02 +02:00
2026-06-04 18:34:04 -04:00
2026-08-08 02:31:23 -07:00
2026-05-06 13:20:34 +02:00
2026-08-24 21:58:27 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-08-10 17:41:05 +02:00
2026-08-10 17:41:05 +02:00
2026-07-25 12:35:17 -07:00
2026-08-13 11:46:45 +02:00
2026-07-24 16:48:14 -07:00
2026-07-24 16:48:14 -07:00
2026-07-24 16:48:14 -07:00
2026-07-25 12:35:17 -07:00
2026-07-29 23:21:45 -04:00
2026-05-21 11:58:43 +02:00
2026-06-22 21:48:35 +02:00
2026-08-23 18:31:42 -04:00
2026-07-26 19:07:11 -07:00
2026-06-09 19:48:37 -04:00
2026-06-09 19:48:37 -04:00
2026-06-09 19:48:37 -04:00
2026-08-01 18:13:45 -07:00
2026-06-09 19:48:37 -04:00
2026-06-09 19:48:37 -04:00
2026-08-11 12:31:52 +02:00
2026-07-18 16:24:51 -07:00
2026-07-24 12:24:09 -07:00
2026-07-24 12:19:39 -07:00
2026-08-22 16:24:21 +02:00
2026-08-25 09:10:20 +02:00
2026-07-24 12:24:09 -07:00
2026-07-03 09:06:31 -07:00
2026-06-09 19:48:37 -04:00
2026-08-23 16:43:31 +02:00
2026-08-23 16:43:31 +02:00
2026-07-19 19:05:42 -07:00
2026-08-01 13:06:19 -05:00
2026-06-09 19:48:37 -04:00
2026-07-03 09:06:31 -07:00
2026-05-06 13:20:34 +02:00
2026-08-11 12:31:52 +02:00
2026-08-11 12:31:52 +02:00
2026-06-09 19:48:37 -04:00
2026-06-09 19:48:37 -04:00
2026-07-03 09:06:31 -07:00
2026-07-15 18:13:39 -07:00
2026-08-13 19:33:22 +02:00
2026-06-09 19:48:37 -04:00
2026-08-22 16:24:21 +02:00
2026-06-04 11:14:04 +02:00
2026-06-04 11:14:04 +02:00
2026-08-13 21:26:08 +02:00
2026-05-01 17:40:22 +02:00
2026-08-13 12:22:58 +02:00
2026-07-21 15:25:49 -07:00
2026-08-25 11:03:12 +02:00
2026-07-21 16:01:49 -07:00
2026-07-19 22:46:27 -07:00
2026-07-24 12:17:16 -07:00
2026-07-24 12:17:16 -07:00
2026-07-24 12:18:25 -07:00
2026-07-24 12:18:25 -07:00
2026-07-22 16:39:00 -07:00
2026-08-19 20:16:47 +02:00
2026-06-04 18:37:32 -04:00
2026-06-28 20:46:23 -04:00
2026-07-18 10:08:43 -07:00
2026-08-14 09:08:34 +02:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-23 15:28:32 -07:00
2026-08-08 02:35:44 -07:00
2026-07-23 15:28:32 -07:00
2026-05-01 17:40:22 +02:00
2026-05-08 20:48:36 +02:00
2026-07-29 20:04:49 -07:00
2026-08-08 03:12:08 -07:00
2026-06-04 18:38:25 -04:00
2026-06-04 18:38:25 -04:00
2026-08-12 11:58:25 +02:00
2026-07-29 18:47:27 -04:00
2026-08-08 01:44:56 -07:00
2026-07-29 20:04:49 -07:00
2026-08-10 03:45:49 -07:00
2026-08-14 09:08:34 +02:00
2026-08-14 00:15:07 -07:00
2026-05-01 17:40:22 +02:00
2026-06-04 18:38:25 -04:00
2026-08-24 18:56:00 +02:00
2026-07-18 10:08:43 -07:00
2026-07-29 09:15:53 -07:00
2026-06-04 18:38:25 -04:00
2026-06-29 11:28:32 -05:00
2026-05-01 17:40:22 +02:00
2026-05-29 14:36:26 -04:00
2026-07-22 21:39:15 -07:00
2026-05-14 16:33:51 -04:00
2026-07-22 21:39:15 -07:00
2026-05-16 21:01:09 +02:00
2026-08-05 17:43:14 +02:00
2026-07-16 14:46:56 -07:00
2026-07-16 14:46:56 -07:00
2026-05-01 17:40:22 +02:00
2026-05-01 17:40:22 +02:00
2026-07-22 17:02:52 -07:00
2026-06-28 20:46:23 -04:00
2026-07-18 10:08:43 -07:00
2026-08-19 13:59:25 +02:00
2026-08-24 21:58:27 +02:00