PHP2Shell (CVE-2026-109618, CVE-2026-109619): critical RCE, exploited in the wild. Fixed in 8.5.12 · 8.4.27 · 8.3.36 · 8.2.35. Read the advisory
Crypto & Solana

If PHP touched your keys, assume they leaked.

PHP2Shell gives an unauthenticated attacker code execution as your web worker — and one of the two bugs can also read freed worker memory. For a Solana dApp, trading dashboard, NFT mint or exchange tool running PHP, every secret that process could reach is now in scope: hot-wallet keys, RPC provider keys, exchange API secrets, and any mnemonic in the environment.

Patch first, then treat keys as compromised.

Upgrading stops new break-ins. It does not un-leak a secret that was already readable by a vulnerable worker. If your PHP tier could read a signing key or API secret, rotate it.

Blast radius

Why crypto teams are exposed

PHP2Shell is two critical (CVSS 9.2), unauthenticated remote-code-execution bugs in the PHP engine itself, fixed on 21 October 2026 and exploited in the wild before the patch shipped. They hit any web-facing PHP worker, whatever framework sits on top.

Where the secret inventory comes from, not the advisory.

The advisories describe the impact as code execution and memory disclosure as the web worker. They do not publish a list of what secrets exist on your box — that inventory is yours. The rule of thumb below is ours: if the PHP process could read it, an attacker running as that process could read it too.

    Incident response

    What to do now, in order

    Work top to bottom. Steps 1–2 stop the bleeding; step 3 assumes the keys already leaked; steps 4–5 confirm and contain. Tick items off as you go — the list is stored only in this browser.

      Local scanner

      Find keys that should never have been on the server

      Drop a .env, a keypair file, or a whole repo folder. Shellproof finds committed Solana keypairs, BIP39 seed phrases, and RPC / exchange API keys. Keypairs show the public address so you know which wallet to rotate; every secret itself stays masked.

      Everything runs in your browser.

      Files are read with the local File API and scanned on this page. Nothing you drop is uploaded, logged, or sent anywhere. Reload the page and it is gone.

      Drop files or a folder here
      or choose below · scanned locally, never uploaded

      Read-only check

      Has a possibly-compromised wallet moved?

      Enter a Solana address to list its most recent transactions straight from an RPC node, then turn on Watch to keep checking every 60 seconds while this tab is open. Each new transaction is marked when the wallet itself signed it — that needs the private key, so a signature you did not make means someone else has it. This is a read-only lookup (getSignaturesForAddress, getTransaction) — Shellproof never builds, signs or sends a transaction.

      The default is PublicNode's free endpoint, which answers browser requests but keeps only the last few days of history. For older activity, paste your own RPC URL or run shellproof wallet ADDRESS. api.mainnet-beta.solana.com refuses requests from browsers.

      Read-only check

      Can someone else spend your tokens?

      A token delegate (an “approval”) can move up to an approved amount out of a token account without the owner signing. Enter a wallet address to list every spl-token and Token-2022 account that still has one. This only reads (getTokenAccountsByOwner); revoking is done from your own wallet.

      Why this needs your own RPC URL

      The free public endpoints refuse this lookup from a browser: api.mainnet-beta.solana.com blocks every browser request, and PublicNode blocks getTokenAccountsByOwner. Use the RPC URL from your provider or your own node. It is sent only to that endpoint and is not saved. No RPC URL? shellproof delegates ADDRESS runs the same check from a terminal against the public endpoint.

      Hardening

      Keep private keys off the web server

      Once you have patched and rotated, change the architecture so the next RCE cannot reach a signing key at all.

      Server-side agent wallets are the sharpest edge.

      A non-custodial bot that signs with a key held on the server — a market-making loop, an auto-claimer, a mint cron — keeps a live signing key within reach of the PHP worker. Those keys are the first thing to move behind a signer service, and the first to rotate after an incident.

      Run the same checks on your host

      The CLI scans your whole server for exposed keys and signs of compromise. shellproof wallet ADDRESS --watch watches a wallet from a server or cron job and can post to Slack or Discord, and shellproof delegates ADDRESS lists token approvals.