Open Redis and other unauthenticated databases: a quick exposure check
Redis, like several other popular data stores, ships out of the box with no password required to connect, on the explicit assumption that only trusted clients inside a trusted network will ever reach it — an assumption that quietly breaks the moment a server running Redis gets a public IP and the default firewall rule isn't as restrictive as everyone assumed.
By AdminKit team, Netbase JSC · Updated October 22, 2026
Why “no password by default” is a deliberate design choice, not an oversight
Redis’s own security documentation states its security model plainly: “Redis is designed to be accessed by trusted clients inside trusted environments,” adding that “usually it is not a good idea to expose the Redis instance directly to the internet or, in general, to an environment where untrusted clients can directly access the Redis TCP port.” The intended architecture is that an application server sits between untrusted end users and Redis, handling access control and input validation itself — Redis is the fast internal data layer, not the public-facing boundary.
That design is reasonable in its intended context. The problem is what happens when the “trusted environment” assumption silently fails: a server gets deployed to a cloud provider with a public IP and a broader-than-expected default firewall rule, a developer binds Redis to all interfaces instead of localhost during testing and the change never gets reverted, or a container’s port gets published externally by a deployment script nobody audited closely. In each case, Redis itself hasn’t changed — the trust boundary around it has quietly disappeared.
What’s actually at stake
Redis’s documentation doesn’t understate the consequences: “failing to protect the Redis port from the outside can have a big security impact because of the nature of Redis. For instance, a single FLUSHALL command can be used by an external attacker to delete the whole data set.” Beyond data destruction, an attacker with unrestricted command access can read every key in the database — which, depending on what your application stores there, might include session tokens, cached user data, or application state never meant to leave your own infrastructure.
The safety net Redis added, and its limits
Since version 3.2.0, Redis has shipped with protected mode: when the server is running with its default configuration (bound to all interfaces) and no password configured, it automatically refuses queries from anything other than the loopback interface, replying to other connections with an explanatory error instead of serving the request. It’s a genuinely useful default-safe behavior. But it’s exactly that — a default — and it stops applying the moment an administrator sets any password (even a weak one) or explicitly re-enables broader binding, at which point the instance is back to relying entirely on whatever authentication and network controls were actually configured.
A quick self-check
- Identify your public-facing IP with AdminKit’s what is my IP tool.
- Test whether your database port responds from outside — port 6379 for Redis, or the relevant default port for another unauthenticated-by-default store — using AdminKit’s port check tool, only against infrastructure you own or are authorized to test.
- If it responds, check whether a password is actually required before assuming the worst — a reachable port with strong authentication behind it is a very different risk than a reachable port with none.
- Fix in layers, not just one. Set a strong password (or configure Access Control Lists for more granular permissions), bind to a private interface rather than all interfaces, and add a firewall rule scoped to only the clients that need access — redundancy here is the point, since any single control failing shouldn’t leave the database fully open.
Why a shared or dynamic public IP doesn’t make this safer
If your server’s outward-facing IP is shared via Carrier-Grade NAT or changes periodically, that’s not a form of security for an exposed database — see our CGNAT guide for why a shared address can actually complicate incident response (telling your traffic apart from a neighbor’s) rather than hiding you from automated scanners, which check every reachable address regardless of who else might be behind it.
This guide is general information, not a security audit of your specific network — see our disclaimer for what AdminKit's guidance does and does not commit to.
Frequently asked questions
Why does Redis ship without a password by default?
Redis's own security documentation is explicit about this: it's "designed to be accessed by trusted clients inside trusted environments," with the expectation that an application layer, not Redis itself, mediates access from untrusted users. That's a reasonable default for a database meant to sit behind an application server, but it means the database itself has no credential requirement unless you add one.
What can someone do with an exposed, unauthenticated Redis instance?
Anything the Redis command set allows, with no restriction — read every key, write arbitrary data, or run commands like FLUSHALL to delete the entire dataset. Redis's own documentation warns specifically that failing to protect the port 'can have a big security impact because of the nature of Redis,' citing data-wiping as a concrete example.
Didn't Redis fix this with 'protected mode'?
Partially. Since version 3.2.0, Redis enters protected mode automatically when running with default configuration and no password set, refusing connections from anything but the loopback interface. It's a meaningful safety net, but an administrator can disable it, misconfigure the bind address, or add a password without realizing protected mode then stops applying the same restriction — it reduces the risk, it doesn't eliminate the underlying design.
Is this a Redis-specific problem, or does it apply to other databases too?
The pattern is common across data stores designed for speed and simplicity more than defense-in-depth — several NoSQL and in-memory databases have shipped with no-auth-by-default configurations over the years, and the same self-check logic (confirm whether it's reachable from outside, confirm whether it requires a credential) applies to any of them.
What's the fastest fix if I find my own instance exposed?
Set a strong password with Redis's AUTH mechanism or its newer Access Control Lists, bind the instance to a private or loopback interface instead of all interfaces, and add a firewall rule restricting the port to only the application servers that actually need it — all three together, not just one.
How do I check if my database port is reachable from the internet?
AdminKit's [port check](/tools/port-check/) tool can test whether a given port — 6379 for Redis, or the default port of another database — responds from outside your network, which answers the most urgent question before anything else: is this reachable by anyone who finds it.
Related tools
Want AdminKit to watch this for you?
Free checks tell you the state today. Protective DNS and monitoring tell you when it changes.