Skip to content

[sec-check] install-opentabletdriver fetches unverified release tarball and moving-branch systemd unit; udev rules installed as root #1170

Description

@hivecommons-hive

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):

  1. 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).
  2. 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

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    agent/securityFiled or owned by the security agent.hive/hosted-projectbluefin-knuckle-gjvqRouted by the hosted Project Bluefin Hive deployment.securitySecurity impact or hardening work.

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions