Markus Hupfauer

Notes on AI security, agentic systems, and non-human identity. Personal site, personal opinions.

Abstract illustration: a dense block of stacked lines descending toward a narrow aperture, with a single thin rust-coloured line passing through alone

You can't triage a bundle

AI-scale discovery did not break patching. It broke triage. Prioritisation frameworks rank vulnerabilities so you can act on some and defer others, and on a Windows cumulative update that ranking buys you nothing — you take the applicable contents whole or you take none of them. The September 2026 release and the RDS regression it carried are the same event seen from both ends. What follows: why the three default responses are all bad, why conventional validation was never going to catch this class of regression, and what changes when rollout, compensating controls and validation stop being things humans do by hand once a month.

2026-09-13 · 26 min · Markus Hupfauer
Four separate arcs that never touch, with a single thin thread drawn through all of them

Nobody sells your middle

If your SOC runs a SIEM, a SOAR, a vulnerability scanner and an EDR from four different vendors, the gap between them is not a plumbing problem — it is a decision and authorisation problem, and no vendor has an incentive to solve it for you. The design, up front: a language model to read the unnormalised residue between those tools, a deterministic floor it may raise but never lower, an allowlist that authorises rather than describes, an action budget capping how much of the estate can be affected at once, and the containment credential held where the model cannot reach it. Ends on the 03:00 question — do you let it act alone — and on the fact that most organisations already answered by accident.

2026-07-25 · 53 min · Markus Hupfauer
A thin thread slipping through a gate that is already standing open, while a second gate behind it never rises

The malware stopped saying please

A repo config that runs code on open is twenty years old — tasks.json, npm postinstall, git hooks. We built the countermeasures too: Workspace Trust, git not shipping hooks on clone, direnv re-blocking on any change. The AI editors regressed on all of it, then added the new part: the config now writes itself from untrusted input, executes before any classifier or prompt gets a vote, and lands with your account’s access to everything you’ve authenticated. Closes with an operator’s appendix: how to lock it down, and where the file hides. Part three of a series, on the device.

2026-07-05 · 26 min · Markus Hupfauer
A single calm gate standing open on a wide plane, a thin thread walking straight past it instead of through it

Where we're going, we don't need UAC

UAC, sudo, and macOS auth gate vertical escalation — user to root. A coding agent’s blast radius is horizontal: the full reach of an already-authenticated user, which almost nothing mediates once you’ve signed in. We learned the everyone-is-Administrator lesson in 2007. The agent put us back in 2004, and this time the malware says please. Part two of a series, on the device.

2026-06-04 · 19 min · Markus Hupfauer
A single thread passing through a series of gates, fraying to many loose ends at the last one

Which agent bricked prod?

Every hop an agent makes has to answer two questions: whose authority is being exercised, and which agent exercised it? Lose either and your role model, your audit trail, and your incident response are fiction. Part one of a series, from the web tier down to Active Directory.

2026-05-30 · 26 min · Markus Hupfauer
Stacked horizontal shelves in off-white with one rust-colored shelf offset out of line

The registry is the control plane

When npx skills add ships an agent capability the same way npm install ships a library, a large part of governance stops looking novel and starts looking like supply chain. The muscle to handle this exists. The OS just started cooperating. The missing pieces are a real capability manifest and stateful execution policy — and someone needs to ship them.

2026-05-25 · 13 min · Markus Hupfauer
Abstract laptop silhouette as a closed perimeter, with inference contained inside, on deep ink black

Local inference, on purpose

Notes on actually running models locally on an M4 Max: omlx as the server, Qwen3.6-35B-A3B and GLM-4.7-Flash for agent work, gpt-oss-120b for writing. Why pointing Claude Code at localhost is fine for offline ergonomics and wrong as a perimeter.

2026-05-25 · 5 min · Markus Hupfauer
Automated gate opens for expected form while off-shape form slips past

Auto mode is a sensor too

The third time this year I have written down the same epistemic mistake. Auto-accept loops in agentic IDEs trust a classifier to be a control. Real bypasses already exist. The sufficiently motivated attacker problem is now sitting on your laptop, deciding which files to edit while you make coffee.

2026-05-17 · 9 min · Markus Hupfauer
Identity perimeter deflecting one vector, permitting a credentialed one

Identity is the control plane. Detection is a sensor.

Detection asks ‘is this input adversarial?’ Identity asks ‘what is this principal allowed to do, on whose behalf, right now?’ The first is probabilistic and bypassable. The second is enforceable and auditable.

2026-05-17 · 4 min · Markus Hupfauer
Data well with tripwire glyphs, one probe triggers a ripple

Salting your own well: defensive prompt injection as a tripwire

Defenders can deliberately plant content in their environments that triggers the refusal vectors of attacker-controlled agents. Against the median lazy adversary it works. Against a determined one with an abliterated model it doesn’t. Either way, it is a sensor — not a control.

2026-05-11 · 7 min · Markus Hupfauer