Skip to content

1.3 stable: harden bazaar trust chain and local access - #21

Open
uncoalesced wants to merge 5 commits into
mainfrom
dev-1.3-stable
Open

uncoalesced wants to merge 5 commits into
mainfrom
dev-1.3-stable

Conversation

@uncoalesced

Copy link
Copy Markdown
Owner

Fixes from a full gap audit.

  • Bazaar: index signature now fails closed (daemon and shell); installer validates keys and env names, pins MCP package versions, requires sha256 for npm and archive entries, rejects unsafe archive paths.
  • Local access: bridged ignores client allowlists, blocks non-public targets and redirects; bridge only accepts pages from a logged-in user's processes and owner-checked helper sockets; shell-helper fails closed; plans can be rejected and run once.
  • CI: fixes rustfmt and ShellCheck findings that were already failing on main.

New tests: tests/bazaar_fallback.sh (missing sig, missing key), trust/tests/test_local_auth.py.

Sibling repo change (publish signed v1 index): uncoalesced/turingos-bazaar branch dev-1.3-stable.

uncoalesced and others added 5 commits October 19, 2026 18:52
Rust verifier and registry.sh now reject the remote index when the
signature, public key or openssl is missing, instead of trusting it.
Unverified remote data is no longer cached. Adds negative tests.
Validate tool keys and env_required names before indirect expansion,
pin registered npx package args to the verified version, require sha256
for npm and archive entries (fail closed), and reject archives with
unsafe member paths.
bridged: egress allowlist is server-side only; http(s) only, no
redirects, no non-public addresses, response size cap.
bridged-ws: connecting process must belong to a logged-in user (socket
table lookup), helper sockets must be owned by the uid in their name,
/shell no longer matches the desktop socket, replies read to newline.
shell-helper: refuse peers it cannot identify.
agentd-plan: add reject_plan, approve/execute only from the right state,
plans run once.
CI: rustfmt and shellcheck findings that were already failing on main.
…absent

The shell job runs on a bare runner; the daemon job already builds and
tests turingosd in the ISO's Debian container.
The shell probed the screen size with an untimed xdpyinfo. Under Hyprland
DISPLAY is XWayland, which never started in a VMware VM, so xdpyinfo waited
on its socket forever and the UI never appeared.

- gfx::screen_size asks hyprctl under Wayland and falls back to xdpyinfo;
  every probe has a 3s timeout. kiosk and gfx::screen_pixels share it.
- Brave runs on Wayland ozone when WAYLAND_DISPLAY is set, X11 otherwise.
- On Wayland Brave ignores --class (app id brave-127.0.0.1__-Default), so
  the Hyprland shell rule and turingos-omni's Super+Space match that too.
- tests/kiosk_display.sh covers hanging probes, ozone choice, the rule and
  Super+Space with stubbed hyprctl/xdpyinfo.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant