Skip to main content

php-radar

php-radar finds PHP you did not know you were running and tells you which installs are exposed to PHP2Shell (CVE-2026-109618 and CVE-2026-109619), two remote code execution bugs in the PHP runtime. It reads versions and configuration to work out each build, then checks the build against the releases that carry the fix. It never sends anything meant to trigger the bug, so it cannot crash a target.

Point it at a repository, a GitHub organization, an AWS account, a range of addresses, or a single machine. Every find gets a verdict and a confidence, and the exit code tells a script whether anything is exposed.

Install

Python 3.9 or later. The core uses only the standard library.

pip install git+https://github.com/AbacusNin/php-radar.git

For the AWS source, add the aws extra:

pip install "php-radar[aws] @ git+https://github.com/AbacusNin/php-radar.git"

From a clone, pip install . (or pip install ".[aws]") does the same, and python -m php_radar runs it without installing.

Usage

php-radar repo PATH                 # a checkout on disk
php-radar repo --github-org NAME    # every repo in a GitHub org
php-radar host                      # this machine
php-radar host --ssh USER@HOST      # a machine over ssh
php-radar cloud --provider aws      # an AWS account
php-radar network --scope FILE      # addresses you are cleared to probe

Add --format json or --format sarif for machine-readable output (the default is a console table), and --output FILE to write the report to a file.

Verdicts and exit codes

Each asset grades EXPOSED, LIKELY_PATCHED, INDETERMINATE (PHP is there but the build cannot be placed), or NOT_PHP, with a confidence that follows how directly the read saw the build. A host read is the firmest. A network read is only ever a lead.

The run exits 0 when nothing is exposed and the scan was complete, 1 when an asset is EXPOSED, 2 on a usage or scope error, and 3 when nothing is exposed but a read was skipped.

Worth knowing

  • It detects, it does not exploit. The repo, host, and cloud reads look at files, command output, and API answers. A network scan sends one plain GET per target and reads the reply. No code path triggers the bug.
  • A version can lie. A distribution can patch PHP and keep the old version number, so packaged builds are checked against a small data file of known-fixed builds. A build that is not listed grades INDETERMINATE instead of a guess.
  • Outside reads are leads. A banner can be hidden or forged, so a network read always grades low and wants a host read to confirm it.
  • The scope is the authorization boundary. php-radar reads what you name and nothing else. A network sweep refuses public ranges unless you pass --allow-public, rate-limits itself, and prints an authorization notice before it runs. Whether you may scan is on you.
  • A patched build still carries application risk. The fix closes the runtime bug. An application's own flaws, such as a file-inclusion sink, are a separate question.

License

Apache-2.0. See LICENSE and NOTICE.

Metadata

Release files for php-radar 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for php-radar 0.1.0
File Size Uploaded Provenance
php_radar-0.1.0.tar.gz 210.2 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for php-radar 0.1.0
File Interpreter ABI Platform
php_radar-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 289.2 kB

Release files / php_radar-0.1.0.tar.gz

Download URL php_radar-0.1.0.tar.gz
Size 210.2 kB
Tags Source
SHA-256 checksum
How to use checksums
6b11a8021809c862817d353f1f866eb5509c11f3d7850b579160b259ba0979da
BLAKE2b-256 checksum
How to use checksums
4c851f55e074ee21acaf9e7037578053558d46aa29dd3ab7ce23d2707e5dd06a
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Release files / php_radar-0.1.0-py3-none-any.whl

Download URL php_radar-0.1.0-py3-none-any.whl
Size 79.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
d7318107b4a6bf41f1defcc691262eff09cf522dfed191e7c838984231c2f32f
BLAKE2b-256 checksum
How to use checksums
c97cf510b1ab916bbf36024afb116e97dd221e4e1ae67b9698216ec074183144
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.3

Security for php-radar 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page