Pen-testing that doesn’t stop at the report. It stays until the fix ships.
How a global IT services conglomerate runs autobotAI’s autonomous red-team agent against its own application: Optimus proves each exploit, writes the fix as a pull request, follows the developer conversation to merge, and holds the line with a WAF rule while a critical flaw is still open.
Global IT services conglomerateAutonomous red teaming
Red teamAppSecDevSecOps
How the engagement is set up · controls and scope, not results
100%of code, credentials and findings stay in their own cloud
0pull requests merged by an agent: developers merge every fix
Count → BlockWAF rules prove themselves before they block traffic
Re-testeda finding closes only when the exploit fails again
01The challenge
A pen-test finds the flaw in days. The fix takes a quarter.
The pen-test report arrived as a PDF: forty pages, a severity per finding, a recommended fix. Then the hard part began, and none of it was testing. Someone had to prove each finding was real, find the code, convince a developer, protect production in the meantime and check the fix actually held.
Fig. 1Who touches one finding before it is closed
Pen-testerFinds and proves the flaw, writes the reportDays
Application securityIs it real? How severe for this app?Days
DeveloperWhere in the code? Fits our patterns?Next sprint
Infra / WAF teamCan we block it before the fix ships?Days
App ownerAccept the risk, or prioritise the fix?Weeks
Re-testBook the tester again to prove it holdsNext cycle
Each hand-off waits on email, tickets and meetings, and the flaw stays exploitable the whole time.
02The approach
One red-team harness. Testing, fixing and protecting in one loop.
The same agent factory, with a red-team harness. At its centre is an application map (routes, roles, APIs and the code behind them), plus the rules of engagement, owners and approvers, guardrails, memory, their tools, their model and the registers. Optimus handles the open-ended attack work; multi-agent workflows handle the steps that must run the same way every time.
Fig. 2App, code and traffic in · each proven flaw worked to closure
Live web app & APIs
Source repository
SAST / DAST results
Dependency & SBOM scan
WAF & access logs
Threat intel
Red-team harness
Application maproutes, roles, APIs ↔ code
Rules of engagementin-scope targets, rate limits, hours
Owners & approversdevs, app owner, AppSec lead
Guardrailsno merge, no prod data writes
Memorypast findings, review feedback
Your modelin their own cloud account
AutonomousOptimus · attack
WorkflowFix author
Days · SLAPR follow-through
GatedWAF guard
ContinuousLog watcher
On mergeRe-test
Self-hosted in their own AWS account: code, credentials and findings never leave it. Only model calls go to the endpoint they chose.
03Prove the exploit
Optimus attacks like a tester, and reports only what it proves.
Optimus maps the application, forms its own hypotheses (business-logic abuse as well as the OWASP Top 10), and tries them inside the rules of engagement. A hypothesis is not a finding: a flaw is reported only when the exploit works, with the request, the response and the steps to reproduce.
Fig. 3From hypothesis to a proven, owned finding
Maproutes, roles, APIs
Hypothesiselogic abuse, Top 10, ASVS
Exploitinside the rules of engagement
Proverequest, response, replay
Locatefile, function, owner
Example: an order API returns another customer’s order when the ID changes, a broken object-level authorisation (IDOR) flaw.
04Fix as a pull request
The fix arrives as a pull request, and the agent stays for the review.
A workflow agent writes the fix in the developers’ own code style and opens a pull request on a branch, with the proof attached. Then it does what a PDF never could: it reads the review, understands the comment, adapts the change and pushes again. It never merges its own pull request, a developer does.
Fig. 4One finding, one conversation, one merged fix
fix(orders): enforce owner check on GET /api/orders/{id}security/idor-orders → dev
Merged by developer
- const order = await Orders.findById(req.params.id);+ const order = await Orders.findOne({ id: req.params.id, ownerId: req.user.id });+ if (!order) return res.status(404).end();
Optimus
Proven IDOR: user A can read user B’s orders by changing the ID. This scopes the lookup to the signed-in owner. Exploit replay attached.
Developer
We have a shared authorisation middleware. Please use requireOwnership() rather than an inline check.
Optimus
Understood. Switched to requireOwnership('order') and added a regression test for the cross-account read. Pushed.
Developer
Looks good. Approved and merged.
Re-test agent
Exploit replayed after the merge: now returns 404. Finding closed with evidence.
Illustrative exchange. Agents follow up when a review stalls; the developer decides what ships.
05Protect while it’s open
Critical and unprotected? A WAF rule holds the line, safely, until the fix ships.
When a flaw is critical and nothing in front of the application stops it, the agent doesn’t wait for the sprint. It drafts a WAF rule that matches the exploit and deploys it in count mode (logging, not blocking), so it can’t break legitimate traffic. A second agent watches the logs; only after a federated human-in-the-loop approval does the rule switch to block. When the fix merges and the re-test passes, the rule is retired.
Fig. 5A temporary WAF rule, from count mode to retired
Rule draftedmatches the proven exploit
Count modelogs matches, blocks nothing
Logs watchedlegitimate traffic affected?
Approvedfederated human in the loop
Block modeexploit stopped at the edge
Retiredfix merged · re-test passed
AWS WAF · temporary ruleCOUNT
name orders-idor-temp
match GET /api/orders/*
> 20 distinct order IDs
per session in 5 minutes
action COUNT
expires when PR is merged
and the re-test passes
Log watcher agent · 48 h in count mode
312requests matched
3sources, all enumerating
0legitimate sessions hit
Federated approval AppSec lead and app owner, in Teamswaiting
Illustrative run. Block mode always needs a named approver; the rule never outlives the fix.
06Follow-up & escalation
No finding goes quiet. Critical ones climb fast.
Every finding has an owner and an SLA set by its severity. The agent follows up in the pull request and in Teams; when the SLA is breached it escalates, and a critical flaw with no protection in front of it goes straight to the people who can accept or fund the risk.
Fig. 6Escalation by severity and SLA
Developer
SLA
Application owner
SLA
AppSec lead & CISO
Follow-up where developers workComments in the pull request and nudges in Teams, not another ticket queue.
Critical goes straight upExploitable and unprotected: escalated the same day, with the proof attached.
Exceptions are recordedIf the owner accepts the risk, the reason, owner and expiry go in the live register.
07Control by design
Agents test and propose. People merge, block and accept.
An agent that attacks applications and writes code needs tighter boundaries than any other. They are set per action, by risk, and some capabilities are removed outright.
A1 · GatedWAF rule to block mode, changes to production configurationnamed approver
A2 · BoundedTest in-scope targets, open a branch and PR, comment, WAF rule in count modescoped · logged
A3 · By designMerge a pull request, test out-of-scope hosts, write production datacapability removed
Least privilege on every surface: a repository token that can read and open pull requests but never merge, in-scope targets only, a dedicated identity that expires.
08Getting started
From the first app to every app.
The rollout
1Week 0 · InstalledWorkspace in their own AWS account, with SSO, the model endpoint and the rules of engagement agreed.
2Week 1 · MappedThe application, its APIs and repository connected; Optimus builds the application map.
3Week 2–3 · Testing & fixingOWASP Top 10, ASVS and business-logic testing; proven flaws become pull requests and, where critical, count-mode WAF rules.
4Week 4 · Re-testedMerged fixes re-tested, the register reviewed with the app owner, the next applications lined up.