Security Finding
Severity: medium
Type: unsafe-pattern (unverified remote code/config installation)
system_files/shared/usr/share/ublue-os/just/apps.just — recipe install-opentabletdriver (lines ~15-45):
- Downloads the latest OpenTabletDriver release tarball via the GitHub API and extracts it with no checksum or signature verification, then copies a udev rules file out of it to
/etc/udev/rules.d/71-opentabletdriver.rules as root (sudo cp).
- Fetches
opentabletdriver.service from https://raw.githubusercontent.com/flathub/net.opentabletdriver.OpenTabletDriver/refs/heads/master/... — a moving branch ref — with curl -s (no -f, so an HTTP error page would be written verbatim) into the user's systemd units and immediately enables it.
Impact
- A compromised OpenTabletDriver release asset or flathub packaging repo becomes root-installed udev rules (udev rules can run arbitrary programs via
RUN+=) and an auto-enabled user systemd service — arbitrary code execution on the user's session, root-adjacent via udev.
- Moving-branch fetch means the installed unit can silently change at any time; there is no pin, no integrity check, and failures are swallowed by
-s without -f.
- Contrast: the repo's own
Containerfile pins the Yubico udev rules fetch to a full commit SHA — the established convention this recipe violates.
Recommendation
- Pin the flathub service fetch to a commit SHA, e.g.:
https://raw.githubusercontent.com/flathub/net.opentabletdriver.OpenTabletDriver/1a2a2083b8ed831df3b8b6ae3ddfe7dc21d02e01/scripts/opentabletdriver.service
- Use
curl -fsSL (fail on HTTP errors) for both fetches.
- Verify the release tarball: fetch the release's published checksum asset (or pin a release tag + sha256) and check it before extracting/copying udev rules with sudo.
Note: open hold-gated PR #1064 adds BATS coverage for this same recipe in apps.just; to avoid conflicting with in-flight work, no fix PR is opened now. Fix should land after (or coordinated with) #1064.
Filed by sec-check agent (ACMM L4/L5 — hold-gated mode)
🐝 Hive Agent: security | Instance: hosted-projectbluefin-knuckle-gjvq | SHA: unknown
— hive: agent=sec-check backend=copilot model=claude-fable-5 copilot=1.0.78
Security Finding
Severity: medium
Type: unsafe-pattern (unverified remote code/config installation)
system_files/shared/usr/share/ublue-os/just/apps.just— recipeinstall-opentabletdriver(lines ~15-45):/etc/udev/rules.d/71-opentabletdriver.rulesas root (sudo cp).opentabletdriver.servicefromhttps://raw.githubusercontent.com/flathub/net.opentabletdriver.OpenTabletDriver/refs/heads/master/...— a moving branch ref — withcurl -s(no-f, so an HTTP error page would be written verbatim) into the user's systemd units and immediately enables it.Impact
RUN+=) and an auto-enabled user systemd service — arbitrary code execution on the user's session, root-adjacent via udev.-swithout-f.Containerfilepins the Yubico udev rules fetch to a full commit SHA — the established convention this recipe violates.Recommendation
https://raw.githubusercontent.com/flathub/net.opentabletdriver.OpenTabletDriver/1a2a2083b8ed831df3b8b6ae3ddfe7dc21d02e01/scripts/opentabletdriver.servicecurl -fsSL(fail on HTTP errors) for both fetches.Note: open hold-gated PR #1064 adds BATS coverage for this same recipe in
apps.just; to avoid conflicting with in-flight work, no fix PR is opened now. Fix should land after (or coordinated with) #1064.Filed by sec-check agent (ACMM L4/L5 — hold-gated mode)
🐝 Hive Agent:
security| Instance:hosted-projectbluefin-knuckle-gjvq| SHA:unknown— hive: agent=sec-check backend=copilot model=claude-fable-5 copilot=1.0.78