Field study · 200 listings · 4 September 2026
92% of businesses for sale had a security hole we could find from the outside…
We ran the scanner that runs on any URL you submit against 200 businesses listed for sale on Flippa. No seller was told. Nothing was tidied up first.
What came back
184 of 200 had a hole.
- 184flagged
- 16clean
- 558findings in total
- $300–$975to fix the median site
Show all 558 findings by severity
- 193high
- 32medium
- 329low
- 4info
No critical findings in the sample. High is a hole a buyer would want closed before wiring money; low is hygiene.
What was wrong
Two findings account for most of it.
- 56%Site is not served over HTTPS
- 56%Missing HTTP security headers
- 25%Multiple UI controls wired to nothing
- 23%Cookies set without baseline protective flags
- 18%Action controls that trigger no backend call
Show the other 13 findings
- 14%Unauthenticated AI endpoint (open LLM billing)
- 10%Permissive CORS policy
- 10%Admin path is publicly reachable
- 8%API route returns data without authentication
- 7%JavaScript source maps are publicly served
- 6%Google API key exposed in client-side code
- 5%Session cookie is readable by JavaScript (no HttpOnly)
- 3%Directory listing is enabled
- 3%AI endpoint detected — verify it is authenticated
- 2%The site refused connections from the scanner
- 2%Forgotten non-production deployments are publicly reachable
- 2%Insecure (HTTP) resources on an HTTPS page
- 1%Placeholder / unbuilt-feature content in the live UI
Who it happened to
Every kind of listing. Same result.
- 2.7Ecommerce
- 2.8SaaS
- 2.8Content
- 2.9Service
- 2.7Marketplace
- 4.0Agency
Findings per site, averaged within each type. Bars are drawn against the highest of them, not against the whole sample.
Show the checks that could not run
A check that could not run is not a check that passed. Kept in view, never dropped.
- 66%Forgotten staging and preview sites still live
- 32%Data endpoints open without signing in
- 31%Secrets in archived copies of the site
- 28%Original source code published with the app
- 28%Unprotected AI endpoints anyone can run up a bill on
- 26%Folders browsable by anyone
- 26%Session cookie protection
- 25%Default admin pages still reachable
- 24%Browser security headers
- 24%Who other sites are allowed to read from this one
- 22%Git repository served to the public
- 20%Environment file left on the server
- 20%Dependency manifest served publicly
- 14%Insecure resources loaded on a secure page
- 3%API keys shipped inside the browser bundle
- 3%Buttons and features that do nothing
- 3%Firebase database readable by the world
- 3%Supabase tables readable with the public key
One site, in full
9 findings on one site. The median was 3.
Ecommerce, listed between $5,000 and $25,000. We are not naming it. Its listing is public; its security holes are not, and it is still for sale.
Site is not served over HTTPS$75–$225
Target resolved over http, not https.
Session cookie is readable by JavaScript (no HttpOnly)$75–$225
Session cookie(s) slv_session_51e5206f3949c44d60f98b7e879819e0 are set without HttpOnly, so any cross-site-scripting flaw can read them and take over accounts. Cookie values not captured.
Unauthenticated AI endpoint (open LLM billing)$150–$600
The endpoint /generators-portable-power proxies to a paid LLM API and accepted an unauthenticated request (no login required). Anyone can call it in a loop and run up the owner's API bill — an open, uncapped cost the buyer would inherit. Needs auth + rate limiting.
Unauthenticated AI endpoint (open LLM billing)$150–$600
The endpoint /ai-technology proxies to a paid LLM API and accepted an unauthenticated request (no login required). Anyone can call it in a loop and run up the owner's API bill — an open, uncapped cost the buyer would inherit. Needs auth + rate limiting.
Unauthenticated AI endpoint (open LLM billing)$150–$600
The endpoint /smart-life-with-ai proxies to a paid LLM API and accepted an unauthenticated request (no login required). Anyone can call it in a loop and run up the owner's API bill — an open, uncapped cost the buyer would inherit. Needs auth + rate limiting.
API route returns data without authentication$75–$300
An unauthenticated GET of /wp-json/ returned a JSON object containing personal-data fields — no login required. That is what one request observed, not necessarily the full size of the data set. The response carries personal-data fields, so this is broken access control: anyone can read it. Contents redacted.
API route returns data without authentication$75–$300
An unauthenticated GET of /wp-json/wp/v2/pages/48602 returned a JSON object containing personal-data fields — no login required. That is what one request observed, not necessarily the full size of the data set. The response carries personal-data fields, so this is broken access control: anyone can read it. Contents redacted.
Missing HTTP security headers$75–$225
Response is missing: HSTS, CSP, X-Frame-Options, X-Content-Type-Options. Missing headers are common — most sites we scan lack at least one — so treat this as baseline hardening to request, not as a deal issue on its own.
Admin path is publicly reachable$75–$300
/phpmyadmin/ returns 200. Confirm it enforces authentication.
How to check us
Check it yourself.
- The full sampleAll 200 addresses and asking prices we read, as JSON.
- Every check we ranNamed, with the published source behind each dollar figure.
- Run it yourselfPoint it at any listing in the sample. It costs nothing.
What these numbers do not cover
- Sample bias
- These are the newest, cheapest Flippa listings, many of them $1 opening auctions. They under-represent established, higher-value businesses. Read the rates as indicative of the low end of the market, not the whole of it.
- Pricing is uncalibrated
- Fix-cost and expected-loss figures come from a documented but un-tuned model. Use them to compare findings against each other, not as absolute dollar truth.
- “Could not run” is a result
- Several checks need a successful crawl, so parked and dead sites make those checks report themselves unable to run rather than passing. That is signal, not a gap — a site a buyer cannot reach is itself a finding.
- Redacted
- Finding evidence is redacted where it was captured: a leaked key shows its type and last digits, never the secret. The scanned sites are not named, and the specimen below has had its address removed from every field, including the evidence text.