5.2 KiB
MeshCentral ↔ OpenClaw Bridge — Final Hardening Review
Date: 2026-08-25
Reviewer: Clawdia (manager review)
Scope: Current implementation under implementation/src/
Purpose: Disposition the earlier independent review against the hardened local source.
Verdict
Local read-only MVP gate: PASS. The implementation passes the local verification gate and contains the required controls for preparing a tightly scoped live read-only test.
Live test: NOT YET APPROVED. A live connection remains gated on deployment-specific checks and Rob's explicit approval immediately before execution.
Verification evidence
npm test -- --runInBand: 11 suites, 90 tests passednpm run build: passednpm run lint: passed with no errors or warnings- No live MeshCentral connection has been attempted.
Prior finding disposition
| Finding | Current disposition | Evidence / residual risk |
|---|---|---|
| Credential/error leakage | Addressed locally | Credentials are validated before use; user-facing configuration failures are generic; audit/logging paths use redacted summaries. Residual risk: live secret handling still requires a protected runtime mechanism and operational verification. |
| Credential validation/sanitization | Addressed locally | validateCredentials() is called before encoding/storage; credentials are never intentionally logged. Residual risk: the control-channel auth header necessarily contains the credential material in memory during connection. |
| TLS validation | Addressed locally | WebSocket options explicitly set rejectUnauthorized: true; no bypass is present. Residual risk: the actual deployment certificate chain/private CA must be verified from the bridge host. |
| Response validation and size limits | Addressed locally | Responses are size-bounded and parsed/validated; action-specific schemas and action matching are enforced. Residual risk: protocol compatibility with the deployed server remains unverified until a read-only test. |
| Request concurrency/rate limiting | Addressed locally | Semaphore and token-bucket controls apply to outbound requests; configuration has bounded validation and safe defaults. Residual risk: limits are protective controls, not a substitute for MeshCentral capacity testing. |
| Device/group allowlists | Addressed locally | Adapter validates allowlist entries and filters/checks device/group targets. Residual risk: the intended PVE3 identifier and group mapping must be confirmed before live use. |
| Sensitive data in logs | Addressed locally with operational caveat | Structured logger and audit utilities redact credential keys, auth headers, token-like values, and encoded secret patterns. Residual risk: logs still contain inventory metadata and must be stored with appropriate permissions/retention. |
| Separate handshake/request timeout | Deferred, non-blocking | A single bounded timeout is used for connection and requests. This does not expand capability or permit unsafe actions; it should be revisited after live read-only validation. |
| Automatic reconnection/session renewal | Deferred, non-blocking for first test | No automatic reconnect is enabled, reducing replay risk. A dropped session fails rather than autonomously replaying requests. |
| Structured audit logging | Addressed locally | Adapter and client use the controlled logger for audit events; redaction is applied. Operational sink/retention must be selected before deployment. |
Live-test entry criteria still open
These are deployment facts, not local code failures:
- Confirm
mesh.ledrew.meresolves to the intended internal MeshCentral service from the proposed bridge host. - Confirm the correct control-channel URL/path and whether TLS is terminated at a reverse proxy.
- Verify the certificate chain or approved private CA bundle from the bridge host; never disable verification.
- Confirm
sa_clawdiais dedicated and read-only for this first test. - Confirm the exact PVE3 device ID/group and configure it as the sole allowed target.
- Inject the credential through a protected runtime secret mechanism; do not place it in source, prompts, command arguments, or logs.
- Confirm audit-log destination, permissions, and retention.
- Obtain Rob's explicit approval immediately before the live connection.
Scope restrictions for first live test
Allowed only:
- Authentication/connection health check
- Server version
- Device groups
- Device inventory
- Selected metadata for the single approved PVE3 target
Prohibited:
- Diagnostics that execute commands
- Remote shell, file transfer, or arbitrary command execution
- Reboots, shutdowns, service changes, or any state-changing action
- PVE1/PVE2 production-cluster targeting
- Public exposure of the bridge or MeshCentral
Risk acceptance
No deferred feature is accepted as a reason to enable remote actions. The deferred timeout separation and reconnect behavior are explicitly non-blocking only for a single, read-only, single-target test and remain unsuitable for production fleet operation without further design/review.
The live-test gate remains closed until the entry criteria above are checked and Rob approves the specific read-only procedure immediately before execution.