AI & B2B SAAS

Holmes AI

AI SAAS B2B PROCUREMENT CALIFORNIA UNITED STATES

A web application and API penetration test across an AI-powered B2B procurement platform, focused on the boundaries that matter most in multi-tenant software: who can authenticate, who can read whose records, and what an API will hand over when nobody checks.

Engagement type
Web Application & API Penetration Test
Scope
AI-powered B2B procurement platform. Web application, authentication flows, and all backend APIs.
/ context

A procurement platform is a permissions problem wearing a UI.

B2B procurement software sits in the middle of a commercial relationship. It holds the contracts, the negotiated pricing, the supplier lists, and the approval chains that both sides of a transaction consider confidential. Buyers do not want their pricing visible to other buyers. Suppliers do not want their margins visible to competitors bidding on the same contract.

That separation is almost never physical. In a multi-tenant SaaS platform every customer's records live in shared infrastructure, and the boundary between them is enforced by application logic: a check in a controller, a scope on a token, a filter on a query. When one of those checks is missing, nothing crashes and no alert fires. The data simply comes back to whoever asked for it.

Adding AI to the workflow raises the stakes rather than changing them. Procurement data now moves through processing pipelines that summarize, classify, and route it, which means more services touching the same records and more places where an authorization decision has to be made correctly. The security question is not whether the perimeter holds. It is whether the application enforces the boundaries its own product page promises.

/ findings overview

Fifty findings. Forty-eight closed.

50
Total findings

Across authentication, authorization, session handling, and input validation.

48 / 50
Remediated

Fixes confirmed on retest before the engagement closed.

2
Accepted risk

Acknowledged and formally accepted by the client.

/ approach

How the engagement ran

The engagement covered the web application, its authentication flows, and every backend API behind it. Testing was conducted against all three user types the platform supports, buyer, supplier, and platform administrator, with each role tested against the others rather than in isolation. Most authorization failures only become visible when you hold one identity and reach for another identity's data.

Business logic flaws do not have signatures. An automated scanner can tell you that an endpoint responds, but it cannot tell you that a supplier should never have been able to read that particular contract, because it does not know what a contract is or who is supposed to see one. That distinction is why the API surface was enumerated and exercised by hand rather than crawled.

Findings were validated with reproduction steps and rated by real business impact before being handed over. The engagement closed with a retest cycle, which is where the remediation count comes from: 48 of the 50 findings were confirmed fixed rather than reported as fixed.

/ what we found

Key risk areas identified

Six areas where the platform's trust boundaries did not hold up under attack.

01

Authentication bypass

Unauthorized access to procurement workflows and the supplier and buyer data behind them.

Authentication bypass means reaching a state the login flow was supposed to gate. It rarely looks like a cracked password. More often it is a flow that can be entered halfway, a token that is trusted without being verified, or a step that can be skipped because the server assumes the client followed the intended order.

02

Cross-account data access

Records, contracts, and supplier profiles belonging to one account reachable from another.

This class is what OWASP lists as the number one API risk, broken object level authorization. The request is properly authenticated, the session is real, and the server still returns a record belonging to somebody else because the only thing identifying the record was a value the caller supplied.

03

Privilege escalation

Movement between the buyer, supplier, and platform admin roles beyond what each role should hold.

Escalation runs in two directions. Horizontal movement gets you another account's data at your own permission level. Vertical movement gets you a higher level entirely, which on a procurement platform means reaching administrative functions from an ordinary supplier login.

04

Unprotected API endpoints

Endpoints returning sensitive procurement and pricing data without an authorization check.

APIs frequently carry data the interface never displays. An endpoint built to populate one screen may return the full underlying object, including pricing and counterparty detail the front end simply does not render. The data is in the response either way.

05

Session management weaknesses

Conditions allowing session hijacking and theft of authentication tokens.

Session weaknesses extend the window an attacker gets. Tokens that outlive their usefulness, sessions that survive a password change, or identifiers that can be captured and replayed all turn a single moment of exposure into ongoing access.

06

Input validation gaps

Room to manipulate data as it moved through AI-processed procurement workflows.

In an AI-assisted workflow, input validation stops being only about injection. Data that gets manipulated on the way into a processing pipeline influences what comes out of it, which means a validation gap upstream can quietly change a downstream result that a human then treats as authoritative.

/ takeaways

What this engagement says about multi-tenant SaaS

01

Authorization is a per-object question, not a per-endpoint one

An endpoint can be correctly locked to authenticated users and still hand every one of them the same records. The check that matters is not can this user call this route, it is does this user own this specific object.

02

Every role you add multiplies the test surface

Three roles do not produce three test cases. They produce every combination of who is acting and whose data is being touched, which is where privilege escalation paths hide.

03

The API is the product, the UI is a client

Access controls enforced in the interface are decoration. Anything the browser can request, an attacker can request directly, without the JavaScript that was supposed to hide the button.

04

Accepted risk is a valid outcome when it is a decision

Two findings closed as accepted rather than fixed. That is a legitimate result when it is a documented, deliberate choice rather than a backlog item nobody got to.

/ relevant for

If this looks like your environment, it probably behaves like it too.

AI SaaS platforms with multi-tenant data and role-based access.

B2B software handling procurement, financial, or sensitive operational data.

Platforms where cross-account data isolation is critical.

/ common questions

Questions this engagement usually raises.

What is a web application and API penetration test?
A manual security assessment in which testers attack a live application the way an adversary would, then confirm each issue with reproduction steps. It covers both the interface and the backend APIs behind it, because the two have different attack surfaces and the API is usually the larger one.
How is a penetration test different from a vulnerability scan?
A scanner matches known signatures and reports anything that looks familiar, including a large volume of things that are not exploitable in context. A penetration test validates exploitability and finds business logic flaws, which have no signature to match because they are failures of intent rather than of code pattern.
What is broken object level authorization?
A flaw where an application checks that you are logged in but not that the specific record you asked for belongs to you. Changing an identifier in a request returns somebody else's data. It is consistently among the most common and most damaging API vulnerabilities.
Why does multi-tenancy make this harder?
Because the separation between customers is enforced in software rather than by infrastructure. Every query, endpoint, and background job has to independently get the boundary right, and a single omission exposes data across accounts without any visible failure.
What happens to findings that are not remediated?
They are documented and formally accepted as risk by the client, which is what happened with two of the fifty findings here. Accepted risk should be a recorded decision with an owner, not an open item that fell off the list.
/ more engagements

Other work.

Start here

Think like them.
Before they do

Book a 30-minute walkthrough. We'll point CredShields at a scoped asset and show you live findings by the end of the call.

Secure your protocol today

Don't wait for a
security incident.

Get your comprehensive security audit from the team trusted by 200+ protocols and enterprises worldwide. Fast turnaround. Proven track record. Direct access to senior security engineers.

Fixed-Fee Pricing
No engineer-hour billing
Audit-Ready by Default
SOC 2, ISO, PCI, HIPAA
Engineer-Validated
Not scanner output