← Back to overview

sktev-mounted-drives low static: low (AI confirms)

sktev/mounted-drives aae8a87 Scanned 8/30/2026, 1:00:06 PM

First scan — all files are new

Score
7
Findings
2
Files
3

Install — pinned to audited commit

Usual omarchy plugin add https://github.com/sktev/mounted-drives.git --enable installs latest. This pins to the exact commit audited here (aae8a87):

omarchy plugin add https://github.com/sktev/mounted-drives.git --yes && \
  git -C ~/.config/omarchy/plugins/io.github.sktev.mounted-drives checkout aae8a8779c3220bd3003f47d47a4f9c2ad3175fe && \
  omarchy plugin enable io.github.sktev.mounted-drives # audited commit aae8a87

Unpinned (latest): omarchy plugin add https://github.com/sktev/mounted-drives.git --enable

What this plugin does

Shows connected external drives (USB/CD-ROM/hotplug, optionally internal NVMe/SATA) in the Omarchy bar and lets the user mount, unmount, unlock LUKS containers, open mountpoints, and safely eject/power-off disks. It auto-refreshes via udevadm block events and a fallback lsblk poll, displaying vendor/model, partition state, and errors in a popup.

AI Review

low

Plugin is a legitimate drive manager with no arbitrary code execution; IPC exposure is standard Omarchy panel toggle with no custom payload handler, and executable resolution points to a bundled, audited Python helper executed via Process command array with fixed args.

Model opencode-go/muse-spark-1.2-contributor • 8/30/2026, 1:00:06 PM

How it works — sequence

sequenceDiagram
    participant User
    participant Panel as Panel.qml
    participant Scanner as scripts/list_drives.py
    participant LSBLK as lsblk/findmnt
    participant UDisks as udisksctl
    User->>Panel: Click bar icon / udev event / timer
    Panel->>Scanner: Process command ["python3", "scripts/list_drives.py"]
    Scanner->>LSBLK: run lsblk -J, findmnt /
    LSBLK-->>Scanner: block device JSON
    Scanner-->>Panel: {drives:[...]}
    Panel->>User: Render drive cards (mount/unmount/unlock/eject)
    User->>Panel: Mount/Unlock/Eject click (+ passphrase via stdin)
    Panel->>UDisks: udisksctl mount/unmount/unlock/lock/power-off -b /dev/...

Generated by AI from static findings + file context

Findings — AI refined (2)

Panel.qml:12ipcTargethigh →info
benign

Declares ipcTarget but defines no custom IpcHandler/onMessage handler that parses IPC payloads into shell commands; base Panel only exposes standard open/close/toggle, like all Omarchy bar widgets. No payload validation needed, not arbitrary execution.

↳ Panel.qml:12 ipcTarget: "io.github.sktev.mounted-drives" — no IpcHandler/onIpcMessage in file; grep shows no ipc handler logic (only moduleName duplicate)
ℹ Not an executable; standard Omarchy IPC routing for bar-widget visibility control, not command execution
Panel.qml:52Util.fileUrlmedium →info
benign

Qt.resolvedUrl("scripts/list_drives.py") resolves a bundled helper relative to Panel.qml, not user input. Executed via Process command array ["python3", resolvedPath] with optional "--include-internal" from boolean setting; no shell interpolation and path is not attacker-controlled.

↳ Panel.qml:52 var cmd = ["python3", pathFromUrl(Qt.resolvedUrl("scripts/list_drives.py"))] -> Panel.qml:54-55 scannerProc.command = cmd; scannerProc.running = true; Process id:scannerProc executes python3 directly
ℹ scripts/list_drives.py is the plugin's bundled enumerator: runs only `lsblk -J -o NAME,PATH,SIZE,FSTYPE,LABEL,MOUNTPOINTS,VENDOR,MODEL,TRAN,RM,HOTPLUG,TYPE` and `findmnt`/`lsblk -s`, filters to usb/removable/hotplug/rom (+ sata/nvme if --include-internal), excludes root/loop/zram/dm-*, emits JSON; args are static or boolean-derived, sanitized, no network/file writes

Process execution

  • Panel.qml:12IPC handler exposure — no payload validation detected (handler may accept arbitrary IPC without checks)

Network

No network calls — good.

Changed files

Changed Files (7)

  • Added — .gitignore
  • Added — LICENSE
  • Added — Model.js
  • Added — Panel.qml
  • Added — README.md
  • Added — manifest.json
  • Added — scripts/list_drives.py

Commits (4)

  • aae8a87Improve popup layout: align partitions, plain buttons, dividers by Stole Kotev on 2026-08-26T23:23:19+02:00
  • 8a493bb Harden against udev-controlled strings; move LUKS passphrase off argv by Stole Kotev on 2026-08-20T22:44:14+02:00
  • 2ebe464Rename plugin id to io.github.sktev.mounted-drives by Stole Kotev on 2026-08-20T18:17:09+02:00
  • f5b1b05Initial commit: Omarchy shell bar widget for external drives by S.Kotev on 2026-08-20T00:19:55+02:00

No obfuscation detected.

Details — hidden by default

Files opened (1) — FolderListModel, StandardPaths

Files Opened (1)

Severity Category Pattern File Line Description Snippet
medium fileOps Util.fileUrl Panel.qml 52 Resolves file URL var cmd = ["python3", pathFromUrl(Qt.resolvedUrl("scripts/list_drives.py"))]
Expected imports (2) — normal for Omarchy plugins

These are expected Quickshell imports, not counted as risk.

Expected Imports (2)

Severity Category Pattern File Line Description Snippet
info imports import Quickshell Panel.qml 3 Expected Quickshell import — normal for Omarchy plugins (no risk) import Quickshell
info imports import qs Panel.qml 5 Expected local module import — normal for Omarchy plugins (no risk) import qs.Commons
Full file tree (3 files)

File Tree (3 files)

PathTypeLinesSize
Model.js js 78 2616
Panel.qml qml 847 31764
manifest.json json 51 1357
Raw static findings (2) — table view

Risk-Relevant Findings (raw) (2)

Severity Category Pattern File Line Description Snippet
high ipc ipcTarget Panel.qml 12 IPC handler exposure — no payload validation detected (handler may accept arbitrary IPC without checks) ipcTarget: "io.github.sktev.mounted-drives"
medium fileOps Util.fileUrl Panel.qml 52 Resolves file URL var cmd = ["python3", pathFromUrl(Qt.resolvedUrl("scripts/list_drives.py"))]

Generated by omarchy-audit at 2026-08-30T11:00:06.674Z • Commit aae8a87 linked to GitHub for verification • Overview