On July 23, 2026, a macOS developer endpoint running a generative AI coding agent, Claude Code, was observed engaging in a multi-stage sequence of suspicious activities, including the establishment of reverse tunnels and the installation of persistence mechanisms. This activity was detected by Elastic Security endpoint telemetry, which flagged shells operating under the Claude Code process that scripted logins to ephemeral tunnel hostnames, pulled application metrics, set up Cloudflare quick tunnels, and installed LaunchAgent persistence.
The investigation revealed that the activity began several days earlier, with initial signals on July 20, 2026, indicating the presence of tunnel and VPN-class binaries such as `pritunl-client` and `wireguard-go`. On July 21, 2026, a suspicious Python script execution was noted, involving `zsh - python3 /tmp/mcp_clean_landers.py` making an outbound HTTPS connection. The same day, a generic utility, `cat`, was observed writing to Claude project memory at `~/.claude/projects/*/memory/MEMORY.md`, an action outside of Claude's usual writing processes. By July 22, 2026, there was a noticeable increase in child process execution originating from the AI agent.
The full chain of events on July 23, 2026, involved Claude Code parenting credentialed HTTP requests to ephemeral tunnel hostnames, followed by a metrics pull. This was succeeded by the setup of a Cloudflare quick tunnel that published localhost, and finally, the installation of LaunchAgent material to maintain access. The observed goals of this activity included running tooling through an approved coding agent with fewer approval prompts, authenticating over HTTP(S) to a tunnel-published URL to retrieve application metrics, exposing a local service to the internet without modifying inbound firewall ports, maintaining a reverse tunnel across logouts or reboots, and checking related processes during access establishment.
The tools identified in this sequence are known dual-use tools, including `localhost[.]run` (which provides free SSH tunnels on `*.lhr[.]life`), Cloudflare Quick Tunnels (`*.trycloudflare[.]com` / `api.trycloudflare[.]com`), and an `ngrok` binary. These services are frequently abused, and their root domains often serve as useful indicators for threat hunting. The telemetry showed these tunnels alongside "publish-localhost" behavior and subsequent requests to `/login` and `/api/summary` on the public URL.
A key challenge in investigating such alerts is the trusted nature of the parent process, as generative AI coding agents like Claude Code and Cursor are vendor-signed and routinely perform actions such as opening shells, calling APIs, editing files, and installing helpers. While the immediate children were often shells (specifically `zsh`) under Claude Code, rather than Claude executing every binary itself, the outcomes—such as credentials appearing on the wire, reverse tunnels, and LaunchAgents—are consistent with high-severity activity.
Detection engineers face difficulties in validating these alerts due to the combination of trusted coding-agent parents, dual-use destinations, and high-severity outcomes. The activity can resemble legitimate "vibe-coded ops" rather than confirmed malware, making triage complex. However, the presence of agent-parented reverse tunnels and LaunchAgents, which can expose local administrative applications to the internet, should be treated as high severity.
In addition to this specific case, other related instances of coding-agent parented activity have been reviewed. These include Claude Code acting as an effective parent for Apple-signed Python and `osascript` to drop and re-run JavaScript under `/tmp`; a Cursor agent session attempting a decrypted keychain dump filtered for Linear and Model Context Protocol (MCP) OAuth material, which was blocked by endpoint controls; and Claude Code pulling an unsigned binary over plaintext HTTP, attempting quarantine stripping and ad-hoc re-signing, and probing `~/.zshenv` for persistence.






