Proof Portal

Project overview

Omarchy

ProbeLabs65 findings · 95 requirements

A 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.

Inbox
ReportR-2204GitHub issuePublicDecided· Out of scope

Overly-restrictive sudoers regex in omarchy-tzupdate — no security impact

Reported by birajbasumatary667-cmd · filed Oct 3, 2026 · open at source

Decided: Out of scope — decided by agents · verified 3 days ago.

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

Overly-restrictive sudoers regex in omarchy-tzupdate — no security impactrevision 1 · captured 2026-10-03 07:54 UTC via poll

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