Malicious code in internment (crates.io)
internment 0.8.7 was published to crates.io with malicious code that downloads and executes a remote binary at build time. The maintainer account (droundy) appears to have been compromised, consistent with a coordinated campaign affecting multiple crates on 2026-08-20. The malicious release has been removed from crates.io.
- Disclosed
- Last updated
- Blast radius
- All users who installed internment 0.8.7 from crates.io during the window of availability.
- Ecosystems
- Attack vectors
- Affected entities
- internment · 0.8.7
On 2026-08-20, a malicious version of the internment crate (0.8.7) was published to crates.io from the compromised maintainer account droundy. This release added a dependency on an attacker-controlled crate whose build script downloads and executes an architecture-specific remote binary at build time from the IP address 23.254.165.112:9089/, with 23.254.165.112:443 configured as a command-and-control address.
This incident is part of a coordinated campaign affecting multiple crates.io packages, including trojanized versions of arrayref and append-only-vec, all published from the same compromised maintainer account on the same date.
The malicious release has been removed from crates.io. Earlier versions of internment remain unaffected. The incident was credited to the OpenSSF's malicious-packages repository.
Indicators of compromise
- Packages
- internment
- IPs
- 23.254.165.112
Remediation
- Do not use internment 0.8.7; upgrade to an earlier unaffected version or wait for a patched release from the maintainer.
- Review build logs and system activity on any machines that built internment 0.8.7 during the window of availability for signs of compromise.
- If internment 0.8.7 was built and executed, assume the system may be compromised and perform a full security audit.
- Monitor the maintainer account droundy for further suspicious activity and consider temporarily avoiding packages from this account until the compromise is fully resolved.
Sources
- GitHub Advisory GHSA-mxq3-8c5w-crcm · GitHub Advisory Database
Cite this entry
"Malicious code in internment (crates.io)." supplychainattack.org, Supply Chain Attack Incident Catalog. Disclosed August 20, 2026; last updated August 21, 2026. https://supplychainattack.org/incident/malicious-code-in-internment-crates-io-1vv2sd
Suggest a correction
Found an error or have a newer source? Corrections to factual errors take priority over new entries.
Related incidents
- containedcritical
Malicious code in arrayref (crates.io)
arrayref 0.3.10 was published from a compromised maintainer account (droundy) with a malicious dependency on proc-macro1, which downloads and executes a remote binary at build time. The malicious release was removed from crates.io; earlier versions remain unaffected.
CargoMalicious maintainerCompromised package - containedcritical
Malicious code in append_only_vec (crates.io)
append-only-vec 0.1.9 was published to crates.io with malicious code that downloads and executes a remote binary at build time. The maintainer account (droundy) was compromised, also affecting trojanized releases of arrayref and internment. The malicious release has been removed from crates.io.
CargoCompromised packageMalicious maintainer - resolvedcritical
Malicious code in express-route-engine (npm)
The npm package express-route-engine contains malicious code that fetches and executes arbitrary JavaScript from a remote JSON store (https://api.jsonbin.io/v3/b/6a4f5816f5f4af5e29762c92) on require/import, with full Node.js privileges. The payload is mutable and can be changed without republishing the package.
npmCompromised packageMalicious maintainer - resolvedcritical
Malicious code in reqcrypt (PyPI)
The reqcrypt PyPI package contains intentionally hidden malicious code that executes arbitrary Python code from attacker-controlled HTTP responses. The PayloadProcessor unconditionally inspects every HTTP response for specific JSON keys and passes base64/gzip/zlib-decoded values to exec(), enabling remote code execution on any system using the library.
PyPICompromised packageMalicious maintainer