Penetration TestingAPI SecurityGenerative AIOWASP API Top 10

Black-Box Penetration Test for a Generative AI Platform

We were given a list of hostnames and five days. No credentials, no source, no diagrams. Before the week was out, the client's engineers were closing authorization paths we had already proven reachable from the open internet.

0
Credentials, Source or Diagrams Given
5
Days, External Only
3
OWASP API Risk Classes Proven
100%
Findings Reproduced by Hand

Engagement Overview

Client Profile

  • Stage: Venture-backed
  • Product: Generative-AI platform
  • Customers: Enterprise prospects in active evaluation
  • Driver: Adversarial assurance before onboarding larger customers
  • Scope posture: Black-box, unauthenticated, external only

Assessed Surface

  • Applications: Multiple web applications
  • Ingress: Shared application load balancer
  • Data tier: Managed relational databases
  • Backend: Container-orchestrated model and agent endpoints
  • Cloud: Externally observable footprint only

Business Context

A venture-backed company building a generative-AI product on modern cloud infrastructure. The API surface had grown faster than security review could cover it, and enterprise buyers were asking posture questions the team could not yet answer with evidence. The client wanted an adversarial answer before onboarding larger customers.

What We Were Given:
  • A set of in-scope hostnames
  • A five-day window
  • Nothing else
What We Were Not Given:
  • Credentials or test accounts
  • Source code or diagrams
  • Allow-listing of our origin
Questions to Answer:
  • What is actually reachable?
  • Of that, what is actually exploitable?
  • Answered separately, and honestly

The Challenge

The brief was deliberately constrained: black-box, unauthenticated, external only. No credentials, no source, no architecture diagrams, no allow-listing of our testing origin. We started from exactly what an internet-based attacker starts from — a set of in-scope hostnames.

That constraint is the point. An assessment that begins with a diagram tests the architecture as documented. An assessment that begins with a hostname tests the architecture as deployed. The gap between those two is where real exposure lives — and it is the only gap an attacker ever sees.

No Inside Knowledge, By Design

Every piece of context had to be earned from the outside: which hosts existed, which applications sat behind them, and which endpoints were real rather than inferred. Discovery was not a preliminary step — it was a continuous one, feeding new targets into testing until the final day.

Shared Ingress, Shared Assumptions

Multiple applications sat behind a single application load balancer. Host-based routing fabric is frequently where authorization assumptions quietly break down: a control enforced for one virtual host is often absent on a sibling that reaches the same backend.

An API Surface Faster Than Its Review

Endpoints had shipped ahead of security review, and no reliable inventory existed of what was externally reachable. Before anything could be tested, the real request surface had to be reconstructed from client-side assets and observed behaviour.

Front-End Auth as the Only Auth

The central question for any fast-scaling platform: does the backend enforce identity, or does it rely on a front-end control that an attacker never has to traverse? This is the assumption an attacker tests first, and it cannot be answered from a configuration review.

Five Days, Not Five Weeks

Coverage had to be bought with prioritisation rather than hours. Enumeration breadth was spent where trust boundaries actually existed, and candidate findings were triaged by potential impact before any time was invested in proving them.

Our Methodology

The Governing Rule

We distinguish configuration (what a setting permits) from reachability (what answered from our position) from exploitability (what we demonstrably did) — and we report every finding at the highest level we actually reached, never one above it.

Phase 1: External Reconnaissance & Attack-Surface Mapping

  • Passive and active DNS and subdomain discovery across the in-scope perimeter
  • ASN and IP-range correlation to establish the true boundary of the estate
  • TLS certificate inspection — SAN pivoting and certificate transparency
  • Service fingerprinting of every host that answered
  • Shared-ingress profiling: host-based routing and virtual-host-to-backend mapping

Phase 2: Application & API Surface Enumeration

  • HTTP surface enumeration for each discovered application
  • API behaviour reverse-engineered from client-side assets and observed traffic
  • Route discovery, parameter and method enumeration, content-type handling
  • Error-oracle analysis to infer backend behaviour from response differentials
  • A request catalogue separating endpoints that require authentication by design from those that merely appear to — so later testing targeted real trust boundaries rather than cosmetic ones

Phase 3: Authentication & Authorization Testing

  • BOLA / IDOR: object-reference manipulation across tenant and user boundaries
  • BFLA: invoking privileged and administrative routes without the role that should gate them
  • Broken authentication: testing whether backend functionality enforced identity at all, versus relying on a front-end control an attacker never has to traverse

Phase 4: Server-Side Request Forgery & Injection Validation

  • Identified every parameter or feature capable of causing the server to make outbound requests
  • Validated SSRF using out-of-band interaction against a controlled collaborator endpoint
  • A confirmed finding therefore rests on an observed callback from the target infrastructure — not a reflected response, and not a timing guess
  • The same out-of-band discipline governed all blind-injection testing

Phase 5: Information Disclosure & External Cloud-Posture Review

  • Assessed what internal detail leaked across the perimeter — configuration, operational metadata, and service internals reachable without credentials
  • Reviewed externally observable cloud posture: exposed services and ingress filtering behaviour
  • Conducted strictly from the outside, with no console or API access to the client's cloud accounts

Tooling & Verification Pipeline

Proxy-driven manual testing is the core of the engagement. Automation is used to widen coverage, never to conclude findings — reconnaissance tooling and configuration scanners produce candidates, and every candidate is reproduced by hand before it reaches the report.

StageWhat HappensTooling ClassExit Criteria
Candidate generationPerimeter enumeration and configuration review at breadthRecon, subdomain and TLS/configuration scannersCandidate queued — never reported
Manual verificationRequest manipulation against the suspected trust boundaryIntercepting proxy with repeater/intruder-style toolingReproduced by hand, or discarded
Out-of-band confirmationBlind classes proven by observed callback from the targetControlled OOB interaction collaboratorCallback observed and logged
Evidence captureExact request/response pair preserved for client replayProxy history and engagement notesEngineer can replay it unaided
Severity assignmentImpact rated in the client's environment, compensating controls accounted forContextual rating, cross-checked against public CVSSRating and rationale both stated

Unreproducible Means Unreported

A candidate that cannot be reproduced by hand does not become a finding. It is either recorded as a genuine untested possibility with a concrete verification step, or discarded. Scanner output is never passed through to a client as a result.

Evidence & Claim Discipline

What distinguishes the deliverable is restraint in the wording. A report that overstates one finding costs the client trust in all of them — and sends engineering time at the wrong problem. These are the distinctions we hold to.

ObservationHow We Report ItHow We Refuse To Report It
Version banner in an affected rangeCandidate CVE — to be verified, with affected range and fixed version“Vulnerable to CVE-XXXX”
Public address, filtered portDefence-in-depth / configuration finding“Publicly accessible”
A control that looks weak but was never testedGenuine untested possibility, with a concrete “to verify” step“Exploitable”
An action we performed and can proveExploited / bypassed / accessed, with the request/response pairAny of those words without the proof attached
Our rating differs from public CVSSContextual severity with compensating controls, and the reason statedScanner severity, passed straight through

A Banner Is Not a Vulnerability

A version banner in an affected range stays out of the confirmed set until the code path is reproduced. A host with a public address but a filtered port is explicitly not described as publicly accessible, because nothing answered from the internet. Severity reflects demonstrated impact in the client's environment — and where our contextual rating differs from a public CVSS, we say why.

What We Surfaced

Mapped to the OWASP API Security Top 10 and reported at the exact level proven. Each item shipped with its reproduction steps, the trust boundary it crossed, and a contextual severity — so the client could prioritise by genuine exposure rather than by scanner alarm.

API1 / API5 — Broken Authorization

Customer-facing endpoints served backend functionality to unauthenticated requests they should have rejected. The front-end control existed. The backend did not enforce it — and the backend is the only thing an attacker ever talks to.

Confirmed by reproducible request/response pair

API7 — Server-Side Request Forgery

Application behaviour inducible to reach systems it was never intended to. One public request crossed into infrastructure built on the assumption that only internal callers could ever reach it — the assumption most internal services are secured by.

Confirmed via observed out-of-band callback

API8 / API3 — Information Disclosure

Internal configuration and operational detail reachable from outside the perimeter without credentials — material that shortens the path for any subsequent attacker, even where it is not directly exploitable.

Confirmed by unauthenticated retrieval from the internet

The Outcome

Remediation started during the engagement, not after it. Because confirmed findings shipped on a daily cadence rather than in a report at the end, engineering began closing the highest-impact authorization and SSRF paths while we were still testing.

What they were left with is a findings set reproducible line-by-line, each tagged with an impact-based severity and a remediation order driven by real risk rather than scanner ranking. Nothing to argue about: every claim came with the request that proves it.

What Shipped With Every Finding

  • The exact request/response pair
  • Step-by-step reproduction the client can replay
  • The trust boundary it crossed
  • Contextual severity, with rationale
  • A remediation direction, not a generic control name

How It Changed the Engineering Response

  • Fixes began on day two, not after the report
  • Highest-impact authorization paths closed first
  • No time spent chasing unverified scanner output
  • Candidate CVEs triaged separately from confirmed findings
  • Posture claims leadership could defend with evidence

“A precise, adversarial picture of what an unauthenticated attacker could and could not do — stated no stronger, and no weaker, than the evidence supports.”

Why It Matters

For AI and platform companies scaling quickly, the API layer is the attack surface — and “we put auth in the front end” is exactly the assumption an attacker tests first.

JSN Cloud delivers assessments that survive an engineer's own reproduction: every claim backed by a request they can replay. Teams fix what is real, and leadership can speak to posture with precision.

Test Your API Surface Before Someone Else Does

Find out what an unauthenticated attacker can actually reach — and get findings your own engineers can reproduce before they start fixing them.

Discuss Similar ProjectExplore AI LLM SecOps

Engagement details, client identity, and technical specifics are withheld under confidentiality. This case study describes our methodology and the classes of risk addressed.