<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"><channel><title>Ashton Vaughan - Writeups</title><description>Technical writeups on security research and engineering by Ashton Vaughan.</description><link>https://ashtonvaughan.com/</link><item><title>Exposing the whole Montoya API: driving Burp Suite from an AI agent</title><link>https://ashtonvaughan.com/writeups/driving-burp-from-an-ai-agent/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/driving-burp-from-an-ai-agent/</guid><description>Why a thin MCP wrapper around Burp is useless to an autonomous agent, and what it took to expose functional 100% of the Montoya API, including a reflection bridge into other installed extensions.</description><pubDate>Wed, 10 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Hypotheses over signatures: what I learned building an autonomous pentest agent</title><link>https://ashtonvaughan.com/writeups/autonomous-hypothesis-driven-pentesting/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/autonomous-hypothesis-driven-pentesting/</guid><description>Project Triage hunts like a researcher, not a scanner. The hard part was not the 51 tools, it was the 19 reasoning modules and the scaffolding that stops an LLM agent from looping forever.</description><pubDate>Mon, 08 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Goals, not selectors: building a browser runtime for AI agents</title><link>https://ashtonvaughan.com/writeups/a-browser-runtime-for-agents/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/a-browser-runtime-for-agents/</guid><description>Browser automation was built for humans and retrofitted for agents. Building AgentBrowser meant inverting that, an API that speaks goals, a cursor that actually moves, and per-site memory that skips the model on repeat visits.</description><pubDate>Fri, 05 Jun 2026 00:00:00 GMT</pubDate></item><item><title>Ideas for running big MoE models on small hardware</title><link>https://ashtonvaughan.com/writeups/sparse-moe-inference-on-modest-hardware/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/sparse-moe-inference-on-modest-hardware/</guid><description>A research exploration into sparse mixture-of-experts inference on consumer GPUs and APUs: mixed-precision experts, low-rank compression, predictive prefetch, and NUMA-aware placement. Design notes, not a benchmark.</description><pubDate>Thu, 04 Jun 2026 00:00:00 GMT</pubDate></item><item><title>One prompt is not a finding: proving an LLM jailbreak is universal</title><link>https://ashtonvaughan.com/writeups/proving-an-llm-jailbreak-is-universal/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/proving-an-llm-jailbreak-is-universal/</guid><description>The discipline that separates a lucky prompt from a bounty-grade universal jailbreak: a train/test split on objectives, an independent multi-judge, a binomial significance test on held-out behaviors, and an authorization gate that fails closed.</description><pubDate>Tue, 02 Jun 2026 00:00:00 GMT</pubDate></item><item><title>A local-first reverse-engineering agent, and the honest limits of one</title><link>https://ashtonvaughan.com/writeups/local-first-reverse-engineering-agent/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/local-first-reverse-engineering-agent/</guid><description>Somnus drives Ghidra, angr, Frida and AFL++ through a small local model to triage binaries, no API keys, no network. It works end-to-end on ret2win. Here is what that proves, and what it very much does not.</description><pubDate>Thu, 28 May 2026 00:00:00 GMT</pubDate></item><item><title>Anatomy of an autonomous bug bounty pipeline</title><link>https://ashtonvaughan.com/writeups/anatomy-of-an-autonomous-bug-bounty-pipeline/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/anatomy-of-an-autonomous-bug-bounty-pipeline/</guid><description>BountyHound wraps five security tools as FastAPI job servers behind one MCP entry point. The architecture is simple on purpose, and the discipline that matters is the boundary that keeps an agent from reporting tool output it never verified.</description><pubDate>Tue, 26 May 2026 00:00:00 GMT</pubDate></item><item><title>Verification tiers and provenance for synthetic data</title><link>https://ashtonvaughan.com/writeups/synthetic-datasets-with-provenance/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/synthetic-datasets-with-provenance/</guid><description>AnyData is a closed-loop dataset factory where every example carries how strongly its correctness was verified. Why the tier you can verify against is the real ceiling on quality, and why a model can never grade its own output.</description><pubDate>Sun, 24 May 2026 00:00:00 GMT</pubDate></item><item><title>No step-up is an account-takeover primitive</title><link>https://ashtonvaughan.com/writeups/no-step-up-is-an-ato-primitive/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/no-step-up-is-an-ato-primitive/</guid><description>A password or email change that accepts only a bearer token, with no current password and no fresh-auth check, is an ATO primitive on its own. Here is how I test for it and why &quot;you need the token&quot; is a weak defence.</description><pubDate>Fri, 22 May 2026 00:00:00 GMT</pubDate></item><item><title>Where authorization breaks in serverless backends</title><link>https://ashtonvaughan.com/writeups/authorization-in-serverless-backends/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/authorization-in-serverless-backends/</guid><description>A generic, target-free field guide to the access-control failures I keep finding in Supabase / edge-function backends, and the two-account method that surfaces them. No program names; this is about the class, not any one bug.</description><pubDate>Wed, 20 May 2026 00:00:00 GMT</pubDate></item><item><title>Building an LSTM scalping signal engine for MetaTrader 5</title><link>https://ashtonvaughan.com/writeups/lstm-scalping-signal-engine/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/lstm-scalping-signal-engine/</guid><description>money-maker predicts whether EUR/USD hits a 2-pip take profit before a 1.5-pip stop. The hard parts are label design, latency into MT5, and accepting that forward testing is the only honest evaluation.</description><pubDate>Mon, 18 May 2026 00:00:00 GMT</pubDate></item><item><title>Business logic is where scanners lose</title><link>https://ashtonvaughan.com/writeups/business-logic-is-where-scanners-lose/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/business-logic-is-where-scanners-lose/</guid><description>Why automated tools never find logic bugs, and the way I map a money or quota flow to attack its invariants instead of its inputs.</description><pubDate>Sat, 16 May 2026 00:00:00 GMT</pubDate></item><item><title>Lessons from shelving a computer-use daemon</title><link>https://ashtonvaughan.com/writeups/lessons-from-an-abandoned-computer-use-daemon/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/lessons-from-an-abandoned-computer-use-daemon/</guid><description>Nerve was a working cross-platform computer-use runtime: a Rust daemon, two SDKs, a real Anthropic Computer Use loop. I stopped active development on the consumer-product framing. Here is what it got right, what computer-use is genuinely hard at, and why I shelved it anyway.</description><pubDate>Thu, 14 May 2026 00:00:00 GMT</pubDate></item><item><title>Mapping fuzzy intent to nmap flags, locally and safely</title><link>https://ashtonvaughan.com/writeups/natural-language-nmap/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/natural-language-nmap/</guid><description>TNmap is a terminal UI that turns plain English into the right nmap invocation. The interesting part is the retrieval stack that maps fuzzy intent to exact flags without an API, and why it degrades gracefully instead of stalling.</description><pubDate>Tue, 12 May 2026 00:00:00 GMT</pubDate></item><item><title>SSRF to cloud metadata: turning a fetch into IAM credentials</title><link>https://ashtonvaughan.com/writeups/ssrf-to-cloud-metadata/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/ssrf-to-cloud-metadata/</guid><description>How a server-side request that reaches 169.254.169.254 becomes role credentials, why IMDSv2 changes the rules, the bypasses that still work, and how to prove impact read-only without touching anything destructive.</description><pubDate>Sun, 10 May 2026 00:00:00 GMT</pubDate></item><item><title>OAuth redirect_uri allowlists and the state you forgot</title><link>https://ashtonvaughan.com/writeups/oauth-redirect-uri-and-state/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/oauth-redirect-uri-and-state/</guid><description>Redirect_uri allowlist bypasses, the real job of state and PKCE, and why most &quot;open redirect in OAuth&quot; reports get downgraded unless you show token theft.</description><pubDate>Fri, 08 May 2026 00:00:00 GMT</pubDate></item><item><title>Deep RL for forex swing trading, and where the reward function bites back</title><link>https://ashtonvaughan.com/writeups/deep-rl-for-forex-swing-trading/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/deep-rl-for-forex-swing-trading/</guid><description>TradingEngine is a PPO agent for H1 swing trades with an LSTM-plus-Transformer feature extractor. The engineering that matters is state and action design, reward shaping that does not blow up, and walk-forward evaluation that refuses to lie to you.</description><pubDate>Wed, 06 May 2026 00:00:00 GMT</pubDate></item><item><title>The origin check that was never there: postMessage as a data-theft primitive</title><link>https://ashtonvaughan.com/writeups/postmessage-origin-checks/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/postmessage-origin-checks/</guid><description>How message handlers that skip event.origin validation turn an embedded widget into cross-window data theft or DOM XSS, and how I actually test them.</description><pubDate>Mon, 04 May 2026 00:00:00 GMT</pubDate></item><item><title>The single-packet attack and the races click-twice-fast misses</title><link>https://ashtonvaughan.com/writeups/single-packet-race-conditions/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/single-packet-race-conditions/</guid><description>How HTTP/2 last-byte synchronisation removes network jitter from race testing, and why the real TOCTOU lives at the database isolation level.</description><pubDate>Sat, 02 May 2026 00:00:00 GMT</pubDate></item><item><title>Evolutionary search over a million strategy configs, and the overfitting trap</title><link>https://ashtonvaughan.com/writeups/evolutionary-search-over-a-million-strategies/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/evolutionary-search-over-a-million-strategies/</guid><description>strategy-search evolves trading-strategy configurations with a genetic algorithm over transformer models. The engineering that matters is not the model: it is the representation, the fitness function, and the validation that keeps the search honest.</description><pubDate>Thu, 30 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Secondary-context attacks: when a public API is a proxy in disguise</title><link>https://ashtonvaughan.com/writeups/secondary-context-attacks/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/secondary-context-attacks/</guid><description>A target-free walkthrough of BFF and gateway abuse: a public endpoint silently forwards to an internal service, and path traversal in a URL segment reaches endpoints that were never meant to be public.</description><pubDate>Tue, 28 Apr 2026 00:00:00 GMT</pubDate></item><item><title>SAML RelayState and the trust you inherit from an IdP</title><link>https://ashtonvaughan.com/writeups/saml-relaystate-and-sso-trust/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/saml-relaystate-and-sso-trust/</guid><description>RelayState as an open-redirect and phishing vector through a trusted identity-provider domain, plus the assertion-signing pitfalls that turn a redirect into a full SSO bypass.</description><pubDate>Sun, 26 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Why resolved is not validated, and the gate I run before I believe a finding</title><link>https://ashtonvaughan.com/writeups/why-resolved-is-not-validated/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/why-resolved-is-not-validated/</guid><description>A four-layer validation gate for bug bounty findings. The API returning data is not a bug. A program resolving your report is not proof you were right. Here is how I cull false positives before they ever leave my machine.</description><pubDate>Wed, 22 Apr 2026 00:00:00 GMT</pubDate></item><item><title>From IDOR to proven Critical</title><link>https://ashtonvaughan.com/writeups/from-idor-to-proven-critical/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/from-idor-to-proven-critical/</guid><description>A read IDOR is a Medium until you demonstrate impact; the discipline of mass enumeration, PII at scale, and cross-tenant write that earns the severity.</description><pubDate>Mon, 20 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Reflected Origin plus credentials: the CORS combo that hands over the cookie jar</title><link>https://ashtonvaughan.com/writeups/cors-that-leaks-credentials/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/cors-that-leaks-credentials/</guid><description>Why reflecting the request Origin together with Allow-Credentials: true defeats the same-origin policy, why null and suffix allowlists fail, and how to prove a cross-origin credentialed read.</description><pubDate>Sat, 18 Apr 2026 00:00:00 GMT</pubDate></item><item><title>GraphQL authorization and the batching tax: where the schema lies to you</title><link>https://ashtonvaughan.com/writeups/graphql-authorization-and-batching/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/graphql-authorization-and-batching/</guid><description>Field-level authz gaps, introspection, alias and batch abuse to defeat rate limits, and nested-query DoS, with the one structural reason GraphQL keeps leaking: object checks belong on resolvers, not the gateway.</description><pubDate>Thu, 16 Apr 2026 00:00:00 GMT</pubDate></item><item><title>JWT algorithm confusion and the alg field you should never trust</title><link>https://ashtonvaughan.com/writeups/jwt-algorithm-confusion/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/jwt-algorithm-confusion/</guid><description>RS256-verified-as-HS256 with the public key as the HMAC secret, the alg=none variants, kid injection, and why correct verification pins the algorithm from JWKS instead of the token.</description><pubDate>Sun, 12 Apr 2026 00:00:00 GMT</pubDate></item><item><title>A toolkit per target, not a scanner per program</title><link>https://ashtonvaughan.com/writeups/a-toolkit-per-target/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/a-toolkit-per-target/</guid><description>Generic scanner templates lose because every target is shaped differently. I build a small, target-shaped toolkit per engagement: probes cut to the detected vendors and seams, output shaped for an agent context window, real out-of-band sinks, and proof of concept that holds up.</description><pubDate>Wed, 08 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Brute-forcing OTPs when nothing stops you</title><link>https://ashtonvaughan.com/writeups/brute-forcing-otps-when-there-is-no-rate-limit/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/brute-forcing-otps-when-there-is-no-rate-limit/</guid><description>The math on a 4 or 6 digit one-time code with no rate limit, the verification races, the IP-rotation realities, and why self-OTP bypass still matters.</description><pubDate>Sat, 04 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Finding secrets in client bundles: grep the shipped code, then triage</title><link>https://ashtonvaughan.com/writeups/finding-secrets-in-client-bundles/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/finding-secrets-in-client-bundles/</guid><description>Harvesting keys from front-end JS, sourcemaps, and committed .env files, and the part that matters more than finding them: knowing which key actually bypasses your security model and which is harmless by design.</description><pubDate>Thu, 02 Apr 2026 00:00:00 GMT</pubDate></item><item><title>Dangling CNAMEs at scale: certificate transparency plus diffing as a takeover engine</title><link>https://ashtonvaughan.com/writeups/subdomain-takeover-at-scale/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/subdomain-takeover-at-scale/</guid><description>How a forgotten CNAME becomes a claimable subdomain, and how to find them across a wide asset list using CT logs and resolver diffing instead of luck.</description><pubDate>Thu, 26 Mar 2026 00:00:00 GMT</pubDate></item><item><title>Disposable out-of-band infrastructure on Cloudflare Workers</title><link>https://ashtonvaughan.com/writeups/out-of-band-infra-on-cloudflare-workers/</link><guid isPermaLink="true">https://ashtonvaughan.com/writeups/out-of-band-infra-on-cloudflare-workers/</guid><description>How I build throwaway OOB callback sinks, attacker JWKS hosts, OAuth redirect receivers, and smuggling relays on the edge, and why Workers beat a single VPS for blind-vuln confirmation.</description><pubDate>Thu, 12 Mar 2026 00:00:00 GMT</pubDate></item></channel></rss>