Security hardening (P0 RCE + audit follow-through), web macro editor, and redesign #6

Merged
jknapp merged 11 commits from security/p0-rce-hardening into main 2026-07-18 04:08:24 +00:00
Showing only changes of commit 0d6f48ca24 - Show all commits
+14 -4
View File
@@ -11,6 +11,7 @@ A cross-platform macro management application with desktop and web interfaces. C
- **Hotkeys**: Key combinations (Ctrl+C, Alt+Tab, etc.) - **Hotkeys**: Key combinations (Ctrl+C, Alt+Tab, etc.)
- **Wait**: Insert delays between commands (in milliseconds) - **Wait**: Insert delays between commands (in milliseconds)
- **App**: Launch applications or scripts - **App**: Launch applications or scripts
- **Media & System Keys**: Control playback and audio (volume up/down/mute, play/pause, next/previous track, stop) alongside regular keys
- **Custom Images**: Assign images to macros for easy identification - **Custom Images**: Assign images to macros for easy identification
- **Category Management**: Organize macros into custom tabs - **Category Management**: Organize macros into custom tabs
@@ -119,15 +120,18 @@ A macro that types a username, waits, presses Tab, types a password, and presses
### Web Interface (PWA) ### Web Interface (PWA)
1. Start the application (web server starts automatically on port 40000) 1. Start the application (web server starts automatically on port 40000)
2. Note the URL shown in the toolbar (e.g., `http://192.168.1.100:40000`) 2. Note the URL shown in the toolbar (e.g., `http://192.168.1.100:40000/?token=...`)
3. Open this URL on any device on your network 3. Open this URL on any device on your network
4. **Install as PWA**: 4. **Install as PWA**:
- Mobile: Tap browser menu → "Add to Home Screen" - Mobile: Tap browser menu → "Add to Home Screen"
- Desktop: Click install icon in address bar - Desktop: Click install icon in address bar
> [!IMPORTANT]
> The local web server now requires an access token. A per-install token is auto-generated and stored in `settings.json`, and is embedded in the URL shown in the toolbar and in the QR code — so copying the URL or scanning the QR just works. Anyone with that URL can control your macros, so treat it like a password. By default the server also binds to your LAN; set `web.allow_lan` to `false` in settings to restrict access to localhost only.
The web interface provides full macro management: The web interface provides full macro management:
- View and execute macros - View and execute macros
- Create and edit macros with command builder - Create, edit, and delete macros directly from the web app — tap the **+** button to open the command-sequence builder (no desktop app required)
- Organize into categories - Organize into categories
- Real-time sync across devices - Real-time sync across devices
@@ -154,7 +158,10 @@ Once connected, a relay URL will appear in the toolbar. Use this URL from any de
- Wake lock and fullscreen mode - Wake lock and fullscreen mode
> [!NOTE] > [!NOTE]
> You need access to a relay server. See [MP-Relay](https://repo.anhonesthost.net/MacroPad/MP-Relay) for self-hosting instructions. > The relay password is stored in your OS keyring when one is available, falling back to the settings file (written with restricted `0600` permissions) otherwise.
> [!NOTE]
> You need access to a relay server. See [MP-Relay](https://repo.anhonesthost.net/MacroPad/MP-Relay) for self-hosting instructions. The self-hosted relay now enforces login rate-limiting/lockout, keeps credentials out of URLs, and requires setting sane environment values — see the relay repo's `.env.example`.
## Command Types Reference ## Command Types Reference
@@ -164,10 +171,13 @@ Once connected, a relay URL will appear in the toolbar. Use this URL from any de
| `key` | Presses a single key | `value`: Key name (enter, tab, escape, f1-f12, etc.) | | `key` | Presses a single key | `value`: Key name (enter, tab, escape, f1-f12, etc.) |
| `hotkey` | Presses key combination | `keys`: List of keys (e.g., ["ctrl", "c"]) | | `hotkey` | Presses key combination | `keys`: List of keys (e.g., ["ctrl", "c"]) |
| `wait` | Delays execution | `ms`: Milliseconds to wait | | `wait` | Delays execution | `ms`: Milliseconds to wait |
| `app` | Launches application | `command`: Shell command to execute | | `app` | Launches an application | `command`: Program and arguments to run (tokenized and executed directly — no shell) |
## Example Application Commands ## Example Application Commands
> [!IMPORTANT]
> `app` commands are tokenized and the program is executed **directly**, without a shell. This closes a remote-code-execution risk, but it means shell features are **not** supported: command chaining (`;`, `&&`, `|`), output redirection (`>`), environment-variable expansion (`$VAR`, `%VAR%`), and shell built-ins will not work. Launching a program with arguments works exactly as shown below.
### Windows ### Windows
```bash ```bash
# Steam game # Steam game