15
 min read
October 13, 2026
|
Updated: 

How Attackers Built Software an AI Would Recommend

Security Research

Software linked to the MicrosoftSystem64 malware cluster, which delivers a cross-platform remote access trojan (RAT) capable of executing commands, accessing files, and maintaining persistence, became credible enough to surface in LLM recommendations. We investigated how repositories connected to the malware campaign were made to look established, trustworthy, and worth installing, and why those signals matter when AI assistants help developers discover software.

Executive Summary

Installing new software has never been easier. An AI coding agent can search for a tool, evaluate a project, read its documentation, install it, and wire it into an application in one workflow.  That convenience raises the stakes on repository credibility. Attackers don't need to compromise an AI system. They only need to build software that looks legitimate enough for one to recommend.

In September 2026, we investigated a MicrosoftSystem64 linked supply chain campaign spanning at least 88 public GitHub repositories. The campaign delivered a cross-platform RAT through malicious npm dependency chains.

What made these repositories effective wasn't a new technique on its own, but rather the infrastructure built around those repositories. Attackers preserved real functionality, gave malicious dependencies plausible application uses, imported or fabricated development histories, and automated fork activity to make projects appear established and widely adopted.

In our testing, one campaign-linked repository surfaced unprompted in both ChatGPT and Google AI Overview during ordinary software discovery. This showed that these manufactured trust signals are exactly what AI-assisted discovery uses to decide what's worth recommending.

A different path into AI assisted discovery

In our earlier AgentBaiting research, we showed how AI assistants could discover malicious GitHub repositories, read attacker written instructions in their READMEs, and direct users toward malicious downloads.

The campaign we investigated here used a different path. The repositories could contain real, working software, while malicious code was introduced through their dependency chains. A developer or an AI coding agent could therefore install what looked like ordinary software without the malicious functionality being obvious from the application itself.

We took one of the repositories we had already linked to the malicious cluster: Cesarjoquin/shopify-mcp, an unaffiliated third party MCP server presented as an integration for Shopify, one of the world’s largest ecommerce platforms. We wanted to see whether it could surface during ordinary AI assisted software discovery. For ChatGPT, we opened a new incognito session without logging in, and started a fresh chat (GPT-5.6 Luna with High thinking). We did not mention the repository, the campaign, or provide any threat context. We simply asked: “I need an MCP package for Claude that can help manage a Shopify store. What are the best current options?” Cesarjoquin/shopify-mcp appeared among the top recommended options.

We repeated the experiment with Google in Incognito mode with Search customization turned off, searching: “shopify mcp server for Claude Desktop github”. Again, Cesarjoquin/shopify-mcp surfaced in the results.

Figure 1–2: ChatGPT and Google AI Overview searches surface the campaign linkedCesarjoquin/shopify-mcp repository without its name or any threat context being supplied. ChatGPT was tested in a logged out session using GPT-5.6 Luna with High thinking; Google was tested in Incognito mode with Search customization disabled.

The result raised a more interesting question than whether an AI system could surface a malicious repository: what made this repository look like a reasonable piece of software to recommend in the first place?

On the surface, Cesarjoquin/shopify-mcp looked like what someone searching for a Shopify MCP server would expect to find: detailed documentation and real working Shopify functionality. But one of its dependencies was ioredis-xyz, a Redis themed npm package in the MicrosoftSystem64 delivery chain. During our monitoring, that dependency changed to oscar-redis and later to oracle-redis. The carrier names rotated while the repository, documentation, and application functionality remained in place.

As we followed the campaign, we found more repositories positioned around AI and agent workflows, along with copied and repurposed projects, imported or generated development histories, automated fork networks that created the appearance of adoption, and malicious dependencies placed beside real application functionality that gave them an apparent reason to exist.

That shifted the investigation from the malicious packages themselves to the infrastructure built around the repositories.

From a malicious npm package to a much larger operation

MicrosoftSystem64 is capable of command execution, file access, persistence, and additional payload deployment. Earlier waves of the campaign, including malicious logging-themed npm packages, were documented by OX Security and JFrog. The name MicrosoftSystem64 comes from the persistence identity used by the malware across Windows, macOS, and Linux and is unrelated to Microsoft Corporation.

SafeDep later documented a newer delivery chain involving ioredis-xyz, a typosquat of the legitimate ioredis Redis client package. Their analysis showed how the chain used transitive dependencies and delayed activation, allowing a later SemVer compatible update to introduce the malicious payload without any further change to the originating repository. SafeDep traced this activity across 28 attacker-created GitHub repositories.

Figure 3: The campaign combined transitive dependencies with SemVer compatible updates

From there, we followed the campaign as its dependency infrastructure evolved across manifests, lockfiles, commit history, and repository relationships. As the top level dependency moved from ioredis-xyz to oscar-redis and later oracle-redis, the footprint expanded. As of September 20, 2026, we identified at least 88 public repositories connected to the campaign.

Figure 4: Category breakdown of the 88 campaign-linked repositories identified in our investigation. Categories overlap.

To understand why software tied to this campaign could look worth recommending, we looked at the signals surrounding the repositories themselves.

Real software, manufactured legitimacy

These were not empty repositories built around a malicious dependency. In multiple cases, attackers copied existing open source projects, preserved their functionality, and modified the copies in ways that gave the malicious dependency a plausible reason to exist.

Shopify MCP is a clear example. Before the added redis modifications, Cesarjoquin/shopify-mcp followed the GeLi2001/shopify-mcp lineage and contained no Redis dependency.

Figure 5: Observed September 17, Left — Before the Redis addition, Cesarjoquin/shopify-mcp still pointed to GeLi2001/shopify-mcp in its package metadata. Right — the upstream GeLi2001/shopify-mcp contained no Redis dependency.

Then the attacker added a Redis connection manager and token cache implementation and wired that cache directly into Shopify's OAuth flow. Redis now had an understandable purpose: persisting Shopify access tokens. That placed ioredis-xyz directly on the code path responsible for storing and restoring those tokens.

Figure 6:The added commit wires Redis into Shopify’s OAuth flow, using it to restore and persist access tokens and giving the newly introduced dependency a legitimate-looking application purpose.

We saw the same pattern across other campaign linked repositories. A reviewer or an LLM checking whether a suspicious dependency was actually used would find that it was, embedded in working application logic with an apparently legitimate purpose. Many repositories also contained ordinary project infrastructure such as tests, builds, and validation workflows.

Manufacturing developer credibility

A developer evaluating an unfamiliar repository might next look at the account behind it.

Figure 7:GitHub profile of Cesarjoquin, the account behind shopify-mcp.

At first glance, the GitHub profile behind Cesarjoquin/shopify-mcp looked established. The account dated back to April 2022, showed hundreds of contributions, and owned repositories with hundreds or thousands of forks.

The repository timeline told a different story: all 25 public repositories were created between June 24 and June 26, 2026.

Figure 8:Creation dates of Cesarjoquin’s 25 public repositories

Many nevertheless appeared to contain years of development history. We found matching upstream projects whose histories had been imported, while commit authorship was often rewritten under the Cesarjoquin identity.

Cesarjoquin/nix-config, for example, was created on June 24, 2026 but contained an init commit dated September 1, 2021 and attributed to Cesarjoquin. The matching upstream commit in mikeyobrien/nix-config had the same timestamp, message, and underlying file tree, but retained the original author.

Figure 9:The init commit in Cesarjoquin/nix-config (bottom) and its matching upstream commit in mikeyobrien/nix-config (top). The commits show the same date, message, and file changes, while the author identity differs.

Manufacturing a development narrative

Imported history was not the only way to create the appearance of maturity. Some repositories generated development history directly.

In hotbridgeLab/future-trading-ai-agent, one campaign repository, we found a bootstrap-commits.sh script that programmatically generated roughly 57 staged Git commits.

Figure 10: The preserved script defines a helper that commits each numbered stage, progresses from stage 1 through stage 57, and prints the resulting commit count. A later commit removed all 1,461 lines of the script while introducing ioredis-xyz and pretty-logger.

We observed similar synthetic histories elsewhere. In Stormeye85/robinhood-token-launcher, ten apparent development milestones were committed within just eleven seconds. We did not recover the same generation script there, so we cannot say the mechanism was identical, but the result was similar: development history itself became another credibility signal that could be constructed rather than earned.

Manufacturing popularity

A convincing history can make a repository look mature. Forks and stars can make it look adopted.

Across the 88 campaign linked repositories still publicly available on GitHub, we observed 9,881 stars and 65,681 forks. Roughly 6.6 forks for every star. 

Figure 11: Fork and star counts across campaign linked repositories.

That ratio alone does not prove manipulation, so we followed the forks. Across seven campaign-linked AI and MCP repositories, 664 of 673 consecutive fork intervals fell between 179 and 182 seconds. New forks were appearing almost exactly every three minutes.

Figure 12: Consecutive forks of UHolli/browser-mcp, repeatedly created about three minutes apart.

The ownership pattern was just as unusual. In Cesarjoquin/Marketing-Skills, 1,231 of 1,238 fork objects returned by GitHub were owned by just 22 organization accounts. Twenty one organizations held exactly 56 forks each, while one held 55.

Figure 13: Observed September 17,2026 Fork ownership for Cesarjoquin/Marketing-Skills, showing the near uniform distribution across 22 organizations.

The timing matched that structure. Forks appeared globally about every three minutes, while new forks within the same organization appeared roughly every 66 minutes. With 22 organizations in the network, that pattern is consistent with a simple round robin process rotating through one organization at a time.

The infrastructure continued creating forks after campaign dependencies had been introduced, preserving poisoned repository states in new copies. It also helped us connect additional repositories to the campaign.

Rotating the payload without rebuilding the lure

Once a repository had accumulated convincing history, documentation, and popularity signals, the surrounding infrastructure did not need to be rebuilt when a package name changed. The dependency could be replaced while the repository remained in place.

In dabberman456/coinbase-trading-api, the same dependency slot rotated from ioredis-om to ioredis-xyz, then oscar-redis, and finally oracle-redis, while the repository and its installation mechanism remained in place.

The repository was the durable distribution asset. The package name was disposable.

For defenders, a package name IOC can become stale quickly. Blocking or hunting for one known carrier may stop that package, while repositories that have moved to the next name will no longer match.

When discovery becomes execution

None of these techniques is new on its own. What stands out is the combination, and how it intersects with AI-assisted software discovery. The distance between “find me a tool” and “install it” can now be only a few prompts. That makes repository credibility more consequential. Convincing documentation, apparent development history, visible adoption, and working functionality can make a project look established before anyone inspects the dependency that will actually execute.

We cannot say which individual signal caused Cesarjoquin/shopify-mcp to surface, or whether the campaign was designed specifically to influence LLM recommendations. What we can show is that the repository had accumulated the same kinds of signals that make software look established and widely adopted and that it surfaced during ordinary AI assisted software discovery.

The attacker did not need to compromise the AI. It needed to build software the AI could reasonably recommend.

‍IOCs:

TypeIndicatorContext
npm packageioredis-xyz@5.11.2Top-level campaign carrier. Introduces redis-type-xyz@^1.10.5; does not itself contain the executing install hook.
npm packageredis-type-xyz@1.10.6Weaponized transitive carrier. Introduces ulid-xyz@^2.12.2.
npm packageulid-xyz@2.12.2Malicious payload package. Executes the MicrosoftSystem64-family payload through postinstall.
npm packageulid-xyz@2.12.3Malicious payload package; later payload generation with rotated C2 infrastructure.
npm packageoscar-redisLater campaign carrier; independently reported as malicious.
npm packageredis-type-intelPackage associated with the oscar-redis generation and independently reported as malicious.
npm packageoracle-redisLatest observed campaign carrier. Campaign linkage is confirmed, but its downstream payload path was not fully resolved during our investigation.
Historical npm packageioredis-osEarlier Redis-themed carrier observed before the migration to ioredis-xyz.
Historical npm packageos-ulid-voidEarlier payload-stage package preserved in campaign repository history.
C265.21.30.171:8010HTTP/WebSocket C2 decoded from ulid-xyz@2.12.2.
C295.216.232.162:8010HTTP/WebSocket C2 decoded from ulid-xyz@2.12.3.
Historical C2195.201.194.107:8010C2 recovered from the preserved os-ulid-void payload.
Windows persistence\MicrosoftSystem64Scheduled task name used by the payload.
Windows persistenceMicrosoftSystem64.vbsWindows persistence artifact.
macOS persistence~/Library/LaunchAgents/com.launchkeeper.MicrosoftSystem64.plistLaunchAgent persistence path.
Linux persistence~/.config/systemd/user/MicrosoftSystem64.servicesystemd user persistence path.
Host artifact.pkg-agent.lockLock file created in the temporary directory.
SHA-256a95cf5562a556ab60733fa3d5a24f42ce2ed4e67f81b1c959162475e93074b16ulid-xyz@2.12.2 npm tarball.
SHA-256a3c28435295fed4babdeefedcefdd0ed037ff24ed3ff363a49d080c2768d07f2payload.js from ulid-xyz@2.12.2.
SHA-2563e668d429988573ccece394a0e6140cb4a96ba65aef8a92edfb13ced5010a0c9ulid-xyz@2.12.3 npm tarball.
SHA-2563a9089e9db3650dd6d1584fae709022002dc34854b961abfb014a90f0a7c6a50payload.js from ulid-xyz@2.12.3.
SHA-256aa01a83c7a420c22a719b02ec327451ddd751ab5b189fd0127824ea43533b96aShared utils.js launcher from the malicious ulid-xyz versions.
SHA-25610f41901a3e5da8a9d1f64d6dd3ac504afbb4b1e43eae4635fea189c8a7d1727Preserved historical os-ulid-void payload.
Repository1canhhoa/sports-betting-toolboxPublic github repository linked to the campaign
Repositoryagutinbaigo28/financial-agent-apiPublic github repository linked to the campaign
Repositoryagutinbaigo28/trading-backtest-kitPublic github repository linked to the campaign
RepositoryAhmedHazem02/fifa-world-cup-2026-prediction-agentPublic github repository linked to the campaign
Repositoryaiengandrewm/algo-trading-platformPublic github repository linked to the campaign
Repositoryalgotrading-lab/ai-algotrading-agentPublic github repository linked to the campaign
Repositoryalgotrading-lab/coinbase-market-making-botPublic github repository linked to the campaign
RepositoryAlice53211/arc-fintech-appPublic github repository linked to the campaign
RepositoryAlice53211/auth-codex-pluginPublic github repository linked to the campaign
RepositoryAlinebm17/finance-api-toolPublic github repository linked to the campaign
RepositoryAlinebm17/trade-backtesting-enginePublic github repository linked to the campaign
Repositoryangieruiz17/claude-fintech-skillsPublic github repository linked to the campaign
Repositoryangieruiz17/codex-gpt-pluginPublic github repository linked to the campaign
RepositoryBaggaT236/AI-Trading-SkillsPublic github repository linked to the campaign
RepositoryBananefre/finance-budget-api-agentPublic github repository linked to the campaign
RepositoryBananefre/Stock-Market-appPublic github repository linked to the campaign
RepositoryBerliwu/world-cup-2026-match-prediction-enginePublic github repository linked to the campaign
RepositoryBerliwu/world-cup-match-scannerPublic github repository linked to the campaign
Repositoryccooddeerr/world-cup-2026-ai-predictorPublic github repository linked to the campaign
RepositoryCesarjoquin/Marketing-SkillsPublic github repository linked to the campaign
RepositoryCesarjoquin/shopify-mcpPublic github repository linked to the campaign
RepositoryChypherFish3r/coinbase-trading-botPublic github repository linked to the campaign
Repositorycontatomegasign/bybit-trading-apiPublic github repository linked to the campaign
Repositorycontatomegasign/finance-account-toolPublic github repository linked to the campaign
Repositorycryptosignalorg/crypto-ai-researchPublic github repository linked to the campaign
Repositorycryptosignalorg/crypto-signal-dashboardPublic github repository linked to the campaign
Repositorydabberman456/coinbase-trading-apiPublic github repository linked to the campaign
Repositorydabberman456/finance-mcp-appPublic github repository linked to the campaign
RepositoryDennis-bv/dex-trade-agent-kitPublic github repository linked to the campaign
RepositoryDennis-bv/financial-ai-toolsPublic github repository linked to the campaign
RepositoryDilshan-Liyanage/forex-trading-ai-agentPublic github repository linked to the campaign
Repositorydknight0120/ai-healthcarePublic github repository linked to the campaign
RepositoryDon-Uwe/ai-healthcare-agent-appPublic github repository linked to the campaign
RepositoryDon-Uwe/video-editor-ai-agentPublic github repository linked to the campaign
RepositoryElias569/fintech-appPublic github repository linked to the campaign
RepositoryElias569/fintech-dashboardPublic github repository linked to the campaign
RepositoryFR0ZON3/notion-mcpPublic github repository linked to the campaign
Repositoryh1papc11/healthcare-ai-agent-vaultPublic github repository linked to the campaign
Repositoryh1papc11/voice-mcp-agentPublic github repository linked to the campaign
RepositoryhotbridgeLab/future-trading-ai-agentPublic github repository linked to the campaign
RepositoryhotbridgeLab/mexc-future-agentPublic github repository linked to the campaign
Repositoryimchine/FinTech-SolutionPublic github repository linked to the campaign
Repositoryimchine/FinTech-WalletPublic github repository linked to the campaign
Repositoryjaipreet15/tradingview-mcpPublic github repository linked to the campaign
RepositoryJesusRS1/binance-trade-apiPublic github repository linked to the campaign
RepositoryJesusRS1/stock-trade-finance-apiPublic github repository linked to the campaign
Repositoryjinm29/ai-healthcare-appPublic github repository linked to the campaign
Repositoryjoaquimsilvadev/fifa-world-cup-prediction-agentPublic github repository linked to the campaign
Repositorykazelad/algo-trading-agentPublic github repository linked to the campaign
Repositorykazelad/prediction-market-trade-sdkPublic github repository linked to the campaign
RepositoryKingSparta69/chainlink-twap-researchPublic github repository linked to the campaign
RepositoryKORAYTEACHER/fintech-advisorPublic github repository linked to the campaign
Repositorylauramyol13/crypto-signal-agentPublic github repository linked to the campaign
Repositorylauramyol13/crypto-signal-dashboardPublic github repository linked to the campaign
RepositoryLeonardo20222/robinBundler-toolkitPublic github repository linked to the campaign
RepositoryMariusOTB/OpenTrade-AgentPublic github repository linked to the campaign
RepositoryMatchameleon/gpt-codex-pluginPublic github repository linked to the campaign
RepositoryMatchameleon/moneyclawPublic github repository linked to the campaign
Repositorymuratmula/ai-robinhood-chainPublic github repository linked to the campaign
Repositorynkosresearch/web3-casinoPublic github repository linked to the campaign
Repositorypamgarcia1993/robinhood-lp-botPublic github repository linked to the campaign
Repositorypifferologo/ai-agent-video-editorPublic github repository linked to the campaign
Repositorypokemon225/AI-HealthCare-AppPublic github repository linked to the campaign
Repositorypueschel88/Tradingview-MCPPublic github repository linked to the campaign
Repositoryserdaracy/Casino-Crash-Telegram-AppPublic github repository linked to the campaign
RepositorySignal-Execution-Labs/forex-trading-ai-agentPublic github repository linked to the campaign
RepositorySignal-Execution-Labs/mexc-future-agentPublic github repository linked to the campaign
Repositorysignalbetorg/coinbase-trading-agentPublic github repository linked to the campaign
Repositorysignalbetorg/crypto-signalPublic github repository linked to the campaign
RepositoryStormeye85/robinhood-token-bundlerPublic github repository linked to the campaign
RepositoryStormeye85/robinhood-token-launcherPublic github repository linked to the campaign
RepositoryStormeye85/robinhood-token-sniperPublic github repository linked to the campaign
Repositorytechnoir32/crypto-signal-agentPublic github repository linked to the campaign
Repositoryteraus111/solana-meteora-damm-v2-alpha-vault-bundlerPublic github repository linked to the campaign
Repositoryteraus111/web3-casinoPublic github repository linked to the campaign
RepositoryThorsten02041973/robinhood-cliPublic github repository linked to the campaign
Repositorytradinglabpremium/solana-twitter-token-trading-agentPublic github repository linked to the campaign
Repositorytradinglabpremium/sports-prediction-market-scannerPublic github repository linked to the campaign
RepositoryUHolli/ai-website-clonerPublic github repository linked to the campaign
RepositoryUHolli/browser-mcpPublic github repository linked to the campaign
RepositoryWeebapp003/shadcn-fintech-templatePublic github repository linked to the campaign
RepositoryWeebapp003/tradingview-mcpPublic github repository linked to the campaign
Repositorywhisdev/flash-loan-trading-botPublic github repository linked to the campaign
Repositorywhisdev/NBA-prediction-sports-bettingPublic github repository linked to the campaign
Repositorywhisdev/solana-meteora-damm-v2-alpha-vault-bundlerPublic github repository linked to the campaign
Repositorywhite-trade-loan/algo-trading-platformPublic github repository linked to the campaign
Repositorycloud-agents-cliPublic github repository linked to the campaign
Repositorysolana-meteora-damm-v2-alpha-vault-bundlerPublic github repository linked to the campaign

‍

‍

Ofek Ronen

Ofek is a Security Researcher at Island, where he combines a machine learning background with hands-on threat research to detect and disrupt emerging attacks. A graduate of Ben-Gurion University of the Negev with a degree in Information Systems Engineering, Ofek spent five years at Perception Point and Fortinet building ML-driven detection systems that surfaced hundreds of thousands of real-world threats daily. His work spans machine learning, email and identity security, threat detection, and phishing campaign analysis. At Island, Ofek applies this expertise to anticipate attacker behavior and strengthen browser security, helping raise the bar for how enterprises stay protected.