<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Artificialxtrax</title>
    <description>The latest articles on DEV Community by Artificialxtrax (@artificialxtrax).</description>
    <link>https://dev.to/artificialxtrax</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F4196484%2F28cc3d32-7ef9-4df0-8507-b8238cc425fe.png</url>
      <title>DEV Community: Artificialxtrax</title>
      <link>https://dev.to/artificialxtrax</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/artificialxtrax"/>
    <language>en</language>
    <item>
      <title>Why I built Agentgate: a stolen agent session is worse than a stolen account</title>
      <dc:creator>Artificialxtrax</dc:creator>
      <pubDate>Tue, 20 Oct 2026 15:53:29 +0000</pubDate>
      <link>https://dev.to/artificialxtrax/why-i-built-agentgate-a-stolen-agent-session-is-worse-than-a-stolen-account-453g</link>
      <guid>https://dev.to/artificialxtrax/why-i-built-agentgate-a-stolen-agent-session-is-worse-than-a-stolen-account-453g</guid>
      <description>&lt;p&gt;A stolen session cookie used to mean someone could read your email or change your password. On a platform that runs AI agents, it means something worse: the thief gets a tireless assistant that already has your tools, data connections and webhooks. It will export your records to a new endpoint, call APIs on your behalf and do it quickly, all while looking like you. Most of the defensive tooling I found for agents worked on a different problem, filtering harmful prompts. Very little asked the earlier question: is this request actually from the owner?&lt;/p&gt;

&lt;p&gt;agentgate is my attempt at that question. It's a small Python library, one dependency (cryptography), that sits in front of an agent and screens each request before it runs.&lt;/p&gt;

&lt;p&gt;No single check works, so stack cheap ones&lt;br&gt;
Every signal I looked at had an easy bypass on its own. Device IDs can be copied. TLS fingerprints can be impersonated. IP reputation fails against residential proxies. Behaviour baselines miss a patient attacker who acts like the owner. So agentgate layers them. Each layer catches a different kind of attacker, and the README has a table listing what each one does not catch.&lt;/p&gt;

&lt;p&gt;The second design rule matters as much: behavioural signals never block. New phones, VPNs and travel are common and innocent. A suspicious signal triggers a step-up, meaning re-verify. It never triggers a ban. On synthetic data, owners on a normal day see no added friction, while a token thief running a script from a datacenter is stepped up every time.&lt;/p&gt;

&lt;p&gt;The layer that actually holds: a key tap bound to the action&lt;br&gt;
The hardest case is malware inside the owner's own browser. It has the right cookies, device, network and typing. Nothing behavioural catches it. What it can't do is produce a WebAuthn signature from the owner's physical key or passkey for a challenge it didn't get the user to approve.&lt;/p&gt;

&lt;p&gt;So sensitive actions ("export to hooks.acme.com", "change destination", "run privileged tool") require a one-time challenge bound to that exact action string. A signature for one action can't be replayed or reused for another. That's a property of the protocol, not a detection rate, and it's the part I'm most confident in. It's also the part I most want someone else to check: the verifier is hand-written, it has been tested against a spec-following software authenticator and one real Apple passkey, and it hasn't been through the FIDO conformance suite.&lt;/p&gt;

&lt;p&gt;Keep a record nobody can quietly rewrite&lt;br&gt;
Every decision, and every event that extends trust (enrolment, key revocation, reinstatement), goes into a hash-chained audit log. The log stores keyed hashes, not raw text or IPs. The chain's Merkle root can be anchored externally, for example via OpenTimestamps, so even whoever runs the server can't silently rewrite history.&lt;/p&gt;

&lt;p&gt;Being honest about where it stands&lt;br&gt;
agentgate is alpha. It has 145 tests, a red-team harness with simulated owners and attackers, and a self-audit that found and fixed 24 defects. It has not run against real traffic, a live model or standalone hardware keys, and it hasn't had an independent review. The thresholds are guesses you should calibrate in shadow mode on your own traffic. I also mapped it against the OWASP Top 10 for LLM Applications (2025). Most entries are Partial or Out of scope, because agentgate guards the door, not the model.&lt;/p&gt;

&lt;p&gt;What I'm asking for&lt;br&gt;
If you know WebAuthn, please try to break webauthn.py and approval.py. If you run an agent platform, tell me which signals would be noise for your users. REVIEW.md lists where to start, and security reports go through SECURITY.md or &lt;a href="mailto:Artificialxtrax@outlook.com"&gt;Artificialxtrax@outlook.com&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;Install: pip install agentgate-security&lt;/p&gt;

&lt;p&gt;Repo: &lt;a href="https://github.com/Artificialxtrax/agentgate" rel="noopener noreferrer"&gt;https://github.com/Artificialxtrax/agentgate&lt;/a&gt; (MIT).&lt;/p&gt;

</description>
      <category>security</category>
      <category>ai</category>
      <category>python</category>
      <category>opensource</category>
    </item>
  </channel>
</rss>
