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] Screen recording keeps the in-flight recording path at a fixed /tmp name, and that path drives ffmpeg, mv and rm
Reported by Chessing234 · filed Aug 26, 2026Closed upstream on 2026-09-15 by the merge of PR #8374 (closed by ErikMelton). GitHub close reason: completed.
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
bin/omarchy-capture-screenrecording keeps the path of the recording in flight at a fixed name in /tmp:
RECORDING_FILE="/tmp/omarchy-screenrecord-filename"
REGION_FILE="${XDG_RUNTIME_DIR:-/tmp}/omarchy-screenrecord-region"The line below it already uses the per-user runtime directory. This one does not.
/tmp is world-writable — the sticky bit prevents deleting another user's file, not creating the name first — and the contents of that file are read back on stop and used as a filesystem path:
finalize_recording() {
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
[[ -f $latest ]] || return
...
local processed="${latest%.mp4}-processed.mp4"
if ffmpeg "${args[@]}" "$processed" -loglevel quiet 2>/dev/null; then
mv "$processed" "$latest"
...
}
stop_screenrecording() {
...
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
local preview="${filename%.mp4}-preview.png"
ffmpeg -y -i "$filename" ... "$preview" ...
omarchy-notification-send "Screen recording saved" ... --exec mpv -- "$filename"
rm -f "$preview"
}So another local account that owns the name controls, as the recording user:
- where
ffmpeg -ywrites (<path>-processed.mp4,<path>-preview.png—-yoverwrites without asking) - what
mvreplaces (<path>itself) - what
rm -fdeletes - the path the "Screen recording saved" toast opens in mpv when clicked
[[ -f $latest ]] only checks that the target exists, which is exactly the case for a file worth clobbering. $XDG_RUNTIME_DIR is 0700 and per-user, so the sibling region file has none of this.
OMARCHY_SCREENRECORD_DEBUG=true has the same shape: it appends the recorder's stderr and the picked geometry to /tmp/omarchy-screenrecord.log.
Same class as #7904 (FIDO2 authfile staged at a predictable /tmp path).
Expected
Keep the recording state and the debug log beside the region file under $XDG_RUNTIME_DIR.
View raw text
`bin/omarchy-capture-screenrecording` keeps the path of the recording in flight at a fixed name in `/tmp`:
```bash
RECORDING_FILE="/tmp/omarchy-screenrecord-filename"
REGION_FILE="${XDG_RUNTIME_DIR:-/tmp}/omarchy-screenrecord-region"
```
The line below it already uses the per-user runtime directory. This one does not.
`/tmp` is world-writable — the sticky bit prevents deleting another user's file, not creating the name first — and the contents of that file are read back on stop and used as a **filesystem path**:
```bash
finalize_recording() {
latest=$(cat "$RECORDING_FILE" 2>/dev/null)
[[ -f $latest ]] || return
...
local processed="${latest%.mp4}-processed.mp4"
if ffmpeg "${args[@]}" "$processed" -loglevel quiet 2>/dev/null; then
mv "$processed" "$latest"
...
}
stop_screenrecording() {
...
local filename=$(cat "$RECORDING_FILE" 2>/dev/null)
local preview="${filename%.mp4}-preview.png"
ffmpeg -y -i "$filename" ... "$preview" ...
omarchy-notification-send "Screen recording saved" ... --exec mpv -- "$filename"
rm -f "$preview"
}
```
So another local account that owns the name controls, as the recording user:
- where `ffmpeg -y` writes (`<path>-processed.mp4`, `<path>-preview.png` — `-y` overwrites without asking)
- what `mv` replaces (`<path>` itself)
- what `rm -f` deletes
- the path the "Screen recording saved" toast opens in mpv when clicked
`[[ -f $latest ]]` only checks that the target exists, which is exactly the case for a file worth clobbering. `$XDG_RUNTIME_DIR` is 0700 and per-user, so the sibling region file has none of this.
`OMARCHY_SCREENRECORD_DEBUG=true` has the same shape: it appends the recorder's stderr and the picked geometry to `/tmp/omarchy-screenrecord.log`.
Same class as #7904 (FIDO2 authfile staged at a predictable `/tmp` path).
## Expected
Keep the recording state and the debug log beside the region file under `$XDG_RUNTIME_DIR`.
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.