This project contains known security vulnerabilities. Find detailed information at the bottom.

Crate mail-auth

Dependencies

(24 total, 7 outdated, 2 insecure)

CrateRequiredLatestStatus
 aws-lc-rs^11.19.0up to date
 ed25519-dalek^33.0.0up to date
 flate2^1.11.1.11up to date
 getrandom^0.40.4.3up to date
 hashify^0.20.3.2out of date
 hickory-proto^0.260.26.3up to date
 hickory-resolver^0.260.26.3up to date
 idna^1.11.1.0up to date
 mail-builder^0.42.0.1out of date
 mail-parser^0.11.51.0.1out of date
 quick-xml^0.410.42.0out of date
 rand^0.8.50.10.3out of date
 reqwest^0.130.13.5up to date
 ring^0.170.17.14up to date
 rkyv^0.80.8.18up to date
 rsa ⚠️^0.9.80.10.0insecure
 rustls-pki-types^1.151.16.0up to date
 serde^1.01.0.229up to date
 serde_json^1.01.0.154up to date
 sha1^0.110.11.0up to date
 sha2^0.110.11.1up to date
 similar^33.2.1up to date
 web-time^11.1.0up to date
 zip ⚠️^8.59.5.1insecure

Dev dependencies

(3 total, all up-to-date)

CrateRequiredLatestStatus
 tempfile^33.27.0up to date
 testcontainers^0.280.28.0up to date
 tokio^1.511.54.1up to date

Security Vulnerabilities

rsa: Marvin Attack: potential key recovery through timing sidechannels

RUSTSEC-2023-0071

Impact

Due to a non-constant-time implementation, information about the private key is leaked through timing information which is observable over the network. An attacker may be able to use that information to recover the key.

Patches

The rsa v0.10 series includes a migration to crypto-bigint and constant-time mitigations recommended in draft-irtf-cfrg-rsa-guidance. Upgrading to this release should resolve all known constant-time issues.

References

This vulnerability was discovered as part of the "Marvin Attack", which revealed several implementations of RSA including OpenSSL had not properly mitigated timing sidechannel attacks.

zip: Insecure Preservation of SUID/SGID Bits during ZIP Extraction Leading to Potential Privilege Escalation

RUSTSEC-2026-0367

The zip crate preserves privileged Unix permission bits (SUID, SGID, and sticky bits) from ZIP external_attributes during extraction, instead of masking them to safe permission bits. If a privileged process (for example, root in an installer, CI/CD pipeline, or container build) extracts an attacker-controlled ZIP archive using ZipArchive::extract() or the stream extraction API, files can be created as setuid-root or setgid. This behavior allows the creation of SUID/SGID files during extraction, which can lead to local privilege escalation depending on the execution environment.

For further details see: https://github.com/zip-rs/zip2/security/advisories/GHSA-vv5m-jxxh-4627

zip: zip: `ZipArchive::extract` creates symbolic links whose attacker-controlled targets are outside the destination directory

RUSTSEC-2026-0368

In zip 9.0.0-pre2, ZipArchive::extract creates a symbolic link from an archive entry after validating only the output entry path. The link target bytes are passed directly to the platform symlink API, so a malicious archive can create an entry inside the destination that resolves to an attacker-chosen path outside it. This behavior was verified on macOS and Linux. On either platform, a subsequent application read or write through that extracted entry accesses the external target with the extracting process's permissions.

For further details see: https://github.com/zip-rs/zip2/security/advisories/GHSA-4v9h-p7m9-rh26

zip: ZipStreamReader::extract() and ZipArchive::extract() apply Unix permissions through symlinks without confining the target

RUSTSEC-2026-0369

ZipStreamReader::extract() applies Unix permissions through extracted symlinks without validating the symlink target stays within the destination

For further details see: https://github.com/zip-rs/zip2/security/advisories/GHSA-4684-h2q9-2vcp

zip: zip: `ZipArchive::extract` aborts the process on a symlink entry with a large declared size

RUSTSEC-2026-0429

ZipArchive::extract() sizes the symlink-target buffer from the uncompressed size declared in the central directory record, before reading a single byte of entry data:

let mut target = Vec::with_capacity(file.size() as usize);

Both inputs are attacker-controlled. ZipFile::size() returns uncompressed_size verbatim from the central directory, widened to a full u64 by a ZIP64 extended-information extra field, and is never cross-checked against the compressed size, the remaining archive length, or any platform-appropriate bound for a symlink target. ZipFile::is_symlink() is decided entirely by the S_IFLNK bit of the external-attributes field.

Vec::with_capacity() is infallible: when the reservation is refused it calls handle_alloc_error() and aborts the process. This is not a Rust panic. It is not caught by catch_unwind(), is unaffected by panic = "unwind", and is not contained by running the call on a worker thread.

A 112-byte archive is sufficient. One Stored entry flagged S_IFLNK with a ZIP64 field declaring uncompressed_size = 2^62 and a zero-byte payload makes extract() fail with:

memory allocation of 4611686018427387904 bytes failed
Aborted (core dumped)          # exit 134

The declared value only needs to exceed the host's address space, not its RAM: Vec::with_capacity() maps address space without touching pages, so resident memory stays flat and the abort happens on the refused reservation itself. Under a ulimit -v cap or a memory-constrained container the threshold drops far enough that a plain 32-bit uncompressed_size with no ZIP64 field suffices.

Applications that extract archives from untrusted input are affected on Unix and Windows targets with default features and no special configuration: upload handling, mail-attachment processing, package and artefact ingestion, backup restore and container-image layer extraction. No confidentiality or integrity property is affected: there is no memory unsafety, no out-of-bounds access, no disclosure and no data corruption.

The fix landed in zip-rs/zip2#984 and shipped in 9.0.0.

For further details see: https://github.com/zip-rs/zip2/security/advisories/GHSA-q7v9-x93c-xqv3