Xenon / Research notesClient security / 01

Where the AI client boundary ends

What desktop instrumentation and unpublished plaintext-boundary prototypes tell us about hardening an AI application - and what they cannot establish.

A remote model still depends on a local client to prepare requests, handle credentials, display responses, and present actions for approval. Those responsibilities create several different security boundaries. Evidence about one boundary does not automatically establish anything about the others.

I developed this research tooling with AI coding assistance. This revision reviews the surviving source, including an unpublished portion of zack-utils, alongside its historical notes and my recollection of the interaction. No live instrumentation or model experiment was performed for this article update. The aim is to make the evidence useful to defenders without turning an unfinished experiment into a completed finding.

The cover story and the surviving evidence

Electron was the cover story I gave the AI Agent to get it to investigate its own client binary. I framed the work as penetration testing of my own application.

I also used model swapping during the investigation, stopping and rewinding the interaction before continuing with a different selected model. When the AI Agent got stuck or said it could not access something, I guided it toward IDA for binary analysis and Frida for runtime instrumentation. I purchased an IDA license for the work.

This account reflects my recollection. The original conversation is unavailable, so this review cannot independently verify the exact prompts, selected model identities, order of events, or effects of these changes.

The surviving material includes Electron/MSIX-oriented notes and hardening checks, alongside native-client reader and writer prototypes. These artifact groups must be evaluated separately. Their labels do not, by themselves, establish the runtime of the binary investigated or a verified sequence of separate experiments.

What survived, and what it establishes
ArtifactSupported statementEvidence limit
Electron/MSIX notesMaintainer notes describe cold-start instrumentation, process checks, and renderer attachment refusals.Historical reports; not independently reproduced in this review.
Hardening toolkitSource contains configuration inspection, source-pattern checks, and process-access probes.Several verdicts are heuristic or confounded. They are not a security certification.
Native-client readerA prototype copies application-side buffers and parses framed, compressed response streams.Source establishes the implementation, not successful capture of a particular session.
Native-client writerA prototype implements equal-length marker replacement in outgoing request data.Its own source explicitly says it was not runtime-verified.

The earlier documentation also contained contradictory explanations for a cold-start crash: one passage blamed a hook implementation, while another exonerated instrumentation and proposed a store-file race. The revised notes preserve the distinction. An empty-JSON exception identifies a symptom; it does not, by itself, identify its cause.

Encrypted transport is only one boundary

The unpublished reader prototypes focus on application data before encryption or after decryption inside the client process. That is different from decrypting captured network traffic by exporting TLS session keys. I found no session-key export implementation in the reviewed kit; the surviving source supports plaintext-buffer observation as the mechanism.

Conceptual data flow, not a captured trace. The reviewed prototypes target the client endpoint. Transport security and endpoint integrity are separate questions.

TLS protects the channel between endpoints. Its confidentiality and integrity guarantees do not mean the endpoint never processes plaintext. Observing data inside a client therefore does not demonstrate that TLS was broken. See the channel properties in RFC 8446.

The reader source includes HTTP framing, decompression, and streamed-event parsing. It recognizes fields named text_delta and thinking_delta. These are transmitted event fields. Their labels do not establish access to internal activations, complete private reasoning, model weights, or any computation that was never transmitted to the client.

The implementation also attempts output redaction. That is a feature to evaluate, not a guarantee that a capture is safe to share. This article includes neither captured payloads nor raw process logs.

The writer is an experiment, not a demonstrated outcome

A companion prototype attempts to replace one equal-length marker with another in outgoing request data. The important evidence is the qualification in its own source: the live behavior was not verified on the authoring machine. Syntax or logic checks cannot resolve that gap.

The final marker experiment's outcome remains unknown. The available material does not show that a server accepted a modified request, that a model answered it differently, or that a protected capability became accessible. It also does not establish why the account was banned.

For an agent application, this leaves a useful defensive question: how is an approved action bound to the exact operation the executor will perform? That question deserves a controlled test on an authorized target. The prototype alone is not its answer.

The measuring instrument needs an audit too

The unpublished hardening kit was intended to turn observations into checks for Xenon. Reviewing the checks exposed limitations that matter as much as their output labels:

These are source-review findings about the research tooling. They do not establish vulnerabilities in the client being studied. In a revised measurement harness, outcomes should distinguish observed behavior, unsupported conditions, timeouts, instrumentation errors, and unresolved results instead of compressing them into a reassuring PASS.

What this suggests for defenders

Keep authority outside mutable presentation

My design recommendation is to validate authorization at the service or executor that controls the action. Bind approval to the operation, parameters, destination, and relevant state. A changed label or displayed response should not become permission to do something different. This is a proposed defense, not a claim that the surviving experiment bypassed such a control.

Inspect the release that users actually run

Establish the target's actual runtime and test its packaged startup and privilege boundaries rather than extrapolating from a development executable or task description. For Electron-based applications, Electron's security guidance covers renderer isolation and related protections; its fuse documentation explains packaging-time controls. Configuration inspection should be followed by tests of effective behavior.

Make diagnostics useful without making them a second exposure

Record build identity, the observation, and the reason a check stopped. Treat locally produced diagnostic events as untrusted input. Limit collection and retention, and exclude credentials and sensitive payloads. OWASP's logging guidance identifies tokens, passwords, encryption keys, and other sensitive material that should normally be removed or protected.

What remains unproved

This record does not demonstrate server-side compromise, unauthorized access to another account, a successful final mutation, or general defeat of client protections. It does not establish access to a model's lowest-level thoughts. No causal connection to a vendor's published incidents or account-enforcement decision has been established.

The original investigation took place on my own installation, but ownership of a workstation does not establish vendor authorization. I do not describe that history as a vendor-authorized assessment. No CVE, bounty, vendor acknowledgement, or responsible-disclosure outcome is claimed.

For a future authorized study, I would preserve exact prompts, model identity, client and tool versions, privilege level, timestamped runtime observations, unchanged controls, and before-and-after results. Failed and incomplete attempts would remain in the record. That would let another researcher distinguish an implemented technique from a demonstrated finding.

Artifact provenance and editorial changes

The unpublished source reviewed here is local zack-utils commit 386d6d6. Its implementation remains unpushed. Relevant artifacts include:

On October 9, the documentation cleanup was merged as zack-utils PR #1. The repository is private, so that link requires access. Neutral examples and qualified historical claims replaced misleading wording; the original Git history was preserved. This article publishes the analysis, not the underlying prototypes or a procedure for bypassing a particular product.

Prepared from source review, historical notes, and the author's recollection with OpenAI Codex assistance. No new live test is implied by the editorial changes.