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-4469GitHub issuePublicReceived

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.

Received and recorded verbatim. Nothing has been checked yet.

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

Security risk: single-letter alias c='opencode' turns typos into silent 54MB remote downloadsrevision 1 · captured 2026-10-04 11:56 UTC via poll

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:

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