Skip to content

Security Independently confirmed2 publishers 2 min read Published Updated

A pushed commit pulled MemTensor's npm and PyPI publish tokens out of its own release workflow

Three versions of MemTensor's MemOS Cloud plugin on npm and MemoryOS 2.0.34 on PyPI launch a Go stealer called sckit that reads the host environment and the user's prompt text, and the npm versions are still installable.

The Watch · Security desk

Send a correction

Illustration accompanying A pushed commit pulled MemTensor's npm and PyPI publish tokens out of its own release workflow
Generated illustration

What happened

  • Unknown actors compromised two legitimate MemTensor packages, one on npm and one on PyPI, to ship sckit, a Go credential stealer built in platform-specific form for Windows, Linux and macOS.
  • On npm, versions 0.1.21, 0.1.23 and 0.1.25 of @memtensor/memos-cloud-openclaw-plugin carry the payload, while versions 0.1.22 and 0.1.24 are clean.
  • The payload harvests credentials from cloud services, source-code platforms, package registries and developer tools, and exfiltrates them to skyleen[.]fr.
  • SafeDep says the attacker took the publish tokens from MemTensor's own GitHub Actions release pipelines by pushing commits that made the workflow hand over the npm or PyPI token.

Why it matters

  • Who's exposed exposure A CI job that resolved one of the malicious versions should be treated as having leaked whatever secrets were injected for that run. The rotation list is per pipeline, not per workstation.
  • What it limits constraint A pin to 0.1.24 is clean and a pin one release later is not, so triage has to be done per lockfile entry.
  • Who has to decide decision Prompt text left the host alongside the process environment, so responders have to decide how to treat whatever users typed into agents during recall; token rotation does not cover it.
  • What's now possible capability With templates for npm packages, Python packages and GitHub Actions workflows, every token the stealer collects becomes a means to publish the next poisoned release somewhere else.

"It collects credentials from developer machines and from CI jobs," SafeDep said. "It receives signed tasks from a command-and-control (C2) server. It also contains templates to install itself in npm packages, Python packages, and GitHub Actions workflows." [13][14] The reports also describe the implant as able to self-proliferate through GitHub and through direct npm and PyPI publishing. [12]

Nothing about the install looks wrong: the package name, the registry and the publishing pipeline are the project's own. [11] The only signal is the version number, and the malicious versions are scattered through the series. Of the six releases from 0.1.20 to 0.1.25, three carry the payload and the three clean ones sit between them. [3][21]

The recommended npm baseline, 0.1.20, is five releases behind 0.1.25, and on PyPI the baseline 2.0.33 is one release behind 2.0.34. [22] The malicious npm versions were still available for download when the advisories went out; PyPI has quarantined the MemoryOS project. [15][4]

StepSecurity said the npm versions "contain code that launches the payload when the agent gateway starts and whenever the plugin handles a memory-recall event", and that "The launcher passes the host process environment and, during recall, the user's prompt text directly to the malicious executable." [5][6] Recall happens before the agent processes a prompt, as part of the plugin's ordinary work, and the package declares integration points for the Clawdbot and Moltbot runtimes. [18] The PyPI trigger is cruder: import the memos module and the statically linked Go binary starts, with no agent run required. [7][23]

"This places the plugin inside a process that routinely handles user input and may inherit valuable credentials," StepSecurity said. [19] On a developer workstation, that process runs as a user account that can reach cloud configuration, source repositories, package publishing tokens and application secrets. [20] Socket's target list includes the files .npmrc, .vault-token, id_ecdsa, credentials.db, access_tokens.json and stored_tokens, environment variables such as NPM_TOKEN and PYPI_API_TOKEN, and keys for AWS, GitHub, GitLab, Hugging Face, HashiCorp Vault, Slack, Stripe and SendGrid. [9][10]

Whether any package outside MemTensor was published with tokens taken in this compromise was unclear as of the four reports. [17] The reporting does not date the publication of the malicious versions. [16] The advisories recommend pinning to 0.1.20 and 2.0.33, rotating exposed secrets, killing any sckit process, and blocking skyleen[.]fr and all its subdomains. [15]

What to watch

  • Whether any package outside MemTensor turns out to have been published with tokens taken in this compromise.
  • Whether npm removes 0.1.21, 0.1.23 and 0.1.25 as PyPI quarantined MemoryOS, or leaves them installable.
  • Whether the signed-task channel is seen issuing the self-install templates into third-party repositories and workflows.

Clarity's read

What the record supports and how the coverage leans. The claims behind it follow.

Reality

Evidence70
Adoption
Not scored
Hype gap+5
Incentives
Not scored
Confidence64
Why these scores

Claim ledger

Ranked by verification strength, evidence, and original report placement.

  1. [1]

    Unknown threat actors compromised two legitimate MemTensor packages across npm and the Python Package Index to push a platform-specific Go-based implant dubbed sckit, designed for Windows, Linux and macOS.

    Reported Supported Source: The Hacker NewsView cited source
  2. [2]

    The compromise is documented in reports from Aikido, SafeDep, Socket and StepSecurity.

    Reported SupportedView cited source
  3. [3]

    On npm, @memtensor/memos-cloud-openclaw-plugin versions 0.1.21, 0.1.23 and 0.1.25 are malicious; versions 0.1.22 and 0.1.24 are clean.

    Reported SupportedView cited source
  4. [4]

    On PyPI, MemoryOS version 2.0.34 is affected, and the project is currently quarantined on PyPI.

    Reported SupportedView cited source
  5. [5]

    StepSecurity said the malicious npm package versions include a "hidden Go payload into a legitimate AI memory integration. Versions 0.1.21, 0.1.23, and 0.1.25 contain code that launches the payload when the agent gateway starts and whenever the plugin handles a memory-recall event".

    Reported Supported Source: StepSecurityView cited source
  6. [6]

    StepSecurity said: "The launcher passes the host process environment and, during recall, the user's prompt text directly to the malicious executable."

    Reported Supported Source: StepSecurityView cited source
  7. [7]

    The PyPI package starts the statically-linked Go binary as soon as the "memos" module is imported into an application.

    Reported SupportedView cited source
  8. [8]

    In both ecosystems the end goal is a cross-platform credential-stealing payload capable of harvesting sensitive data from cloud services, source-code platforms, package registries and developer tools, exfiltrating the details to an external server, skyleen[.]fr.

    Reported SupportedView cited source
  9. [9]

    According to Socket, targets include npm, PyPI, GitHub, GitLab, AWS, Vault and SSH secrets, including the credential files .npmrc, .vault-token, id_ecdsa, credentials.db, access_tokens.json and stored_tokens.

    Reported Supported Source: SocketView cited source
  10. [10]

    According to Socket, the stealer also collects environment variables indicating tokens, passwords, API keys, private keys, session cookies and database or message-broker connection strings (for example NPM_TOKEN and PYPI_API_TOKEN), plus AWS access keys, GitHub and GitLab tokens, npm and PyPI tokens, Hugging Face, HashiCorp Vault, Slack, Stripe and SendGrid keys, and JWTs.

    Reported Supported Source: SocketView cited source
  11. [11]

    SafeDep said the attacker obtained the publish tokens from MemTensor's own GitHub Actions release pipelines by pushing commits that caused the workflow to hand over the npm or PyPI token.

    Reported Supported Source: SafeDepView cited source
  12. [12]

    Examination of the implant suggests it can function like a worm, self-proliferating through GitHub and direct npm and PyPI package publishing.

    Reported SupportedView cited source
  13. [13]

    "It collects credentials from developer machines and from CI jobs," SafeDep said.

    Reported Supported Source: SafeDepView cited source
  14. [14]

    SafeDep said: "It receives signed tasks from a command-and-control (C2) server. It also contains templates to install itself in npm packages, Python packages, and GitHub Actions workflows."

    Reported Supported Source: SafeDepView cited source
  15. [15]

    The malicious versions of the npm packages are still available for download, and the recommended response is to pin to a safe baseline version (0.1.20 for the npm package, 2.0.33 for the PyPI package), rotate exposed secrets, kill any sckit process, and block skyleen[.]fr and all its subdomains.

    Reported SupportedView cited source
  16. [16]

    The Hacker News report on the four advisories does not give dates for the publication of the malicious versions.

    Reported SupportedView cited source
  17. [17]

    As of the time of writing it is unclear whether packages other than MemTensor's are impacted by the compromise.

    Reported SupportedView cited source
  18. [18]

    StepSecurity said the MemOS Cloud plugin connects the OpenClaw agent runtime to a memory service, that its normal work includes recalling relevant memories before an agent processes a prompt and adding memories after a run, and that the package declares integration points for the Clawdbot and Moltbot runtimes.

    Reported Supported Source: StepSecurityView cited source
  19. [19]

    StepSecurity said: "This places the plugin inside a process that routinely handles user input and may inherit valuable credentials."

    Reported Supported Source: StepSecurityView cited source
  20. [20]

    StepSecurity said that on a developer workstation the same user account can have access to cloud configuration, source repositories, package publishing tokens and application secrets, and that in automation the process may receive credentials injected for a particular job.

    Reported Supported Source: StepSecurityView cited source
  21. [21]

    Of the six npm releases from 0.1.20 to 0.1.25, three (0.1.21, 0.1.23, 0.1.25) carry the payload and three (0.1.20, 0.1.22, 0.1.24) are clean, with clean releases interleaved between malicious ones.

    Derived Supported
  22. [22]

    The recommended npm baseline 0.1.20 is five releases behind the latest listed version 0.1.25, and the recommended PyPI baseline 2.0.33 is one release behind the quarantined 2.0.34.

    Derived Supported
  23. [23]

    The PyPI trigger fires on module import alone, while the npm trigger requires the agent gateway to start or the plugin to handle a memory-recall event.

    Derived Supported

Sources

2 independent publishers whose own reporting we read for this story.

  1. scworld.com

    1 article · September 24, 2026

    MemTensor npm, PyPI packages compromised with cross-platform credential stealer
  2. thehackernews.com

    1 article · September 23, 2026

    Compromised MemTensor Packages Deliver sckit Credential Stealer via npm and PyPI

Topics and entities