Skip to main content

FourIsNotRandom

Detection-only CLI (fourisnotrandom) that fingerprints software versions and TLS/CA configuration to report exposure to a small set of currently relevant advisories.

This tool performs read-only version/fingerprint checks only. It does not exploit, does not send attack payloads, and must only be run against systems you own or are authorized to assess.

What it checks

Area Advisories Detection methods
PHP CVE-2026-109618, CVE-2026-109619 Local php -v/php -i, HTTP headers, Docker/FS manifests, webroot app stacks
eMudhra CA CVE-2026-111943 / related distrust TLS chain digests, PEM/keystore files, Docker CA bundles, Go + certifi versions
GitLab CVE-2026-110264, CVE-2026-97229 Public /help or /api/v4/version (read-only)
LiteLLM Malicious 1.107.0 release Exact pin in pip env / requirements / lockfiles / Docker

No CIDR sweeps: every run requires an explicit host, URL, path, image name, or a targets file of discrete entries.

Install

python -m pip install -U pip
pip install -e ".[dev]"
fourisnotrandom --help

Auditing this tool's own dependencies

Run pip-audit against the pinned requirements file - not bare pip-audit:

pip-audit -r requirements.txt

A bare pip-audit run audits your entire environment and will also flag the venv's bootstrap pip package, which is unrelated to this tool's dependencies. Use pip-audit -r requirements.txt so findings reflect only what this project declares.

Usage

# PHP
fourisnotrandom php --local
fourisnotrandom php --local --php-bin /usr/bin/php8.3
fourisnotrandom php --url https://example.com/
fourisnotrandom php --fs /var/www/html

# eMudhra / toolchains
fourisnotrandom emudhra --host example.com
fourisnotrandom emudhra --path /etc/ssl/certs
fourisnotrandom emudhra --docker my-image:tag
fourisnotrandom emudhra --toolchains

# GitLab (both CVSS 10.0 CVEs evaluated separately)
fourisnotrandom gitlab --url https://gitlab.example.com

# LiteLLM exact compromised pin
fourisnotrandom litellm --env
fourisnotrandom litellm --path .
fourisnotrandom litellm --docker ghcr.io/berriai/litellm:v1.107.0

# Explicit target list only (global flags before the subcommand)
fourisnotrandom --format json all --targets-file targets.txt
fourisnotrandom --format json emudhra toolchains

Exit codes: 0 = no FAIL, 1 = at least one FAIL, 2 = tool/config error.

Advisory data (editable)

Bundled under src/fourisnotrandom/data/:

File Contents How to refresh
fixed_versions.yaml PHP floors, GitLab per-CVE floors, Go floors, certifi floor, LiteLLM pin Edit YAML; or pass --config PATH
compromised_hashes.json Compromised eMudhra intermediate digests Replace file or fourisnotrandom update-hashes --from PATH
php_apps.yaml CMS/webroot path fingerprints Edit YAML

Data provenance

  • PHP floors: PHP project security releases (8.2.35, 8.3.36, 8.4.27, 8.5.12). Branches ≤8.1 have no upstream fix.
  • GitLab: Official critical patch notes for CVE-2026-110264 (Oct 21) and CVE-2026-97229 (Oct 12). Both are reported separately so an Oct-12-only patch does not look “fully covered.”
  • eMudhra hashes: Certificate SHA-256 fingerprints from Cisco Talos “Compromised eMudhra intermediate certificates” (Oct 21, 2026), citing Mozilla Bugzilla 2083449. The scanner matches either full-cert SHA-256 or SPKI SHA-256 against the configured set (Talos publishes cert fingerprints; Go’s CVE-2026-111943 fix matches SPKI - dual match avoids assuming hash type after a refresh).
  • certifi: Floor 2026.10.18 (first release blocking compromised roots). 2026.10.19 restores some legitimate emSign roots (stability), not a security boundary.
  • Go: Fixed in 1.27.3 / 1.26.10 (CVE-2026-111943).
  • LiteLLM: Exact malicious PyPI/Docker release 1.107.0 only.
# Refresh eMudhra hash list from a JSON file with the same schema
fourisnotrandom update-hashes --from ./my-hashes.json

Safety

Read-only / authorized use only. This tool fingerprints versions and TLS/CA material. It does not exploit, does not send attack payloads, and must only be run against systems you own or are authorized to assess.

  • Fingerprints only: versions, headers, banners, cert digests, read-only php.ini values.
  • Does not send session.upload_progress exploits, memory-corruption probes, or any PoC payloads.
  • Does not scan networks you did not name explicitly.
  • Rejects CIDR ranges and bare wildcards - every target must be an explicit host, URL, or path.

Metadata

Release files for fourisnotrandom 0.1.1

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

Source distribution (sdist)

Source distribution for fourisnotrandom 0.1.1
File Size Uploaded Provenance Actions
fourisnotrandom-0.1.1.tar.gz 33.7 kB Without provenance Details for fourisnotrandom-0.1.1.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for fourisnotrandom 0.1.1
File Interpreter ABI Platform Actions
fourisnotrandom-0.1.1-py3-none-any.whl Python 3 none any Details for fourisnotrandom-0.1.1-py3-none-any.whl

Total release size: 67.5 kB

Release files / fourisnotrandom-0.1.1.tar.gz

Download URL fourisnotrandom-0.1.1.tar.gz
Size 33.7 kB
Tags Source
SHA-256 checksum
How to use checksums
66eb3817083bc13bc7881c125ef023e4cebcdbb8180b78534c978364ff829209
BLAKE2b-256 checksum
How to use checksums
a31b1f2b0a1ef838b9bc6976449d9c6f73d5d65b72517583954b98229962c841
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.4

Release files / fourisnotrandom-0.1.1-py3-none-any.whl

Download URL fourisnotrandom-0.1.1-py3-none-any.whl
Size 33.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e60e4d2bd158bf83f3b1e1be222b68260fa87e16cc4108ac9c6cc4df45554a46
BLAKE2b-256 checksum
How to use checksums
a47c4db9e394934b8add6e528a5e2da2dfeb4c1ce3455787655b01e6bb48d6aa
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.12.4

Security for fourisnotrandom 0.1.1

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.

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