Prioritizing Pen Test Findings by Exploitability in a SaaS Environment
Focus on exploitability and chaining rather than CVSS scores to prioritize pen test findings.

Not every finding in a pen test report deserves the same urgency, and CVSS scores won't tell you which ones do. The only real way to sequence remediation in a SaaS environment is exploitability: whether someone actually proved the finding works, how it links up with other weak spots in your cloud setup, and what happens if an attacker gets there before your team does.
CVSS was built to describe severity in general terms, not exploitability in your specific stack. A 9.8 on a library your app never touches carries less real risk than a 5.4 that a tester chained straight into tenant data. Vulnerability exploitation jumped 34% and now drives 20% of all breaches, so the gap between "this scored high" and "this actually got used" is shrinking fast. Meanwhile, engineering teams keep hitting the same wall: every finding gets labeled "high," the backlog balloons, and nothing gets fixed. Scanner reports export CVSS by default because that's what the tool does, and it does not represent a real judgment about risk to your business. When everything is marked urgent, nothing actually is.
What demonstrated exploitability means in a pen test finding
A finding is exploitable when the tester has actually pulled off the attack, going beyond spotting a condition that looks bad on paper. Those are two very different claims, and reports that blur them cause most instances of backlog bloat.
Three tiers matter here, and they're often flattened into one:
- Scanner flag. An automated tool matched a pattern against a known vulnerability signature. No human looked at it.
- Confirmed vulnerability. A tester manually checked and confirmed the condition exists.
- Proven exploit. The tester ran the attack and showed what happened: a screenshot, extracted data, a privilege gained.
Only the third tier earns a priority-one label. The first two need more digging before they eat up sprint time your team could spend elsewhere. A quality report backs up a proven exploit with reproduction steps, screenshots, logs, or working exploit code, enough detail that an engineer can rebuild the attack and confirm the fix actually closes it.
How the SaaS architecture creates chaining opportunities that change a finding's real priority
SaaS platforms are webs of trust, not single applications sitting behind a firewall: identity providers, payment processors, webhooks, cloud storage buckets, APIs, CI/CD pipelines, customer environments all talking to each other. They're webs of trust: identity providers, payment processors, webhooks, cloud storage buckets, APIs, CI/CD pipelines, customer environments all talking to each other. Every one of those connections is a link a tester, or an attacker, can use to push a small foothold into a much bigger one.
This is where chaining comes in, and it's the single biggest reason CVSS alone misleads teams. A medium-severity bug sitting next to another medium-severity bug can add up to a full compromise.
Take an SSRF finding that reaches a cloud metadata endpoint. On its own, that might score medium. But if it hands over live IAM credentials, and those credentials open the door to another tenant's data, the finding is now critical, no matter what CVSS said. Or look at broken object-level authorization on an API endpoint, paired with a tenant ID sitting in plain sight in a URL. Neither flaw by itself looks alarming. Together, they let one customer read another customer's records.
Multi-tenancy is what makes this so dangerous. A single misconfiguration in the tenant isolation layer can expose one client's data to every other client on the platform. Cloud environment assessments have shown the highest average vulnerability count of any assessment type, at 14.40 findings per test, which says something about how crowded and interconnected this layer really is.
The SaaS attack surface areas where exploitable findings cluster
Exploitable findings don't spread evenly across a SaaS platform. They stack up in a few predictable places.
APIs carry the weight of SaaS delivery, and that makes them the top target. Broken authentication, missing checks on who can access which object, endpoints with too many permissions, weak or absent rate limiting: these occur repeatedly because APIs expose so much surface area with so little friction for an attacker.
Multi-tenant isolation is where scanners fall flat. Row-level security gaps, insecure database queries, tenant IDs that are easy to guess or enumerate: these are logic flaws baked into how the app was built, and no automated tool catches them reliably. A human tester has to go looking.
Authentication and identity bring their own cluster: SSO misconfigurations, weak spots in OAuth flows, ways around MFA, and session management that doesn't expire or invalidate the way it should.
Cloud infrastructure rounds it out: storage buckets left open to the public, IAM roles with far more permission than the job requires, leaked access keys, public snapshots, secrets sitting in build pipeline logs, metadata endpoints that answer requests they shouldn't, and Kubernetes services exposed further than intended. This is dense territory, and it's often where the highest-impact chains start.
A practical framework for sequencing remediation after the findings land
Run every finding through three filters, in this order, before it touches a sprint board.
Filter 1: Is there a working exploit? If a tester proved it, the finding jumps to the top regardless of what CVSS says about it.
Filter 2: Does it sit on a chain path to something critical? Tenant data, credentials, payment information, admin access. If a medium finding is one hop away from any of those, treat it as more than medium.
Filter 3: What's the blast radius in a multi-tenant setting? A bug that could expose one customer's data to another customer needs to move faster than a bug that only affects the attacker's own session.
Once findings pass through those filters, sort them into four buckets:
- Immediate: working exploit plus a chain path or multi-tenant impact. Fix before the next deploy, or put a compensating control in place within 24 to 48 hours.
- High: working exploit with limited blast radius, or a confirmed vulnerability that sits on a chain path. Fix inside the current sprint.
- Medium: confirmed vulnerability, no demonstrated chain, impact stays bounded. Schedule the fix with a real deadline attached.
- Low or informational: scanner flags with no confirmation, or general hardening advice. Backlog it, review on a regular cadence.
Routing matters just as much as ranking. Cloud infrastructure findings go to platform or DevOps. App-layer findings go to the feature team that owns the code. Identity findings go to whoever owns auth. Most remediation delays trace back to a finding that sat unassigned because nobody was sure whose problem it was.
Sometimes the real fix needs an architectural change that can't ship in two days. In that case, document the compensating control and set a firm deadline for the permanent fix. Auditors and enterprise customers generally accept this, as long as the reasoning behind the interim step is written down and makes sense.
Why point-in-time testing is structurally mismatched to a CI/CD SaaS environment
Annual pen tests were built for a world where systems changed once a year. A SaaS team pushing code weekly, or daily, creates new attack surface constantly, adding a new API endpoint here, a new third-party integration there, a dependency bump, an infrastructure tweak. None of that waits for the next scheduled test.
A working exploit that didn't exist on test day can appear in the very next sprint. That means the exploitability-first framework laid out above is only as fresh as the report it's built on. A report from ten months ago saying "no finding" isn't proof of safety right now, it's a snapshot of a system that no longer exists in that form.
Compliance frameworks have started catching up to this, unevenly. PCI DSS Requirement 11.4 calls for testing after significant changes, not just once a year, which is a direct nod to how fast the gap between tests can open up. SOC 2's CC7.1 and CC6.1 controls support continuous monitoring evidence, since one annual test only covers a thin slice of a full 12-month audit window. HIPAA's proposed 2025 Security Rule update would make annual testing an explicit requirement, but that's meant as a floor, not a ceiling worth aiming for.
What whitebox access changes about finding real exploitability in SaaS code and cloud
Blackbox testing starts from outside, with no credentials, and surfaces what an unauthenticated attacker on the internet would find. That's useful, but it's bounded by what's visible from the outside looking in.
Greybox testing hands the tester login credentials, which opens up the authenticated attack surface behind the login wall. That's a step up, but the tester still can't see what the code is doing behind the API responses.
Business logic flaws need context that only comes from understanding how the workflow is supposed to behave. Access to documentation gives a tester the baseline to recognize when something is wrong, rather than just noticing something unexpected and guessing at what it means.
Multi-tenant isolation failures often hide inside query construction or middleware code, not in anything visible from the outside. Source code access lets a tester find these directly, instead of piecing them together from behavior alone and hoping the inference holds up.
Reading a pen test report through the lens of exploitability before routing findings to your team
Before a finding goes anywhere near an engineering backlog, first check whether it comes with reproduction steps and real evidence, such as a screenshot, a log, or working exploit code; if it lacks that evidence, it is just a description of a condition that might be a problem. No evidence means it isn't confirmed yet. Treat it as medium until someone retests it and gets proof.
Next, check whether the report explains severity in terms of what an attacker could actually do, beyond citing a CVSS number. A strong report reads something like: "This SSRF allows retrieval of AWS metadata credentials, which can be used to access S3 buckets containing customer PII." A weak report just says: "CVSS 7.5, Server-Side Request Forgery detected." The first one tells a story an engineer can act on. The second one tells you nothing about what happens if it's left alone.
Look for chain notation too. Does the tester connect the dots between findings that sit next to each other, or does the report list every finding as its own isolated item with no sense of how they interact? A report that skips the chaining analysis leaves out the factor that actually determines priority.
Finally, run the executive summary test: can someone without a technical background read it and walk away understanding what an attacker could have actually done, if they'd gotten there first? If the answer is no, the report hasn't done its job, no matter how many findings it lists or how detailed the appendix is.



