Authenticated web app testing with AI agents
Authenticated web application penetration testing tests the parts of an app behind login. The lab's AI agents sign in with test accounts, one per role, and compare what each role can reach. You choose how sessions, SSO and MFA are handled. Real user accounts stay out of scope. Each finding links to saved requests and responses.
Authenticated web application penetration testing tests the parts of your app that sit behind login. The lab's AI testing agents sign in with test accounts, one per role, and compare what each role can see and do. Excession Labs checks the evidence for each finding and writes the report.
An unauthenticated test reaches the login page and the public site. Most records, settings, payments and admin tools are behind login, so authorization bugs show up only when the caller is signed in.
What does an authenticated test cover?#
It covers every function that checks who the caller is. The agents run the same request as several roles and as an anonymous caller, then compare the results.
| Area | Question | Check |
|---|---|---|
| Object access | Can user A read or change user B's record? | Replay A's request with B's identifier, read back from B's session |
| Function access | Can a low-privilege role call an admin function? | Call the admin route directly with the low-privilege session |
| Session handling | Does logout end the session? Is a token reusable after logout? | Replay a token after logout |
| State-changing requests | Is a request accepted without a valid anti-CSRF token? | Browser-observed check in Chromium |
| Client-side code | Do the JavaScript bundles expose routes or keys the UI hides? | Review of the bundles, then request the routes |
| Tenant boundaries | Can one tenant reach another tenant's data? | Two-tenant method, see AI pentesting for SaaS |
OWASP API1:2023 and the OWASP privilege escalation test describe the same ideas for manual testers.
Which test accounts do you need for each role?#
You need one account for each role, and a second account in any role that holds data. The second account is what proves one user can reach another user's records. Create the accounts for the test and mark them as test data.
| Account | Purpose |
|---|---|
| Admin | Baseline for restricted functions |
| Standard user A | Owns test records |
| Standard user B, same role as A | Target of cross-account reads |
| Read-only or low-privilege user | Function-level limits |
| User C in a second tenant | Tenant isolation, if the app has tenants |
| Anonymous | Baseline for every request |
Give each account some test data, or a cross-account read has nothing to read. We write the accounts and roles into the scope.
How do sessions work during the test?#
Each account keeps its own session, and the agents renew it when it ends. A mix-up between sessions would ruin the comparison. If a response returns a login page with a 200 status, the agent treats the session as lost, writes it in the run log, and does not report it as a finding.
Tell us three things: how to sign in, what carries the session (a cookie, a bearer token or a header), and how long it lives. The OWASP Session Management Cheat Sheet is the reference for expiry and logout behavior. Logout, token reuse after logout and cookie flags are valid tests, so the scope can include them. The signed-in flows guide walks through session handling step by step.
What are the SSO and MFA options?#
You pick one option per environment, and the scope records it. OWASP calls MFA a critical control, so we do not ask you to turn it off for real users.
| Option | Use when | Limit |
|---|---|---|
| Test account with a TOTP seed shared with the tester | Staging or production with MFA on | Store the seed in a secrets manager and rotate it afterward |
| MFA waived for named test accounts in staging | The MFA flow is not in scope | The test does not cover MFA, and the report says so |
| Pre-issued session or token per account | SSO or passkeys block automation | The login path stays untested |
| Test identity provider tenant | The app uses SAML or OIDC | The setup must match production |
If login, MFA or password reset is in scope, test it on purpose with accounts you control. The OWASP Multifactor Authentication Cheat Sheet lists what to check.
What stays out of scope?#
Real users' accounts, real customer data and anything the system owner has not authorized in writing stay out. We test only with written authorization from the system owner. Destructive proofs use test-owned accounts and records only.
Some actions need approval or are bounded, and their cost goes in the report: uploads, password guessing, email sending and paid third-party APIs. If something outside the scope looks relevant, we stop and ask. The agents' tool rules (run on its own, wait for approval, blocked) are set per scope. See the safety page.
Credentials need care too. Pass them through a secrets manager or an encrypted channel, not through chat or tickets. Replace session values with placeholders in saved evidence, and disable the accounts when the test ends.
What evidence do you get?#
Each finding comes with saved requests and responses, timestamps and the controls that were run next to it. Key evidence can carry a SHA-256 manifest. A finding is "Observed" when we reproduced it and "Browser-observed" when it was shown in a real browser.
A worked example: the agent signs in as user A and as user B in the same role. It requests B's record with A's session, and then reads it from B's session to see what changed. A control, such as a nonexistent record ID, runs alongside. The report holds the pair, the result and the fix guidance. The report also lists controls that held, so you know which protections work. The example assessment shows the report layout.
How do you start?#
Start with a short call, then a written scope and proposal. Prices are quoted after scoping. Send us the role list, the environment and your SSO and MFA setup before the call. For a small first test, apply for a pilot. Places are limited and reviewed by hand.
Questions
Do you need our admin credentials?
We need an admin test account if admin functions are in scope. Create it for the test, give it the admin role only, and disable it afterward. A real administrator's login stays out of the test.
Can you test if we require MFA?
Yes. The scope states which option you chose: a test account with a second factor the tester can use, a staging waiver for named test accounts, or a pre-issued session. The report says if the MFA flow itself was not tested.
Does it cover SSO login?
It can. A separate test identity provider tenant with test users is the closest match to production. Say in scoping whether the SSO login flow is in scope or only the app behind it.
Is an authenticated test also a test of anonymous access?
Both are run. Every request is compared across anonymous and signed-in callers, so the report shows what login protects and what it does not.
Sources
- OWASP Web Security Testing Guide v4.2: Testing for Privilege Escalation (checked 9 November 2026)
- OWASP Multifactor Authentication Cheat Sheet (checked 9 November 2026)
- OWASP Session Management Cheat Sheet (checked 9 November 2026)
- OWASP API Security Top 10 2023: API1 Broken Object Level Authorization (checked 9 November 2026)
Run it on your application
Start with a scoped pilot. Our AI agents run the tests, the lab checks each finding, and you get a report with evidence.