Skip to content

Harden Dispatch: live activity, GUIDs, UI, cradles, and delivery controls - #3

Open
m8sec wants to merge 9 commits into
mainfrom
cursor/security-activity-lint-6f89
Open

m8sec wants to merge 9 commits into
mainfrom
cursor/security-activity-lint-6f89

Conversation

@m8sec

@m8sec m8sec commented Oct 30, 2026 •

Copy link
Copy Markdown
Owner

updates

Summary

Dispatch admin and client delivery stay on separate listeners. This branch hardens the admin UI, file identity, and operator workflows.

  • File ids exposed to the UI and API are UUID4 values. Integer ids are not accepted on external file routes.
  • Client file requests are logged and shown on a live Activity feed (session SSE) with filters and aggregates.
  • Download cradles include curl, wget, Python, PowerShell, certutil, BITS, encoded PowerShell, and covert chunked upload/download. Every snippet renders as a dark code block in both themes.
  • Per-file download caps: 0 means unlimited, edited on the upload and edit forms (not on the file listing).
  • Operators change file access from the listing. A recently expired session is renewed on the response so that update is not dropped.
  • GET /api/files/list (and /api/files/minimal-list) is the API-key list. It returns only id, filename, alias, file_size, access, max_downloads, and download_count. The signed-in file page uses GET /api/files/listing, which requires a session cookie.
  • API keys sent in X-Dispatch-Auth can list files, upload, and download by alias, filename, or file id, subject to the user's role. The Python and PowerShell decrypt cradles take an optional API key: a value is used as given, a blank flag prompts, and omitting it sends no key.
  • Covert upload (/api/v1/health) is registered on both the admin listener and the client delivery listener.
  • Activity stays with Cradles. Alerts sit under Settings and are available to operators. The settings nav label is Admin so it stays on one line.
  • The script interface stays off unless --enable-script-interface is set. --disable-exec is removed.
  • The UI is denser at 100% zoom (root font size 90%, tighter header and sidebar). Switches share one size and a single thumb. Listing action icons are black on their colored buttons.

API keys

Header: X-Dispatch-Auth.

  • GET /api/files/list
  • POST /api/file/upload
  • GET /file/get/alias/<alias>
  • GET /file/get/name/<filename>
  • GET /file/get/<id>

GET /api/files/listing is session-only. Covert upload and download use GET or POST /api/v1/health on either listener.

Open in Web Open in Cursor 

cursoragent and others added 9 commits October 30, 2026 19:19
Escape notifications and request-derived HTML, add ruff CI, default uploads to the current folder, stream client file requests over SSE, refresh the UI, poll the file listing, and identify files by UUID. Also add download caps, richer cradles, covert chunked transfer, an opt-in script interface, and a pipx/Docker install path.

Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
…ing.

Co-authored-by: m8sec <m8sec@users.noreply.github.com>
…teners.

Co-authored-by: m8sec <m8sec@users.noreply.github.com>
Co-authored-by: m8sec <m8sec@users.noreply.github.com>
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.

2 participants