Engineering & Technical

The Engineer

The Signal

Chrome's DevTools port hands out HttpOnly cookies and never triggers an MFA prompt.

App-bound encryption did its job. Lifting the SQLite store off disk stopped being cheap, so the tradecraft moved up a layer, into the running browser, where the plaintext already sits decrypted. The awkward part is the tooling: Playwright and Puppeteer drive Chrome over the same protocol. Nothing on the wire separates your CI fleet from an operator sitting inside it.

In Play

  1. Live Sessions Bypass MFA Entirely

    Enabling the Chrome DevTools Protocol inside an already-running Chrome or Edge process on Windows hands over cookies — HttpOnly ones included — plus JavaScript execution inside an authenticated origin, with no MFA challenge, per The Hacker News. The first deep dive covers detection and the port hygiene that fixes it.

    Ask Clarity
    Try
  2. Your Headless Mac Fleet Is Internet-Reachable

    The Netherlands NCSC reports active exploitation of a patched macOS Screen Sharing flaw against internet-exposed Macs, per The Hacker News. The first deep dive covers the exposed ports, the payload, and the cost signal that reaches you before any EDR alert.

    Ask Clarity
    Try
  3. Agents That Rebuild Themselves Every Turn

    Fred Schott shipped Flue 2, Cloudflare's agent framework, in which an agent is a TypeScript function that re-executes before every model call, with 16 built-in hooks attaching tools and skills at runtime, per Latent.Space. The second deep dive prices the prompt-cache cost nobody published.

    Ask Clarity
    Try
  4. Windows Hosts That Run Untrusted Code

    A Microsoft Defender patch bypass published by Nightmare Eclipse, per CSO, and a signed Windows kernel-mode rootkit from Mustang Panda, per The Hacker News, converge on the hosts that execute untrusted code by design. The third deep dive works through the blast radius.

    Ask Clarity
    Try
  5. Attackers Are Buying Aged Domain Reputation

    Infoblox put roughly $7M of attacker spend on dropcatching expired domains, per The Hacker News. An aged domain inherits residual traffic, backlinks and reputation, which quietly turns newly-registered-domain blocking and domain-age scoring in a web gateway into false negatives. The exposure in your code is anything referencing a domain you can no longer update: CSP allowlists, third-party script tags, OAuth redirect hosts, webhook targets, and hardcoded URLs in shipped mobile clients.

    Ask Clarity
    Try

Deep Dives

The Debug Port Your CI Opens On Purpose

Two of the active threats in this briefing land on the same class of asset — machines you run headless — and neither is fixed by patching. Both are fixed by closing reachable control planes.

Why the tradecraft moved into the live process

Chrome's app-bound encryption made lifting the SQLite cookie store off disk materially harder. So the technique moved to where the plaintext already sits: the running browser. The DevTools Protocol is a WebSocket control plane over the whole browser instance. Target.getTargets enumerates tabs. Network.getAllCookies returns cookies including HttpOnly, and Runtime.evaluate executes JavaScript in the security context of an origin the user already authenticated to. Nothing decrypts, so nothing prompts.

That makes this a session-management failure, not an endpoint one. Single sign-on and MFA gate the transition from anonymous to authenticated. They hold no opinion about a session that is already open, or about a second local process that speaks the browser's own control protocol.

Detection is behavioral, because the protocol is legitimate

Puppeteer, Playwright, and Selenium's CDP bridge do exactly this, routinely, inside the test pipeline. No protocol-level field distinguishes a scraper from an operator, per The Hacker News. There is nothing in the wire format to filter on, so the signal has to come from context: which process launched the browser, with which flags, into which profile directory, and whether anything is listening on a debug port that is not bound to loopback.

  • Alert on any non-loopback listener on 9222/9229-style ports.
  • Alert on DevToolsActivePort appearing in an unexpected profile directory.
  • Push the enterprise policy RemoteDebuggingAllowed=false to managed endpoints.
  • In CI and scraping services, prefer --remote-debugging-pipe to a TCP port; where a port is unavoidable, bind 127.0.0.1 explicitly.

The Mac fleet is the same shape

macOS Screen Sharing is screensharingd behind ARD/VNC on TCP 5900 and TCP/UDP 3283. It ships off by default. It gets switched on, then port-forwarded, by the people who run Macs headless: colo minis, EC2 mac instances, MacStadium boxes, self-hosted runners doing iOS builds. The Netherlands NCSC reports active exploitation of a patched flaw on internet-exposed Macs, with a Monero miner as the payload. The CVE is not named in the available reporting, so read Apple's security release notes before writing the ticket description.

Cryptojacking is the rational monetization of a machine somebody else pays the CPU bill on, and that sets the detection order. Sustained CPU above 80% during idle windows, week-over-week build-duration regression, and Mac instance-hour spend anomalies all land before any malware verdict does. Block stratum ports and known pool DNS at egress while in there.

Where the two threads agree

Four of the six active items in the threat reporting reviewed here are abuse of legitimate functionality rather than memory corruption: a debug protocol, a remote-desktop daemon, the domain expiry lifecycle, and code-signing trust. None has a patch as its primary fix. The harness research summarized by CSO arrives at the same place from the agent side. The privileges sit in the ordinary code and configuration wrapped around the interesting component, and nobody monitors that layer because it reads as plumbing.

MFA protects the login. Nothing in your stack protects the session, and the tooling that steals it is the same CDP your test pipeline already speaks.

The durable fix is bounded session lifetime, not another blocked port. Scope which admin consoles, cloud-provider logins, and internal SaaS sessions currently survive a raw cookie export, then investigate device-bound session credentials and short-TTL-with-rebind for the ones that do. Port closure buys time. Session binding is what makes the next variant of this technique boring.

What to do

  1. Grep every CI config and Dockerfile for --remote-debugging-port this week, switch to --remote-debugging-pipe or an explicit 127.0.0.1 bind, and push RemoteDebuggingAllowed=false to managed endpoints.

  2. Scan the full Mac estate — colo minis, EC2 mac instances, MacStadium boxes, self-hosted runners — for reachable TCP 5900 and TCP/UDP 3283 by Friday, disable com.apple.screensharing where unused, and block both ports inbound at the perimeter firewall for every host that still needs the service; name an owner this week to choose between WireGuard and Tailscale and to schedule the bastion migration as its own tracked project.

  3. Add two detections this sprint: any non-loopback listener on 9222-class ports, and sustained idle-window CPU above 80% on build hosts with stratum egress blocked.

Flue 2 Re-Renders Your Agent Before Every Model Call

Cloudflare's new framework borrows React's recompute-over-mutate discipline, and the unpriced cost is prefix-cache invalidation on exactly the long support sessions it was built to serve.

React's cheap re-render has no prompt equivalent

React re-executes a component cheaply because reconciliation diffs a virtual DOM before anything touches the browser's render tree. Prompts get no equivalent free step. Tool and skill definitions normally sit in the stable prefix of the context window, and the stable prefix is exactly what provider-side prompt caching keys on. The canonical use case described at launch is a support agent that attaches an account-management tool after the user is verified. That mutates the prefix mid-conversation. Every cached prefix downstream of the mutation is invalidated.

This is inference, not a published benchmark. Latent.Space's launch coverage contains no performance data at all. The direction is still mechanical. The ergonomic win of dynamic attachment gets paid for in input tokens and time-to-first-token on long sessions, which is the exact workload profile of the support and triage bots cited as the motivating case.

Conditional hooks are the crux nobody has answered

React forbids conditional hook calls because stable call order is what gives a hook its identity across renders. Flue's headline capability is the inverse: useTool() appears only once the user is verified. So identity is keyed rather than positional, or a per-turn reconciliation is doing something callers do not control directly. That mechanism decides whether hook state survives a turn where the hook is absent, whether re-attaching a tool resets its state, and how a misbehaving agent gets debugged under load. Encoding business rules in hook conditionals before those answers exist buys an undebuggable state machine.

The tool list looks like an authorization boundary. It is not.

This is where the two independent threads meet. The harness research summarized by CSO locates agent compromise in the surrounding code rather than in the model: output parsing, tool dispatch, credential handling, network egress. Read alongside verify-then-attach, the conclusion holds. Tool visibility is prompt shaping, influenced by state the model can reach, and it is being used to express a privilege-escalation flow in framework code. Every privileged tool needs a server-side authorization check against an identity claim the model cannot manufacture. The hook gate is defense in depth and nothing more.

The topology finding is the most portable insight here

Flue v1 imported web-framework conventions, file-based routing included, one agent per file. v2 threw that out in under three months. Schott's stated reason is that the larger customers run one agent for the whole company and do not care about routing. Teams that decomposed agents along request-shaped boundaries did so because that is how their web services are organized. The biggest production users of this pattern just reported that is the wrong seam. Decomposition belongs on context ownership, with subagents used for isolation. Same argument as modular monolith versus microservices, same answer at most scales.

Where the lock-in actually lives

DimensionFlue 2Pi (raw harness)
HarnessBuilt in, sits on PiIs the harness
Host portabilityExplicit design goal; Vercel has demoed deploying itMaximal
Semantics portabilityRefused — framework and harness "very intertwined"You supply the opinion

Vercel's eve is named as the most directly competitive built-in-harness bet. The AI SDK, Cloudflare's own Agents SDK, and Mastra are retrofitting harnesses now. Flue 2 is one week old at first stable and reversed its core abstraction three months in. Prototype it, wrap it, pin it. Then write skill and tool definitions behind an adapter interface you own, because that seam is cheap this month and expensive after 40% of the agent logic is written against one framework's subagent semantics.

What to do

  1. Instrument your existing agent this sprint for prefix-cache hit rate, input tokens per turn, and p95 time-to-first-token segmented by conversation length.

  2. Run a two-day spike on Flue 2 answering what the reconciler diffs between turns, how hook identity is established when a hook is conditionally absent, and where the prompt-cache boundary sits relative to dynamically attached tool definitions.

  3. Audit every tool in your agent surface this month for a server-side authorization check that holds regardless of whether the tool was exposed to the model.

Your Build Agents Are The Highest-Value Windows Host

A public Defender patch bypass and a signed kernel rootkit converge on the machine that runs untrusted pull-request code and holds standing deploy credentials and signing keys.

Two disclosures, one machine

A researcher using the handle Nightmare Eclipse published a proof of concept that bypasses a Microsoft Defender patch and escalates from any access level to SYSTEM, per CSO's reporting. It shipped with no coordinated fix window, in the middle of a months-long feud between researchers, so there is no vendor timeline to schedule against. Separately, Mustang Panda — also tracked as HoneyMyte — is shipping a signed Windows kernel-mode rootkit alongside an updated CoolClient backdoor, per The Hacker News. Work backward from the mechanism: a signed driver loading on an otherwise healthy host means a valid code-signing certificate is in adversary hands. The kernel did its job. The trust anchor was already wrong.

On a laptop with no standing privilege, neither item changes the week. On the one class of Windows host whose job is executing code it did not write, they compose into something worse than an endpoint incident.

Host roleWhat it holdsWhy these two items compoundControl independent of the vendor's timeline
Windows PR CI runnerDeploy credentials, registry tokens, cacheUntrusted code already runs by design; any-access-to-SYSTEM turns a build step into host controlEphemeral VM per job; OIDC-federated short-lived deploy tokens; no standing secrets on disk
Signing hostCode-signing private keyA usable certificate is the trust primitive, and revocation is slow everywhereHSM/KMS signing, key never resident on the agent, build provenance attestation
Dev VM / jump boxLive browser sessions, cloud CLI credentialsLocal escalation makes the endpoint agent itself the escalation primitiveNetwork segmentation; no standing deploy credentials; short-lived cloud sessions

This is a supply-chain compromise in an endpoint-incident costume

Runners outrank laptops here on blast radius per compromise. A developer machine yields one identity. A runner yields the artifact everyone downstream trusts, and it does so without touching any of the review gates built for source code. That is the invisible constraint: the gates inspect commits, not build hosts. Ephemeral runners plus federated short-lived credentials mitigate this class independently of whether Microsoft's patch holds, which is the property that matters when the disclosure arrived with no coordinated fix window.

A patch bypass on the endpoint agent is only a severity-medium story until you notice which of your hosts runs strangers' code for a living.

Confirm rather than assume

The proof of concept defeats a patch rather than an unpatched build. So a dashboard reading "remediated" may be describing the earlier fix and still be technically honest. Read the installed build directly on the hosts that matter. Treat "we applied that one already" as a hypothesis until a version string says otherwise. No CVE identifier appears in the available reporting, which is itself a reason to verify against Microsoft's advisory rather than a summary.

The systemic exposure in the rootkit story is not this particular actor. It is that code-signing trust has no fast revocation path. Revocation is the missing primitive, which is why signing keys belong in a KMS with short-lived credentials rather than on any machine that also runs a build.

What to do

  1. Inventory every Windows host that executes untrusted code — PR CI runners, build agents, shared dev VMs — by Friday, then record each host's Defender platform, engine and security-intelligence versions from Get-MpComputerStatus and compare them line by line against the fixed versions named in Microsoft's advisory rather than trusting the patch dashboard.

  2. Convert Windows runners to ephemeral per-job VMs with OIDC-federated short-lived deploy credentials this sprint, so no standing secret survives a job.

  3. Audit code-signing key custody this month: confirm no long-lived private key sits on a build agent or developer machine, and move signing to HSM/KMS with provenance attestation.

The bottom line

The items in this briefing rhyme uncomfortably: in each one, the privilege sits inside a long-lived running process nobody registered as a control plane, and the compromise happens after authentication already succeeded. That breaks the reflex that a patch queue plus strong login constitutes a defense posture, because both treat the boundary as a moment when it is actually a process with an uptime, a reachable interface, and something it is trusted to sign or spend. Pick the one live process your delivery pipeline cannot run without, enumerate everything it can reach and everything it can sign, and put a named owner and a hard expiry on both by Friday.