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.3

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.3
File Size Uploaded Provenance Actions
fourisnotrandom-0.1.3.tar.gz 33.1 kB With provenance Details for fourisnotrandom-0.1.3.tar.gz

Built distribution (wheel)

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

Total release size: 66.7 kB

Release files / fourisnotrandom-0.1.3.tar.gz

Download URL fourisnotrandom-0.1.3.tar.gz
Size 33.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f47b4e93eb81fa5762ff41cea0e8db0e1cfbd9b1c4d567db44599c26008edbd2
BLAKE2b-256 checksum
How to use checksums
c5567a511b8c7c0ea239a01cdc823a69405447455d40807f2a390c924f937aa6
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

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

Download URL fourisnotrandom-0.1.3-py3-none-any.whl
Size 33.5 kB
Tags Python 3
SHA-256 checksum
How to use checksums
4bc5403578ae55ec1841af0bd8a38895dc47573b8e09392c7648a7775d12cd0a
BLAKE2b-256 checksum
How to use checksums
88f81efb73343ae713d31900ba892648089f4480437fc06ccc691b440bf42531
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.16

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.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

Security for fourisnotrandom 0.1.3

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.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for fourisnotrandom-0.1.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Oct 22, 2026.

Transparency log

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