Reporting a vulnerability
This page describes polyjose 0.1.0 as designed. The library is in development and not published yet.
polyjose is a cryptographic library, so security reports are treated as top priority. The project’s security policy is SECURITY.md in the polyjose repository. This page restates it.
How to report
Section titled “How to report”Report privately through GitHub’s private vulnerability reporting: open Report a vulnerability on the repository’s Security tab. The report stays private to the maintainers and anyone they invite, and you, as its reporter, can follow it there.
Don’t open a public issue, discussion or pull request for a vulnerability. Doing so tells attackers about it before a fix exists.
A useful report says which polyjose version, platform and package you used, what you did, what happened, and why it’s a security problem. A minimal token, key or program that reproduces it helps most. Use keys you generated for the report, never production keys.
What happens next
Section titled “What happens next”As SECURITY.md states, reports are acknowledged within 72 hours, and the aim is to publish a fix and an advisory within 30 days.
In scope
Section titled “In scope”- signature or MAC bypass: a token that verifies when it shouldn’t
- algorithm confusion: a token verified or decrypted with an algorithm or key the caller didn’t allow
- key or plaintext disclosure
- timing side channels in polyjose’s own code
- panics on untrusted input
- memory issues in the Node.js, Web, Kotlin or Swift bindings
Known issues
Section titled “Known issues”These are already known and don’t need a report.
- RSA private-key operations. The
rsacrate is affected by RUSTSEC-2023-0071, and no fixed release exists yet. polyjose therefore supports RSA public-key operations only, and rejects RSA private keys withUnsupportedAlgorithm. What polyjose does not support explains the details. - No SHA-1 and no
RSA1_5. polyjose doesn’t implementRSA-OAEP(SHA-1) orRSA1_5, on purpose. UseRSA-OAEP-256orECDH-ES. See SHA-1 andRSA1_5. - Secrets in host memory. polyjose wipes the secrets it holds in Rust memory, but it can’t wipe JavaScript, JVM or Swift strings, and the Kotlin and Swift bindings leave some un-wiped copies in Rust memory. The security model lists exactly what is and isn’t wiped.
A report that one of these is worse than described is still welcome.