{"id":24416,"date":"2026-08-22T09:00:00","date_gmt":"2026-08-22T09:00:00","guid":{"rendered":"https:\/\/www.securitytoday.de\/?p=24416"},"modified":"2026-10-16T06:57:43","modified_gmt":"2026-10-16T06:57:43","slug":"arrayref-malware-jumps-into-the-build","status":"publish","type":"post","link":"https:\/\/www.securitytoday.de\/en\/2026\/08\/22\/arrayref-malware-jumps-into-the-build\/","title":{"rendered":"Arrayref: Malware enters the build"},"content":{"rendered":"<p style=\"color:#69d8ed;font-size:0.9em;margin:0 0 16px;padding:0;\">5 min read<\/p>\n<p><strong>On 20 August 2026, arrayref 0.3.10 appeared on crates.io, pulling in the proc-macro1 dependency. Its build script downloaded and launched an architecture-specific payload during compilation. The registry removed the version from the index after around 86 minutes; Nextron Systems had reported the incident.<\/strong><\/p>\n<div style=\"background:#003340;color:#fff;padding:32px 36px;margin:32px 0;border-radius:8px;\">\n<p style=\"color:#69d8ed;text-transform:uppercase;letter-spacing:0.08em;font-size:0.82em;font-weight:700;margin:0 0 16px;\">Key takeaways<\/p>\n<ul style=\"margin:0;padding-left:20px;line-height:1.7;\">\n<li style=\"margin-bottom:10px;\"><strong style=\"color:#69d8ed;\">arrayref 0.3.10 was on crates.io for 86 minutes.<\/strong> RustSec lists the case as RUSTSEC-2026-0260. The advisory reports 2,285 downloads of the affected version.<\/li>\n<li style=\"margin-bottom:10px;\"><strong style=\"color:#69d8ed;\">The malicious logic was in proc-macro1&#8217;s build script.<\/strong> Cargo builds declared dependencies even when the library code does not use them.<\/li>\n<li style=\"margin-bottom:0;\"><strong style=\"color:#69d8ed;\">crates.io removed the versions, and the account is suspended.<\/strong> Teams are checking lockfiles and Cargo caches and assessing build hosts used during the exposure window.<\/li>\n<\/ul>\n<\/div>\n<p style=\"border-top:1px solid rgba(230,227,218,0.14);border-bottom:1px solid rgba(230,227,218,0.14);padding:14px 0;margin:28px 0;font-size:0.92em;color:#b8c5ce;\"><strong style=\"color:#69d8ed;\">Related:<\/strong> <a href=\"https:\/\/www.securitytoday.de\/en\/2026\/06\/27\/supervisory-board-reporting-key-figures\/\">Five metrics the supervisory board actually understands<\/a> &nbsp;\u00b7&nbsp; <a href=\"https:\/\/www.securitytoday.de\/en\/2026\/06\/26\/essential-controls-when-reducing-security-tools\/\">Which controls must survive tool consolidation<\/a><\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">The malicious chain began in the manifest<\/h2>\n<p>The affected release was arrayref 0.3.10. The crate is a lightweight utility library for array references. The malicious logic sat outside this library code and arrived through the newly declared proc-macro1 dependency.<\/p>\n<p>Cargo resolves and builds dependencies from the manifest even when the project&#8217;s code does not call them. This explains the incident: an apparently unchanged utility library opened the malicious path once its manifest listed the additional dependency.<\/p>\n<p>In its secondary analysis, SafeDep describes proc-macro1 as a typosquat targeting a family of names associated with procedural macros. RustSec lists the case as RUSTSEC-2026-0260. According to the advisory, there is no patched successor to 0.3.10. It lists versions 0.3.5 to 0.3.9 as unaffected.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">The build became the execution point<\/h2>\n<p>According to Rust Security Response, proc-macro1&#8217;s build script downloaded and launched an architecture-specific payload during compilation. The attack did not depend on a runtime import in the finished binary. It depended on the build host, network access and the build process&#8217;s permissions.<\/p>\n<p>SafeDep&#8217;s secondary analysis describes the same sequence: a build dependency, a network download and local artifacts. According to the Rust project, execution took place in the build script.<\/p>\n<p>The investigation identified paths in temporary directories as indicators. On Unix-like systems, \/tmp\/rust-setup appears. On Windows, rust-setup.ps1 and rust-setup-launch.vbs appear in %TEMP%. These paths identify where to investigate. A path alone does not prove infection.<\/p>\n<p>Tenable also catalogs the issue as CVE-2026-77651. The Rust project sources reviewed and the RustSec entry do not mention this number.<\/p>\n<div data-element=\"definition_box\" style=\"background:#23261f;border:1px solid rgba(105,216,237,0.22);border-radius:10px;padding:20px 24px;margin:32px 0;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 2px 10px rgba(0,0,0,0.22);\">\n<p style=\"margin:0 0 8px;font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,monospace;font-size:0.72em;letter-spacing:0.12em;text-transform:uppercase;color:#69d8ed;\">Definition &middot; Build script<\/p>\n<p style=\"margin:0;color:#e6e3da;line-height:1.6;\">Cargo runs a dependency&#8217;s build script during compilation once the dependency is listed in the manifest. Whether the library code later calls that dependency is irrelevant.<\/p>\n<\/div>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Three crates, one compromised release process<\/h2>\n<p>Rust Security Response names three affected releases: arrayref 0.3.10, internment 0.8.7 and append-only-vec 0.1.9. RustSec separately records append-only-vec 0.1.9 as RUSTSEC-2026-0262. These three names represent compromised releases of established crates.<\/p>\n<p>These are distinct from the deleted malicious dependencies proc-macro1, proc-macro-en, aovine, arone, aronenao and tinymember. Those dependencies served to download and execute malicious code rather than act as legitimate successors.<\/p>\n<p>According to Rust Security Response, the arrayref account&#8217;s maintainer likely fell victim to a compromised machine or compromised credentials. The account was suspended as a precaution. This concerns control of the account and does not automatically implicate every downstream project.<\/p>\n<p>A third-party analysis by Wiz describes overlaps with previously observed campaigns; this establishes neither attribution nor widespread infection of Rust projects.<\/p>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">Caches and lockfiles reveal what is present<\/h2>\n<p>The registry figure measures distribution rather than damage. The current advisory reports 2,285 downloads of arrayref 0.3.10, less than ten percent of total download traffic to date. The figure counts registry fetches. It does not count executed build scripts or prove that everyone who downloaded the crate was compromised.<\/p>\n<p>The lockfile is the first place to check whether a project built the affected version. It records the version actually resolved. The local Cargo cache should also be checked against the same list: arrayref 0.3.10, append-only-vec 0.1.9, internment 0.8.7, plus proc-macro1, proc-macro-en, aovine, arone, aronenao and tinymember.<\/p>\n<p>A cache hit indicates local files without necessarily proving that build logic ran. An arrayref 0.3.10 lockfile entry shows that dependency resolution selected this version. Both findings warrant assessment of the build host.<\/p>\n<div data-element=\"checklist\" style=\"background:#23261f;border:1px solid rgba(105,216,237,0.22);border-radius:10px;padding:22px 24px;margin:32px 0;box-shadow:inset 0 1px 0 rgba(230,227,218,0.06),0 2px 10px rgba(0,0,0,0.22);\">\n<p style=\"margin:0 0 12px;font-family:'IBM Plex Mono',ui-monospace,SFMono-Regular,monospace;font-size:0.72em;letter-spacing:0.12em;text-transform:uppercase;color:#69d8ed;\">Cargo inventory checks<\/p>\n<ul style=\"margin:0;padding-left:0;list-style:none;\">\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Check the lockfile for arrayref 0.3.10, internment 0.8.7 and append-only-vec 0.1.9<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Search the Cargo cache for affected crates and deleted dependencies<\/li>\n<li style=\"margin:0 0 10px;padding-left:26px;position:relative;color:#e6e3da;line-height:1.5;\"><span style=\"position:absolute;left:0;color:#69d8ed;\">&#10003;<\/span>Include the build host, CI secrets and generated artifacts in the forensic assessment<\/li>\n<\/ul>\n<\/div>\n<h2 style=\"margin-top:48px;margin-bottom:18px;\">The 86-minute window does not close the case<\/h2>\n<p>The exposure window on crates.io was short. The release was available there for around 86 minutes. The report reached the Rust project on 20 August 2026 at 07:15 UTC. Removal from the index ends public availability; local caches, CI runners and previously generated artifacts remain relevant.<\/p>\n<p>Anyone who built during the relevant window should assess the affected hosts forensically. A build using the listed versions should trigger rotation of credentials, tokens, CI secrets and signing keys under the internal incident process, followed by rebuilding artifacts from a clean environment.<\/p>\n<p>Older versions up to 0.3.9 are listed as unaffected; according to the advisory, there is no patched 0.3.10. Anyone who downloaded the malicious version should revert to a version listed as unaffected while checking the host and secrets.<\/p>\n<p>Sources: Rust Security Response dated 20 August 2026, last updated on 21 August 2026; RustSec RUSTSEC-2026-0260 and RUSTSEC-2026-0262; technical analysis by SafeDep and Wiz.<\/p>\n<h2 style=\"padding-top:64px;margin-bottom:20px;\">Frequently asked questions<\/h2>\n<p class=\"st-faq-hint\">Each question is locked. Tap to unlock the answer.<\/p>\n<details>\n<summary><strong>Which version of arrayref is affected?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">RustSec identifies arrayref 0.3.10. The advisory lists the crate as unaffected up to 0.3.9. The local lockfile determines which version was actually built.<\/p>\n<\/details>\n<details>\n<summary><strong>Is updating the project itself enough?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">An update alone does not resolve the incident question. The cache, lockfile and build host must be checked together because the malicious logic ran during the build.<\/p>\n<\/details>\n<details>\n<summary><strong>Which other crates should we check?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">Rust names append-only-vec 0.1.9 and internment 0.8.7, plus the deleted names proc-macro1, proc-macro-en, aovine, arone, aronenao and tinymember.<\/p>\n<\/details>\n<details>\n<summary><strong>What should we do about an affected build host?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">The host undergoes forensic assessment. Depending on the findings, credentials, CI secrets and signing keys are rotated, and artifacts are rebuilt from a clean environment.<\/p>\n<\/details>\n<details>\n<summary><strong>Is there evidence of a widespread attack on all Rust projects?<\/strong><\/summary>\n<p style=\"margin:8px 0 4px 24px;color:#555;line-height:1.6;\">No. The registry reports 2,285 downloads of the affected arrayref version. This figure does not count executed malicious scripts or establish that all users were compromised.<\/p>\n<\/details>\n<p><!--ST-LOWER-CARDS lang=en--><\/p>\n<h3 style=\"margin:48px 0 18px;font-size:1.05em;font-weight:800;color:#e6e3da;line-height:1.2;\">Editor&#8217;s Picks<\/h3>\n<p><a href=\"https:\/\/www.securitytoday.de\/en\/2026\/08\/18\/microsoft-teams-android-path-traversal-attacker-code\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">Editor&#8217;s Pick<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Microsoft Teams: Android Path Traversal Runs Attacker Code<\/span><\/span><\/a><a href=\"https:\/\/www.securitytoday.de\/en\/2026\/07\/25\/what-is-a-supply-chain-attack-definition-and-defense\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">Editor&#8217;s Pick<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">What Is a Supply-Chain Attack? Definition and Defense<\/span><\/span><\/a><a href=\"https:\/\/www.securitytoday.de\/en\/2026\/07\/17\/cicd-published-asyncapi-botnet-loader\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#69d8ed;margin-bottom:5px;\">Editor&#8217;s Pick<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">CI\/CD Published AsyncAPI Botnet Loader<\/span><\/span><\/a><\/p>\n<h3 style=\"margin:48px 0 18px;font-size:1.05em;font-weight:800;color:#e6e3da;line-height:1.2;\">More from the MBF Media Network<\/h3>\n<p><a href=\"https:\/\/www.cloudmagazin.com\/en\/2026\/09\/03\/openai-terminates-cursors-model-access\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#0bb7fd;margin-bottom:5px;\">cloudmagazin<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">OpenAI Pulls the Plug on Cursor: Your Own Key as Plan B<\/span><\/span><\/a><a href=\"https:\/\/mybusinessfuture.com\/en\/windows-11-limits-ai-agent-access\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#aa8ac2;margin-bottom:5px;\">MyBusinessFuture<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">Windows 11 limits what AI agents can access<\/span><\/span><\/a><a href=\"https:\/\/www.digital-chiefs.de\/en\/ai-shifts-development-into-review-work-who-owns-sign-off\/\" style=\"display:flex;align-items:center;gap:14px;padding:12px 14px;margin:0 0 10px;background:#23261f;border:1px solid rgba(105,216,237,0.18);border-radius:12px;box-shadow:0 6px 18px rgba(0,0,0,0.22);text-decoration:none;color:#e6e3da;box-sizing:border-box;width:100%;\"><span style=\"flex:0 0 116px;aspect-ratio:16\/9;overflow:hidden;border-radius:8px;background:#111210;border:1px solid rgba(230,227,218,0.08);display:block;\"><span style=\"display:flex;align-items:center;justify-content:center;width:100%;height:100%;color:rgba(105,216,237,0.5);font-size:1.4em;\">&#9635;<\/span><\/span><span style=\"display:block;min-width:0;\"><span style=\"display:block;font-size:0.68em;font-weight:700;letter-spacing:0.1em;text-transform:uppercase;color:#e8828d;margin-bottom:5px;\">Digital Chiefs<\/span><span style=\"display:block;font-size:1.0em;font-weight:650;line-height:1.35;color:#e6e3da;overflow-wrap:anywhere;\">AI Shifts Development into Review Work. Who Owns Sign-off?<\/span><\/span><\/a><!--\/ST-LOWER-CARDS--><\/p>\n<p style=\"font-style:italic;text-align:right;font-size:0.85em;margin-top:8px;\">Image source: AI-generated (August 2026)<\/p>\n","protected":false},"excerpt":{"rendered":"Rust removes arrayref 0.3.10 after build-time malware: 86 minutes in the index, 2,285 downloads. What lockfiles, Cargo caches and CI must now show.","protected":false},"author":10,"featured_media":23328,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_yoast_wpseo_focuskw":"arrayref malware","_yoast_wpseo_title":"Arrayref: Malware enters the build","_yoast_wpseo_metadesc":"Rust removes arrayref 0.3.10 after build-time malware: 86 minutes in the index, 2,285 downloads. RustSec, lockfiles, Cargo caches and CI as checkpoints.","_yoast_wpseo_meta-robots-noindex":"","_yoast_wpseo_meta-robots-nofollow":"","_yoast_wpseo_meta-robots-adv":"","_yoast_wpseo_canonical":"","_yoast_wpseo_opengraph-title":"","_yoast_wpseo_opengraph-description":"","_yoast_wpseo_opengraph-image":"","_yoast_wpseo_opengraph-image-id":0,"_yoast_wpseo_twitter-title":"","_yoast_wpseo_twitter-description":"","_yoast_wpseo_twitter-image":"","_yoast_wpseo_twitter-image-id":0,"_evm_slot_owner":"","evm_cvss":0,"evm_risk":0,"evm_casefile":"","evm_primary_cve":"","evm_pin_until":0,"evm_external_preview_token":"","evm_external_preview_expires":"","_evm_translation_lang":"en","featured_post":0,"featured_post_sortierung":0,"_wp_old_slug":[],"footnotes":""},"categories":[263],"tags":[],"class_list":["post-24416","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-sicherheitslexikon-en"],"evm_reading_time_minutes":7,"wpml_language":"en","wpml_translation_of":23326,"_links":{"self":[{"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/posts\/24416","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/users\/10"}],"replies":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/comments?post=24416"}],"version-history":[{"count":7,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/posts\/24416\/revisions"}],"predecessor-version":[{"id":24991,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/posts\/24416\/revisions\/24991"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/media\/23328"}],"wp:attachment":[{"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/media?parent=24416"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/categories?post=24416"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.securitytoday.de\/en\/wp-json\/wp\/v2\/tags?post=24416"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}