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.
Security risk: single-letter alias c='opencode' turns typos into silent 54MB remote downloads
Reported by nhlmg93 · filed Jun 21, 2026Closed upstream on 2026-07-18. GitHub close reason: completed. No closing PR or commit is recorded — "completed" alone is not evidence of a fix.
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?
- Not yet mapped to any requirement or component.
- 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?
- Our staff decide whether the report is valid. Where this project allows it, agents decide whether it duplicates another report or a known issue. No decision has been recorded yet.
Original report
Summary
default/bash/aliases ships:
alias c='opencode'This is a real security/footgun risk that I just hit in practice, not in theory.
What happened
I typed c;ear (a typo for clear). Bash splits on ;, so the line ran as two commands:
c-> expands via the alias toopencode.ear-> never executed because the opencode launcher (~/.local/bin/opencode) ends withexec ..., which replaces the shell process.
The opencode wrapper runs pnpm dlx --package opencode-ai true, which silently downloaded 54 MB of remote binaries (opencode-linux-x64, opencode-linux-x64-baseline) from the npm registry with no confirmation:
Packages: +3
Downloading [email protected]: 54.43 MB/54.43 MB, done
Downloading [email protected]: 54.43 MB/54.43 MB, doneThe only reason I noticed is that 54 MB took long enough for me to read the output and hit ^C.
Why this is a security risk, not just an annoyance
- A one-character command (`c`) that triggers an arbitrary remote code download with zero confirmation. A single stray keystroke or a typo (e.g.
c;ear,c&,c|...) launches a launcher thatexecs into a freshly-fetched npm package's binary. The launcher does setPNPM_CONFIG_MINIMUM_RELEASE_AGE=7200(good), but that only mitigates supply-chain freshness, not the fact that a typo silently invokes remote-fetched code at all. - `c` is extremely easy to type by accident. It's one of the most common collision characters: typos for
clear,cd,cp,cat, autocompletion ofc<Tab>, etc. Aliasing a single low-friction character to a tool that fetches-and-execs remote binaries is exactly the shape of an accidental-RCE vector. - The launcher uses `exec`, so it replaces the shell. With
c;ear, the second command never ran - but withc && rm ...style typos, or justcby itself when you meantclear, you silently leave your shell context and start a network-fetching agent. - It's indistinguishable from malware behavior to an end user. Typo -> silent 54 MB download from the internet -> exec of a remote package. That is the textbook profile of a malicious "accident," and it's being shipped as a default alias.
Suggested mitigations
- Don't alias a single character to a remote-fetching launcher.
cis far too collision-prone. Pick something with more entropy (e.g.oc,code-style), or drop the alias entirely. - If a short alias is wanted, guard it so a bare invocation with no arguments doesn't silently fetch/exec, e.g. only run when given args, or print what it would do first.
- Consider whether the launcher should require an explicit
install/runsubcommand rather than fetching on first invocation.
Environment
- Omarchy alias file:
default/bash/aliases, linealias c='opencode' - Launcher:
~/.local/bin/opencode(wrapper that callspnpm dlx --package opencode-ai truethen execs the resolved bin) - Observed with opencode-ai 1.17.9
View raw text
## Summary `default/bash/aliases` ships: ```bash alias c='opencode' ``` This is a real security/footgun risk that I just hit in practice, not in theory. ## What happened I typed `c;ear` (a typo for `clear`). Bash splits on `;`, so the line ran as two commands: 1. `c` -> expands via the alias to `opencode`. 2. `ear` -> never executed because the opencode launcher (`~/.local/bin/opencode`) ends with `exec ...`, which replaces the shell process. The opencode wrapper runs `pnpm dlx --package opencode-ai true`, which silently downloaded **54 MB** of remote binaries (`opencode-linux-x64`, `opencode-linux-x64-baseline`) from the npm registry with no confirmation: ``` Packages: +3 Downloading [email protected]: 54.43 MB/54.43 MB, done Downloading [email protected]: 54.43 MB/54.43 MB, done ``` The only reason I noticed is that 54 MB took long enough for me to read the output and hit `^C`. ## Why this is a security risk, not just an annoyance 1. **A one-character command (`c`) that triggers an arbitrary remote code download with zero confirmation.** A single stray keystroke or a typo (e.g. `c;ear`, `c&`, `c|...`) launches a launcher that `exec`s into a freshly-fetched npm package's binary. The launcher does set `PNPM_CONFIG_MINIMUM_RELEASE_AGE=7200` (good), but that only mitigates supply-chain freshness, not the fact that a typo silently invokes remote-fetched code at all. 2. **`c` is extremely easy to type by accident.** It's one of the most common collision characters: typos for `clear`, `cd`, `cp`, `cat`, autocompletion of `c<Tab>`, etc. Aliasing a single low-friction character to a tool that fetches-and-execs remote binaries is exactly the shape of an accidental-RCE vector. 3. **The launcher uses `exec`, so it replaces the shell.** With `c;ear`, the second command never ran - but with `c && rm ...` style typos, or just `c` by itself when you meant `clear`, you silently leave your shell context and start a network-fetching agent. 4. **It's indistinguishable from malware behavior to an end user.** Typo -> silent 54 MB download from the internet -> exec of a remote package. That is the textbook profile of a malicious "accident," and it's being shipped as a default alias. ## Suggested mitigations - **Don't alias a single character to a remote-fetching launcher.** `c` is far too collision-prone. Pick something with more entropy (e.g. `oc`, `code`-style), or drop the alias entirely. - If a short alias is wanted, **guard it so a bare invocation with no arguments doesn't silently fetch/exec**, e.g. only run when given args, or print what it would do first. - Consider whether the launcher should require an explicit `install`/`run` subcommand rather than fetching on first invocation. ## Environment - Omarchy alias file: `default/bash/aliases`, line `alias c='opencode'` - Launcher: `~/.local/bin/opencode` (wrapper that calls `pnpm dlx --package opencode-ai true` then execs the resolved bin) - Observed with opencode-ai 1.17.9
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
Not linked to any known issue, other report or change yet.
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.
No decision has been recorded yet.