Report privately through GitHub's security advisory form. Please do not open a public issue for a vulnerability.
Include what the issue lets an attacker do, the affected version, and the smallest reproduction you have. You will get an acknowledgement within a week. This is a small library maintained by one person, so please read the scope below before reporting: several things that look like weaknesses are documented properties of what this library deliberately does not do.
The latest released version. There is no long-term support branch.
- The idempotency key reaching the wire malformed, or a key crossing between logical operations.
- A key ending up somewhere it should not: a log line, an exception message, an error response.
- The retry policy re-sending a request it should not, or failing to re-send one whose outcome is genuinely unknown.
- Anything the library retains in memory that it should not, or that grows without a bound.
These are documented design boundaries, not defects:
- The downstream ignoring the header. The library generates and carries the key; deduplication is
the downstream's job. If it does not honour
Idempotency-Key, there is no protection, and that is stated plainly in the README. IdempotencyKeys.ofbeing reversible for a low-entropy input. It is a documented SHA-256 over a documented encoding. An order id or a card number can be recovered from the digest by trying candidates; this is why the javadoc says not to feed it a card number, and whyIdempotencyKeys.hmacexists for keys that must also be unguessable.- A caller's own secret management for
IdempotencyKeys.hmac. The library never stores, logs or transports the secret. - A key minted per subscription not surviving a crash. Documented under "Durability boundary": a crash-safe key must be derived from the business identity and persisted by the caller.