Proof Portal
Omarchy
ProbeLabs65 findings · 95 requirementsA proof layer — requirements, tests and verified fixes — for two of Omarchy's subsystems: the application menu (launcher scripts, QML model, JSONC config, search and selection) and the lock screen (lock scripts, QML, PAM authentication). Scope is deliberately limited to those components of omacom/omarchy; the rest of the distribution is not covered.
Overly-restrictive sudoers regex in omarchy-tzupdate — no security impact
Reported by birajbasumatary667-cmd · filed Oct 3, 2026 · open at source
At a glance
- 1 · What is claimed?
- Only the report text below — no validator has restated it as checkable claims yet.
- 2 · What does it affect?
- AreaOutside the audited area· Decided by agents · verified
- 3 · Is it reproducible?
- No validation has been run yet.
- 4 · What remains unclear?
- Not validated yet: no claims, no reproducer.
- 5 · What happens next?
- Decided by agents and verified by a second, independent agent — see the decision.
Original report
System details
Tested on Kali Linux (x86_64), Omarchy quattro branch, commit 821ae589. Affected rule is distro-agnostic (sudo/regex evaluation, not Arch-specific), but worth confirming the same drop-in is generated identically on a stock Arch/Omarchy install.
What's wrong?
Note: This report is submitted for awareness and to assist with fixing
a functionality defect. This is not a security vulnerability and
carries no security impact.
The sudoers rule installed for passwordless timezone updates rejects
essentially all real IANA timezone names due to a regex typo, forcing
the "set timezone without a password prompt" convenience path to fail
for normal usage.
Rule installed at /etc/sudoers.d/omarchy-tzupdate:
zubiii ALL=(root) NOPASSWD: /usr/bin/timedatectl ^set-timezone [A-Za-z0-9_+]A-Za-z0-9_+.-*$
Root cause: each path segment is built from two single-character classes
with no repetition quantifier on the second class, so every segment
(before and after each /) is forced to be exactly 2 characters long.
This rejects:
- "UTC" (3 characters)
- "America/New_York" (far more than 2 chars per segment)
- basically every real timezone name
It's presumably missing a * on the second class, e.g.:
^set-timezone [A-Za-z0-9_+][A-Za-z0-9_+.-](/[A-Za-z0-9_+][A-Za-z0-9_+.-])*$
Steps to reproduce:
$ sudo -n /usr/bin/timedatectl set-timezone "UTC"
sudo: a password is required
$ sudo -n /usr/bin/timedatectl set-timezone "America/New_York"
sudo: a password is required
$ sudo -n /usr/bin/timedatectl set-timezone "UT"
Failed to set time zone: Invalid or not installed time zone 'UT'
(passes the sudoers regex since it's exactly 2 chars, but isn't a
real timezone — confirms the regex itself is the blocker, not
timedatectl)
Scope/impact: this is a functionality bug only, not a security issue.
I specifically tested the opposite (permissive) failure direction —
command injection via ;, embedded newlines, extra arguments — and
confirmed sudo correctly rejects all of those; the rule only fails in
the overly-restrictive direction. Reported here per the security
policy's own guidance that non-boundary-crossing robustness issues are
improvements rather than vulnerabilities, and are better handled as a
regular issue/PR.
Suggested fix: change the character classes to allow repetition, e.g.
^set-timezone [A-Za-z0-9_+][A-Za-z0-9_+.-](/[A-Za-z0-9_+][A-Za-z0-9_+.-])*$
matching whatever pattern is used for variable-length segments in
other Omarchy sudoers rules (e.g. omarchy-dns) for consistency. Happy
to open a PR with this fix if that's useful.
<img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/f91c9fd1-5e2e-4b50-87c6-5d95b1bac931" />
<img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/f82da941-08cb-4709-8346-be21432b7c38" />
<img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/5cced193-2eb4-41a7-a78a-b4cf54014a44" />
<img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/9090a1c7-c022-4da5-bfdb-c3beb1ed4b79" />
<img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/0d48bf5d-ff27-486a-802f-006c1aef9b2f" />
View raw text
### System details Tested on Kali Linux (x86_64), Omarchy quattro branch, commit 821ae589. Affected rule is distro-agnostic (sudo/regex evaluation, not Arch-specific), but worth confirming the same drop-in is generated identically on a stock Arch/Omarchy install. ### What's wrong? Note: This report is submitted for awareness and to assist with fixing a functionality defect. This is not a security vulnerability and carries no security impact. The sudoers rule installed for passwordless timezone updates rejects essentially all real IANA timezone names due to a regex typo, forcing the "set timezone without a password prompt" convenience path to fail for normal usage. Rule installed at /etc/sudoers.d/omarchy-tzupdate: zubiii ALL=(root) NOPASSWD: /usr/bin/timedatectl ^set-timezone [A-Za-z0-9_+][A-Za-z0-9_+.-](/[A-Za-z0-9_+][A-Za-z0-9_+.-])*$ Root cause: each path segment is built from two single-character classes with no repetition quantifier on the second class, so every segment (before and after each `/`) is forced to be exactly 2 characters long. This rejects: - "UTC" (3 characters) - "America/New_York" (far more than 2 chars per segment) - basically every real timezone name It's presumably missing a `*` on the second class, e.g.: ^set-timezone [A-Za-z0-9_+][A-Za-z0-9_+.-]*(/[A-Za-z0-9_+][A-Za-z0-9_+.-]*)*$ Steps to reproduce: $ sudo -n /usr/bin/timedatectl set-timezone "UTC" sudo: a password is required $ sudo -n /usr/bin/timedatectl set-timezone "America/New_York" sudo: a password is required $ sudo -n /usr/bin/timedatectl set-timezone "UT" Failed to set time zone: Invalid or not installed time zone 'UT' (passes the sudoers regex since it's exactly 2 chars, but isn't a real timezone — confirms the regex itself is the blocker, not timedatectl) Scope/impact: this is a functionality bug only, not a security issue. I specifically tested the opposite (permissive) failure direction — command injection via `;`, embedded newlines, extra arguments — and confirmed sudo correctly rejects all of those; the rule only fails in the overly-restrictive direction. Reported here per the security policy's own guidance that non-boundary-crossing robustness issues are improvements rather than vulnerabilities, and are better handled as a regular issue/PR. Suggested fix: change the character classes to allow repetition, e.g. ^set-timezone [A-Za-z0-9_+][A-Za-z0-9_+.-]*(/[A-Za-z0-9_+][A-Za-z0-9_+.-]*)*$ matching whatever pattern is used for variable-length segments in other Omarchy sudoers rules (e.g. omarchy-dns) for consistency. Happy to open a PR with this fix if that's useful. <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/f91c9fd1-5e2e-4b50-87c6-5d95b1bac931" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/f82da941-08cb-4709-8346-be21432b7c38" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/5cced193-2eb4-41a7-a78a-b4cf54014a44" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/9090a1c7-c022-4da5-bfdb-c3beb1ed4b79" /> <img width="1920" height="1080" alt="Image" src="https://github.com/user-attachments/assets/0d48bf5d-ff27-486a-802f-006c1aef9b2f" />
- f91c9fd1-5e2e-4b50-87c6-5d95b1bac931
- f82da941-08cb-4709-8346-be21432b7c38
- 5cced193-2eb4-41a7-a78a-b4cf54014a44
- 9090a1c7-c022-4da5-bfdb-c3beb1ed4b79
- 0d48bf5d-ff27-486a-802f-006c1aef9b2f
Validation
Not checked yet. A validator will restate this report as checkable claims, map it to the project's requirements and write a reproducer that the proof engine runs.
Linked
- Related PRpr/8472· confirmed
Decision
Decisions are recorded by our staff — or, where this project allows it, by agents: checked by a second, independent agent, or by a single agent where the project's policy says so. Any decision reached so far is shown below.
- Out of scopeDecided by agents · verified · 2026-10-09 20:56 UTC