← mohithgajjela.com
FIELD / 08
MOHITH GAJJELA
RUNS IN YOUR BROWSER
no network calls
FIELD 08 / BLASTDOOR

Ranking leaked credentials
by what they unlock.

It finds the keys on a machine and checks, read-only, what each one can reach, so you know which to rotate first. Below is a fake laptop with six credentials. Change them and watch the ranking update.

15declared endpoints, 14 of them GET
1POST, with a written justification
0secrets that survive into output
65tests, no live credential
the detectors, the exposure signals and the blast-radius arithmetic on this page are the tool's own logicthe credentials are fabricated · every probe result here is simulated
READ-ONLY CAPABILITY PROBING + DOWNSTREAM INSTALLS PER WEEK + IAM POLICY SIMULATION + KEYCHAIN WITHOUT A PROMPT + ROTATION ORDER + READ-ONLY CAPABILITY PROBING + DOWNSTREAM INSTALLS PER WEEK + IAM POLICY SIMULATION + KEYCHAIN WITHOUT A PROMPT + ROTATION ORDER +
01THE MACHINE · SCORED LIVE

Same credential. Move it,
and watch what it costs you.

Click a credential and change where it lives or what it can do. The score and rotation order recompute with the tool's own code. Try the npm token: raise its downloads, then make it read-only.

SYNTHETIC MACHINE · 6 CREDENTIALS
SELECTED CREDENTIAL
WHAT THE PROVIDER SAIDSIMULATED
EXPOSURE SIGNALS
WHAT THIS WOULD COST YOU
ROTATE IN THIS ORDERtiered by what is actually known, then by score
A confirmed-live credential outranks a higher scoring one nobody could verify, because the estimate might be wrong and the measurement is not. A live credential already off the machine jumps to the front regardless of score.
02DETECTORS · TYPE SOMETHING IN

Entropy alone finds
your config file.

Most issuers use a distinctive prefix now, so those are matched exactly and the false-positive rate is near zero. Everything else falls back to context plus randomness, and that is where naive scanners embarrass themselves: development-mode-enabled clears three bits per character comfortably. So a value also has to mix character classes, and a placeholder list catches the rest. Edit the box and watch the verdicts change as you type.

INPUT
Nothing you type leaves the page. There is no network call on this site.
VERDICTS
03THE GUARD · ENFORCED, NOT PROMISED

It holds live credentials
and points them at the internet.

"We were careful" is not a control. So every network call goes through one transport that can only make calls a probe declared in advance, with a written reason.

GET and HEAD are the only methods permitted. A POST has to carry a justification for why the endpoint is read-only despite the verb, or registration itself throws. Anything undeclared is refused before a socket opens.

Three of the sixty-five tests exist purely to hold that line: no undeclared call, no unjustified write verb, and no secret surviving into any output. Every report also carries the audit as data, so the guarantee is checked on every run rather than asserted in a readme.

Some providers are deliberately not probed, and the report says which and why. A live Stripe key should not be exercised by a discovery tool even read-only, and testing an ssh key means connecting somewhere, which is not a read-only act.

GET
api.github.com/user
identity and token scopes, read from response headers
GET
api.github.com/user/repos
repository count via the Link header, one item per page
GET
registry.npmjs.org/-/whoami
identity behind the token
GET
api.npmjs.org/downloads/point/last-week/
public download counts, used to size the blast radius
GET
sts.amazonaws.com/?Action=GetCallerIdentity
identity only, the canonical read-only AWS call
GET
iam.amazonaws.com/?Action=SimulatePrincipalPolicy
evaluates a policy decision without performing the action
POST · THE ONLY ONE
/apis/authorization.k8s.io/v1/selfsubjectrulesreviews
SelfSubjectRulesReview is the API server's own permission oracle. The object is not persisted and no cluster state changes; the Kubernetes API has no GET form of this query. That sentence is stored on the declaration, and a test asserts it exists.
04REAL RUN · WHAT CHANGED THE DESIGN

A file scanner said the machine
was clean. It was not.

On the laptop this was built on: ~/.npmrc did not exist. ~/.aws/credentials did not exist. ~/.config/gh/hosts.yml held a username and no token. ~/.docker/config.json held credsStore and an empty auths object. Every one of those credentials was real and present. They were all in the login keychain.

The keychain is genuinely better than a dotfile, but better is not out of reach. A credential helper is a program that hands the secret to whoever asks in the right format, and the helpers are already on the keychain's access-control list, so they never prompt. An attacker with code execution as you does not defeat the keychain — they ask git for it. So the tool asks the same way, and scores the result accordingly.

9
credentials found on that machine, 7 distinct
4
confirmed revoked by asking the provider — old Slack tokens in shell history a scanner would have raised as urgent
989ms
whole run, 5 network calls, all GET, zero guard violations
0
secret-shaped strings in the written report, checked before the file is allowed to be written

Read-only means read-only, not invisible: every probe authenticates, so it shows up in the provider's audit log. That is usually what you want after a suspected leak, but it is not a stealthy operation. Unverifiable credentials are marked estimated and never presented as measured — an ssh key's real reach is whatever hosts trust it, which cannot be enumerated from the client.

Home