Skip to content

Security: dahomey-technologies/rustis

SECURITY.md

Security policy

Reporting a vulnerability

Report privately, through GitHub's Report a vulnerability button on the Security tab. It opens a private advisory that only the maintainers can read.

Please do not open a public issue for a vulnerability. A public report is a disclosure, and it happens before there is a version to upgrade to.

Useful in a report: the rustis version, the Redis version and topology (standalone, cluster, sentinel), whether TLS is in use, and the shortest input or sequence that reproduces it.

Supported versions

The crate is pre-1.0. Fixes go to the latest published version; there are no maintained release branches.

What the crate treats as hostile input

Everything arriving over the connection. A reply is parsed before anything else knows whether the server is the one you meant, so the RESP layer assumes an attacker-controlled byte stream:

  • #![forbid(unsafe_code)], so a malformed or hostile reply cannot become a memory-safety bug.
  • The explicit-panic lint family is denied crate-wide, and indexing_slicing in resp/ and network/ — the two zones where a panic ends the connection rather than one command.
  • Frame size, nesting depth and collection length are bounded and configurable (Config::limits), so a crafted reply cannot drive an unbounded allocation or a stack overflow. The defaults are 128 levels of nesting, 512 MiB per bulk string and 128 M elements per collection.
  • Four cargo-fuzz targets exercise the frame parser, both deserializers and the chunked decode path, weekly in CI.

A report showing any of these failing — a panic, an unbounded allocation, a hang — on input a server can send is in scope, and so is anything that lets a connection read or write on behalf of another.

Out of scope: what a Redis server you have chosen to trust does with the data you send it, and configuration that disables the protections above.

There aren't any published security advisories