NewPHP2Shell: What small SaaS teams must do now

Find your leaks, leaked keys, open endpoints, zombie sessions and guessable URLs before someone else does.

A full external pentest of everything you expose. Every finding comes with where it sits, the proof and the fix — and if nothing serious turns up, no invoice.

The Polaris1 dashboard: six open findings, what an attacker gets today, and recent runs.

The keys we look for in everything your app ships

  • Stripesk_live_
  • AWSAKIA
  • GoogleAIza
  • Private keysBEGIN PRIVATE KEY
  • JWTeyJhbGci

What actually happens when you run a test. From a bare domain to a fix you can hand to whoever owns that code — the whole way, in order.

polaris1.dev/New test

Domain

https://polaris1.dev
Install an agent Code access Credentials

That is the whole form. Everything else is optional.

Start test
polaris1.dev/OwnershipVerified

Add this TXT record

name_polaris1.polaris1.dev
typeTXT
value"polaris1-verify=0VLTImm-W8TbAbgZ"

Checked before the first run and re-checked before every later one.

Two independent resolvers

cloudflare-dns.comFound
dns.googleFound
two of two agreeVerified

Remove the record and testing stops.

Live run·polaris1.dev00:52

Phases

recon128 endpoints
assets41 candidates
proof26 of 41

You set the pace

gentle2/snormal10/sthorough40/s
Stop run

A running test is stopped with a single call and ends within seconds.

polaris1.dev/ResultCount is free
critical
1
high
2
medium
0
low
0
critical
high
high
€0

for the count, always.
Nothing serious proven? The run is waived.

Findings/PLS-1042critical

PLS-1042 · proven 2×

Stripe secret key shipped in your JS bundle

GET/assets/index-4f2a.js200 · 412 KB

41 candidates did not survive

2,479import { loadStripe } from "@stripe/stripe-js";
2,480
2,481const stripe = "sk_live_51H8••••••••••"
└ line 2,481, col 17
scorecritical, 94
controlsA.5.17, A.8.28, CC6.1
evidencestored encrypted
PLS-1042/What to changeREAD-ONLY
1
Rotate the keyStripe dashboard → Developers → API keys. Treat the exposed one as compromised, not as something to hide better.
2
Move the call server-sideA secret key in a browser bundle is readable by every visitor, no matter how it is obfuscated. The charge belongs behind your own API.
3
Where it comes fromDelivered at /assets/index-4f2a.js, line 2,481. Mapped through your sourcemap to src/lib/payments.ts, line 12 — if you ship one.

Re-test

Retest · free for 14 daysfinding closed

It runs the same two passes against the same place, and either the finding closes or it does not.

You name the target. Nothing else. No agent to install, no code access, no credentials. A domain is enough — everything happens from the outside, the way a stranger sees you. What the product is

One DNS record, checked twice. We will not touch a host you have not proven. Two independent resolvers have to agree — a single one can be stale or redirected, and ownership is the only ticket in. Limits and controls

You watch it happen. And you can stop it. Phases report live, and you decide how hard we push your production system. What we have not built says skipped instead of showing a progress bar for work nobody did — an invented number would be worse than an honest gap. How a run works

The count is free. Always. How many and how bad costs nothing. If nothing serious was proven, the run is waived and you are never charged — that is the whole pricing model in one sentence. See pricing

The name, the place, the proof, the fix. Every finding was reproduced with different parameters before it reached your list. 41 candidates did not survive that step. This is why the report has three lines and not 1,428. Four reports

We tell you what to change and where. A suggestion, not a pull request. We never write to your code and never hold credentials — the whole test runs read-only from the outside. What you do with it is your call. How the re-test works

What you get

Four reports the same day — one to forward, one for your developers.

CVSS bandsEvery finding scored 1–100
ISO 27001 · SOC 2Controls mapped per finding
EU data residencyEvidence and reports stored in the EU
No stored passwordsEmail code, Google or GitHub

Every finding, proven twice. A second agent has to reproduce the attack before a finding is written up at all — and if it cannot, the finding is dropped.

Four reports, the same day.

One to forward, one for your developers, two for your audit. Dated, as PDF, and you can export them as often as you like.

  • SummaryFindings, impact and reach, with no reproduction steps and no raw evidence.
  • TechnicalThe request that proves each finding, where it sits in the code and the change required.
  • ISO 27001Each finding mapped to the controls it touches in Annex A.
  • SOC 2The same mapping to the Trust Services Criteria. Evidence for an audit, not an audit.
What is in each report

Limits and controls. Each limit is enforced by the system rather than stated in a contract — all of them are shown on one screen before a run starts.

targetpolaris1.dev
subdomainsoff, per scope
methodsGET · HEAD · OPTIONS · POST
excluded/admin, /webhooks

The scope is displayed first

Target and subdomain setting, requests per second, the four HTTP methods, the excluded paths, and the fixed source addresses the traffic comes from.

AWS KMSenvelopeorg-bound

Evidence is encrypted per organisation

The same ciphertext decrypted under a different account yields nothing — a property of the encryption, not of an access rule.

raw evidenceminutes
every accessaudit log

Raw evidence expires and is logged

Unredacted evidence opens through a link valid for minutes. Secrets are redacted before storage.

All six limits and controls

Trust you can check. No badges and no customer logos: we name no client without written permission. Each point below links to the place where it is written down.

Frankfurteu-central-1Art 28 GDPR

Stored in the EU

Evidence and reports live on machines in Frankfurt, with keys in eu-central-1. Every processor is named, and a data processing agreement is available.

Privacy policy, processors
30 daysscheduled job

Evidence is deleted after 30 days

By a job that runs on a schedule and can be checked, not by a storage provider’s retention setting.

How long we keep things
NDA by defaultno names

Your name stays out of it

An NDA is the default, and no client is named anywhere without written permission.

How we work
support@polaris1.devcredited

Found a flaw in Polaris1?

Tell us and we will credit you. Disclosure mail is answered first, before anything else.

Report a vulnerability

Six weeks and $18,000. Or today, for €199. A booked penetration test is worth its price. It is also a project: scoping calls, a slot in someone’s calendar, a week of testing, a week of writing.

AspectBooked pentest
Price$8,000 – $30,000€199
Testing3 – 10 daysMinutes
Report3 – 7 days afterImmediately
First contact to report4 – 8 weeksSame day
Nothing serious foundFull feeNo invoice
Retest after the fixUsually billed againFree, 14 days

A pentest is a snapshot of one day. You ship every week, and the report starts ageing the moment it is written. This takes minutes — run it again the day you ship, and again after the fix, free, for fourteen days.

From your pipeline

A key can do exactly two things — start a run and read the counts.

POST /v1/testsYour pipeline starts a run
GET /v1/tests/:id/summaryIt reads the count, nothing else
test.completedA webhook says when it is done

One price, and only if we prove something. There is one product: a full external test of one application and its APIs. What it costs does not depend on a plan, a seat count or a contract term.

What you pay, and whenOne application and its APIs
  1. The run and the count

    €0

    Add a domain, prove it is yours with one DNS record, start the run. When it ends you see how many findings there are and how serious — by severity, as a count.

    No card, no commitment

  2. The findings themselves

    €199

    Titles, locations, proof and fixes stay closed until you unlock them. You decide with the count already in front of you, so you are never paying to find out whether it was worth paying.

    Only if something critical or high was proven

  3. The re-test

    €0

    Mark what you fixed, push it, and run the test again against those findings. One re-test, within fourteen days, at no cost — however many findings it covers.

    Once per paid run

Per testNo subscription

€199/ test

One application and its APIs, tested end to end. No card to start, no subscription, no minimum term.

Every test includes

  • Every finding named, located and reproduced
  • Proof of exploit attached to each one
  • The fix written for your stack, not a link to a CVE
  • Four reports the same day — one to forward, one for your developers
  • One free re-test within 14 days, however many findings you fixed
Run a test

Nothing critical or high proven — no invoice.

Several repositories, internal apps, SSO or a signed DPA? Talk to us

The questions we get asked first.

Something missing? Ask us directly — a person answers.

What is free, and what costs €199?
Every run ends with a count: how many findings, at which severity. That part is free, needs no card, and is enough to know whether you have a problem. What costs €199 is the findings themselves — the titles, where they sit, the proof that each one is real, and the change that closes it.
What if you find nothing serious?
Then the run is free. We only charge when at least one critical or high finding is proven — reproduced twice, with different parameters, by a second agent. Medium and low findings are shown either way, at no cost, and you keep all four reports.
Do you need access to my source code?
No. By default everything is tested from outside, exactly like a stranger would. Connecting a repository or an OpenAPI spec makes coverage deeper, because the agents then understand your roles and data flows — but it is optional, and access is read-only.
Is it safe to run against production?
Testing is external and non-destructive, rate-limited, and preceded by pre-flight checks. Agents stop at the first proof instead of digging deeper, and one button kills every agent instantly. You can also point a run at staging.
How is this different from a vulnerability scanner?
A scanner reports what looks wrong. Here, a second agent has to reproduce the attack before the finding is written up at all — and if it cannot, the finding is dropped. That is the difference between 1,428 lines and six.
Do I have to prove I own the domain?
Always. One DNS TXT record, checked before the first run and re-checked before every later one. Remove the record and testing stops.

€199 now, or your whole app later.

A leaked key is never one finding. It is your database, your storage and your payments in someone else’s hands — and nobody warns you first. The free check takes ten minutes and nothing from your team.