Home
VAPT Web Application PentestAPI PentestMobile App PentestInfrastructure PentestAI & LLM PentestOT / ICS PentestIoT PentestPenetration TestingAll VAPT services
Red Team Red Team EngagementAdversary SimulationAssumed BreachPurple TeamingSocial Engineering
CompanyResourcesBlogFree Consultation

What your monitoring should catch during a web app pentest

A pentest puts weeks of hostile traffic through your own application. Here is what your logs should show while it runs, and what to fix when they show nothing.

Joel Aviad OssiJoel Aviad OssiRed Team Lead, RedTeam Security
7 min read
A dark desk holding a grid of small glass panes, most of them dim and three glowing red from behind, with thin copper wires running from the lit panes to a brass listening horn at the front edge.

Key takeaways

  • A web application pentest produces a known set of hostile requests against a known target inside a known window, which makes it the cheapest detection rehearsal available to a security team.
  • Authorisation abuse is the hardest class to see, because a successful cross-tenant read returns the same status code as a legitimate one and only the contents of the log record separate them.
  • An access log carrying a source address, a path and a status code cannot support a rule about who did what to whose data. The requester identity, the object owner and the authorisation decision have to be in the record.
  • Agree the deconfliction details before the test starts: tester source addresses, the test window and a shared timestamp reference, so a missed alert can be told apart from a suppressed one.
  • Score the engagement twice, once on findings and once on what the monitoring saw. The second scorecard costs nothing extra and it often produces the longer list of work.

Every pentest is a free detection rehearsal

You are already paying someone to attack your application on a schedule you agreed. The findings are the product you bought. The traffic is a second product: a set of hostile requests, aimed at a known target, inside a known window, produced by an operator who will write down exactly what was sent and when. No other purchase gives your monitoring that combination.

That makes the engagement worth reading twice. A web application pentest answers whether the application can be broken. Read the same week of traffic from the defensive side and it answers a second question you cannot otherwise test without staging an incident: if someone did this to you next month, would anyone notice, and how long would it take? OWASP lists security logging and monitoring failures in its 2021 top ten because the answer is so often no.

None of this needs a second budget line or a separate exercise. It needs a decision, taken before the test starts, that the monitoring result is one of the outputs.

The five things a tester does that should reach someone

Web application testing is not quiet. Enumeration, credential attacks, injection probing and file upload abuse all generate volume, malformed input or unusual response codes, and each has an observable shape. The table below is the short list to check first, because every row maps to a rule that is easy to assume already exists.

The right-hand column is the part worth reading twice. In four of the five rows the request reaches the application and the application answers it correctly. What fails is the record, not the control. What a web application pentest covers sets out the classes of finding an engagement produces; this is the same list written as the traces those findings leave behind.

The sequence below is the general case, and the uncomfortable part of it is the last step. Four parties are involved, and the only one guaranteed to know what happened is the tester.

Where a cross-tenant read gets lost: the application makes the authorisation decision and then throws it away before anything downstream can see it.
Five common tester activities, what each one leaves in an application log, and the reason it goes unnoticed.
Tester activityWhat reaches the logWhy it is missed
Credential stuffing at the login formA burst of failed authenticationsThresholds count per account, so a spray across many accounts stays under all of them
Forced browsing for hidden routesA run of 404 and 403 responsesError statuses are sampled out or dropped at the edge before they reach the platform
Object identifier tamperingSuccessful 200 responsesNothing separates them from a customer opening their own record
Injection probing in a search fieldLong parameters holding quotes and commentsQuery strings are stripped from the line for privacy reasons and never restored
Upload of an unexpected file typeOne POST and a 201The filename and declared content type are not fields in the record

A log line without identity cannot support a rule

The default application access log is a web server format: an address, a timestamp, a method, a path, a status code and a byte count. That format was designed to count traffic. It cannot say who made the request, which object was touched, or whether the application decided to allow it, and no detection rule can test a field that was never written.

The example below is one request rendered twice, first as a standard access line and then as a record built for security use. Both describe the same successful read. Only the second carries enough to compare the requesting tenant against the owning tenant, which is the comparison that turns an object level authorisation flaw into an alert rather than a report finding. NIST's guide to computer security log management and the OWASP logging cheat sheet both set out the field list. Getting the application to emit it is the work.

The same holds one tier down, where the log is often the only place a request is visible at all because there is no page render to fall back on. If the application and its API surface are tested in the same engagement, ask for the monitoring result on both.

The two layers a standard access log leaves out, object ownership and the authorisation decision, are the two a cross-tenant rule needs.
One successful read, recorded two ways. Only the second record supports a rule about who touched whose data.
FieldStandard access lineRecord you can alert on
IdentityAbsent: 203.0.113.10 onlyuser=u_8814 role=agent tenant=t_207
ObjectGET /orders/1043route=/orders/:id object=1043 owner=t_119
DecisionInferred from status 200authz=allow rule=order.read.tenant
CorrelationNonereq=6f2ac31, spans gateway, service and database

Authorisation abuse is the class you will miss

Injection probing announces itself. A credential attack announces itself eventually. Authorisation abuse does neither, because a successful attack on object level authorisation is a well formed request from an authenticated session that returns a 200 with a body in it. Sorted by status code, it sits in the same bucket as everything a paying customer did that morning.

OWASP ranks broken object level authorisation first in its API list, and the reason it is hard to detect is the same reason it is common: the control is missing rather than bypassed, so there is no error to record. The detection has to be built from the difference between two facts in one record, the identity that asked and the tenant that owns the object. Testing authorisation role by role is how the flaw gets found. Emitting the owner beside the requester is how it would have been seen.

There is a coarser signal available before any of that lands: velocity across identifiers. One session reading forty order records in ninety seconds is not a customer, whatever each individual response code says on its own. That rule fires on internal tooling and on legitimate exports, which is an argument for tuning it against a week of real traffic rather than an argument for skipping it.

Score the test twice, and agree the ground rules first

Deconfliction is normally framed as a safety measure, so the defenders do not spend a night chasing a paid tester. It is also what makes the monitoring result readable. Record the tester's source addresses, the test window and a timestamp reference both sides will use, then keep a running note of what fired and when. Without that note, a missing alert and a suppressed alert look identical afterwards.

Ask the tester for a timeline of significant actions with timestamps and compare it against what your platform produced. Each line lands in one of four places, and they lead to different work with different owners. Only one of them costs real money. This is the same comparison a purple team engagement runs deliberately and at much greater coordination cost, and the rules that come out of it need the same upkeep afterwards, which detection decay covers.

Write the technique names against a shared vocabulary rather than local shorthand. MITRE's exploit public-facing application technique is a blunt label for a lot of what happens in a web test, but a shared reference is what lets this year's scorecard be compared with next year's.

The four outcomes of comparing a tester's timeline against your alerts, and who owns each one.
Comparison resultWhat it meansWho owns the fix
An alert fired inside the windowRule and data both work. Record the time to detect as a baseline.Nobody. Keep the rule under test
The data was there, nothing firedA detection engineering gap, and the cheapest class to closeDetection team, this quarter
The data was not thereAn instrumentation gap in the application itselfProduct engineering, in a release
An alert fired on the wrong thingA rule keyed to the tester's address rather than the behaviourDetection team, before the next test

Sort the gaps before writing a single rule

A first scorecard can produce more gaps than a team will close in a quarter, and closing them in the order they were found is the wrong order. Two questions sort the list: what would it cost the business if this were abused for real, and what does it take to see it at all. The second question is where the surprises are, because instrumenting an application to emit an authorisation decision is a code change with an owner and a release date, while writing a rule over data you already collect is an afternoon.

The grid below sorts on those two questions. The bottom right cell is the one teams skip: writing down that you have chosen not to detect something, with the reason and a date, is a real output. It stops the same gap being rediscovered at the next test and presented as new.

One caution on scope. If the answer to most rows is that nothing was collected, the fix is an engineering programme rather than a detection one, and booking another application test or an assumed breach exercise before that work lands will produce the same scorecard a second time.

How to order a first scorecard's gaps, once you separate what would hurt from what it costs to make visible.

What this means for teams in Dubai and Abu Dhabi

Regulated entities in the UAE are already required to log security events and to have someone review them, and the requirement is written into more than one regime. Licensed financial institutions answer to the Central Bank of the UAE. Dubai government entities and the suppliers who serve them work to the standard published by the Dubai Electronic Security Centre. Abu Dhabi healthcare providers work to ADHICS, and the Information Assurance Standard published by NESA applies federally. Each of them asks for security event logging. None of them can tell you whether your own application emits enough for a rule to fire on it.

That is the gap a test closes cheaply. A free zone entity in Dubai Silicon Oasis and a mainland company in Abu Dhabi may sit under different contractual obligations, but both are asked to produce evidence of monitoring rather than a description of it, and a dated scorecard from a penetration testing engagement is evidence in a form an assessor can read. Where the application is hosted or operated outside the country, settle before the test which side holds the logs and for how long, because a provider's default retention may be shorter than the window a UAE regulator's assessor asks about.

Frequently asked questions

Should we tell our security operations team that a web application pentest is running?

Yes, for a standard penetration test. The engagement exists to find flaws in the application, and an unwarned team spends the week chasing traffic you paid for. Share the test window and the tester's source addresses, keep a note of what fired, and compare the two timelines afterwards. If you specifically want to know whether the team notices without warning, that is a Red Team or adversary simulation objective and it should be scoped as one.

What is the difference between this and a purple team exercise?

A purple team exercise is built around detection: techniques are chosen for what they should trigger, the defenders watch live, and rules get written and retested in the room. Reading the detection result from a penetration test is opportunistic by comparison, using traffic that was going to happen anyway. It costs almost nothing extra, and it is a sound way to find out whether a purple team engagement is worth funding.

Which application logs matter most during a web application pentest?

Authentication events, authorisation decisions, and every request that reads or writes an object belonging to a specific user or tenant. The first two are the cheapest to add. The third decides whether object level authorisation abuse is visible at all, because those requests succeed and return ordinary status codes.

How long do we need to keep the logs for this comparison to work?

Long enough to cover the test window plus the time it takes to receive and read the report, which is a matter of weeks rather than days. Retention shorter than that gap means the tester's timeline arrives after the evidence has expired and the comparison cannot be made at all. Agree the retention period during scoping, alongside the test dates.

The engagements this applies to

API Pentest

Object and function level authorisation, tokens, rate limits

Joel Aviad Ossi, Red Team Lead at RedTeam Security
Joel Aviad OssiRed Team Lead, RedTeam Security

Joel Aviad Ossi is Red Team Lead at RedTeam Security, the Dubai-licensed trading brand of WebSec FZCO. He scopes and runs objective-based engagements across the UAE.

Let's talk about your security

Tell us the objective you want tested. We will come back with a scope, a timeline and a quote, under NDA from the first conversation.

Email [email protected]
IFZA Business Park, Building A2
Nadd Hessa, Dubai Silicon Oasis
Dubai, United Arab Emirates