Skip to main content
COSMICBYTEZLABS
NewsSecurityHOWTOsToolsStudyTraining
ProjectsChecklistsAI RankingsNewsletterStatusTagsAbout
Subscribe

Press Enter to search or Esc to close

News
Security
HOWTOs
Tools
Study
Training
Projects
Checklists
AI Rankings
Newsletter
Status
Tags
About
RSS Feed
Reading List
Subscribe

Stay in the Loop

Get the latest security alerts, tutorials, and tech insights delivered to your inbox.

Subscribe NowFree forever. No spam.
COSMICBYTEZLABS

Your trusted source for IT intelligence, cybersecurity insights, and hands-on technical guides.

429+ Articles
114+ Guides

CONTENT

  • Latest News
  • Security Alerts
  • HOWTOs
  • Projects
  • Exam Prep

RESOURCES

  • Search
  • Browse Tags
  • Newsletter Archive
  • Reading List
  • RSS Feed

COMPANY

  • About Us
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CosmicBytez Labs. All rights reserved.

System Status: Operational
  1. Home
  2. News
  3. GlassWorm ForceMemo: Stolen GitHub Tokens Used to Poison Hundreds of Python Repos
GlassWorm ForceMemo: Stolen GitHub Tokens Used to Poison Hundreds of Python Repos
NEWS

GlassWorm ForceMemo: Stolen GitHub Tokens Used to Poison Hundreds of Python Repos

The GlassWorm threat actor has launched a new sub-campaign called ForceMemo, using stolen GitHub tokens to silently force-push malware into hundreds of...

Dylan H.

News Desk

March 16, 2026
6 min read

GlassWorm Expands from VS Code to Python: ForceMemo Campaign Confirmed

The GlassWorm campaign — the self-propagating supply-chain worm first identified targeting VS Code extensions — has launched a new attack vector. Researchers at StepSecurity have confirmed a sub-campaign dubbed ForceMemo, active since March 8, 2026, in which the threat actor uses previously harvested GitHub developer tokens to perform silent force-push operations on hundreds of Python repositories.

The technique is unprecedented in documented supply-chain attacks: by rewriting Git history rather than opening pull requests, the injections leave no trace in GitHub's standard activity timeline, making them invisible to routine security reviews.


Campaign Overview

AttributeValue
Campaign nameForceMemo (GlassWorm sub-campaign)
First observedMarch 8, 2026
StatusActive and ongoing (as of March 16, 2026)
Attack methodForce-push via stolen GitHub tokens to rewrite history
Repos affected"Hundreds" of Python repositories (StepSecurity)
Broader GlassWorm151+ GitHub repos, 72+ Open VSX extensions
AttributionRussian-speaking threat actor (locale-skip gating)
C2 methodSolana blockchain dead-drop + Google Calendar fallback

How ForceMemo Works

Phase 1 — Token Harvesting

Tokens used in ForceMemo were harvested from developers previously infected by GlassWorm's Wave 1–4 VS Code extension campaigns, which silently exfiltrated GitHub OAuth tokens and personal access tokens from developer workstations. Those credentials are now being weaponized in a second wave.

Phase 2 — Silent Force-Push Injection

Using stolen tokens, the attacker performs a git push --force directly to the default branch of the target repository:

  • The force-push rewrites the most recent commit in place — preserving the original commit message, author name, and author date
  • The result is indistinguishable from a legitimate commit in GitHub's UI
  • No pull request is created, no new commit appears in the activity feed, and no contributor notification is triggered
  • StepSecurity describes this as the first documented supply-chain campaign to use this injection method

Phase 3 — Payload Execution

The injected Base64-encoded payload is appended to entry-point files — setup.py, main.py, or app.py. On execution it performs:

  1. Locale check: If the system locale is Russian (ru), execution aborts entirely
  2. Solana C2 lookup: Connects to api.mainnet-beta.solana.com and queries transaction memos on the hardcoded wallet address BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC for a Base64-encoded payload URL
  3. Google Calendar fallback: If the Solana RPC call fails, the malware queries a specific Calendar event and extracts the payload URL from the event title
  4. Second-stage payload delivery: The resolved URL delivers the full GlassWorm post-exploitation module

Targeted Project Types

The campaign specifically targets Python projects with broad install or download footprints:

  • Django web applications
  • Machine learning research codebases
  • Streamlit dashboard apps
  • PyPI packages — both published and in-development

Aikido Security assessed the campaign likely uses LLM-generated cover commits to make injections appear contextually appropriate across diverse codebases.


Why This Technique Is Dangerous

PropertyImpact
No visible commitDoes not appear in GitHub activity timeline
Preserved commit metadataAuthor, date, and message match original — indistinguishable from legitimate code
No PR / review processBypasses code review workflows entirely
Blockchain C2Payload URL cannot be taken down via domain seizure
Solana wallet linkSame wallet used in VS Code GlassWorm campaign — definitively same actor
Locale gatingRussian-locale systems skipped — protects actor's own environment

Indicators of Compromise

IOC TypeValue
Solana wallet (C2)BjVeAjPrSKFiingBn4vZvghsGj9KCE8AJVtbc9S8o8SC
Solana RPC endpointapi.mainnet-beta.solana.com
Injection targetssetup.py, main.py, app.py — Base64 blob appended at end of file
Known C2 IPs (VS Code waves)217.69.3[.]218, 199.247.10[.]166

Impact Assessment

Impact AreaDescription
Developer trustForce-pushed commits bypass review; infected code ships as "approved"
PyPI ecosystemPublished packages may contain injected payload reaching all downstream users
CI/CD pipelinesBuild systems that pull from GitHub may execute the malicious payload during builds
Credential exposureAny developer cloning or contributing to a poisoned repo risks secondary infection
Attribution linkSame Solana wallet as VSCode campaign confirms unified actor — GlassWorm is actively evolving

Recommendations

For Developers

  1. Audit recent commits on your repos for force-pushes — check git reflog for HEAD rewrites that weren't initiated by your team
  2. Rotate all GitHub tokens immediately if you previously installed any extensions identified as GlassWorm-infected (see prior advisories)
  3. Scan Python entry-point files (setup.py, main.py, app.py) for Base64 blobs appended at the end of the file
  4. Enable branch protection rules — require pull request reviews and disable force pushes on default branches

For Security Teams

  1. Monitor for Solana RPC calls from build or runtime environments — legitimate Python applications have no reason to connect to api.mainnet-beta.solana.com
  2. Audit GitHub organization token permissions and revoke any tokens not explicitly provisioned by your team
  3. Add git push --force detection to your GitHub audit log monitoring — force-pushes to default branches should trigger alerts
  4. Check CI/CD pipelines for unexpected network connections during build steps

For PyPI Maintainers

  1. Review recent releases for any unexpected changes to setup.py or entry-point files
  2. Yank compromised versions immediately if injection is confirmed
  3. Publish integrity checksums to help downstream users verify package authenticity

Key Takeaways

  1. GlassWorm has evolved from VS Code to Python repos — the campaign continues expanding its attack surface with new delivery methods
  2. ForceMemo's force-push technique is undocumented in prior supply chain attacks — standard security reviews and diff-watching tools won't catch it
  3. The Solana C2 mechanism makes payload URLs untakeable-down — even after discovery, the C2 infrastructure remains operational
  4. The same Russian-attribution indicators appear in ForceMemo — locale gating and Solana wallet links definitively connect both campaigns
  5. Hundreds of Python repos are already compromised — any project that imported from an affected dependency should be treated as potentially tainted
  6. Enable branch protection and force-push alerts — these simple controls would have blocked the attack vector entirely

Sources

  • The Hacker News — GlassWorm Attack Uses Stolen GitHub Tokens to Force-Push Malware Into Python Repos
  • StepSecurity — ForceMemo: Hundreds of GitHub Python Repos Compromised via Account Takeover and Force-Push
  • Aikido Security — Glassworm Returns: Invisible Unicode Malware Found in 150+ GitHub Repositories
  • SecurityWeek — ForceMemo: Python Repositories Compromised in GlassWorm Aftermath

Related Reading

  • GlassWorm Escalates: 72 Malicious Open VSX Extensions Use Transitive Dependency Abuse
  • UNC6426 nx npm Supply Chain Attack Breaches AWS Admin Access
#GlassWorm#Supply Chain#GitHub#Python#Malware#ForceMemo#Solana C2#Developer Security#The Hacker News

Related Articles

GlassWorm Escalates: 72 Malicious Open VSX Extensions Use

The GlassWorm self-propagating worm campaign has compromised 72 Open VSX extensions using invisible Unicode Private Use Area characters and a Solana...

7 min read

Backdoored Telnyx PyPI Package Pushes Malware Hidden in WAV Audio

Threat actors known as TeamPCP compromised the Telnyx Python package on PyPI, uploading malicious versions that conceal credential-stealing malware inside a WAV audio file using steganographic techniques.

4 min read

Trivy Security Scanner GitHub Actions Breached — 75 Tags Hijacked to Steal CI/CD Secrets

Trivy, Aqua Security's widely used open-source vulnerability scanner, was compromised a second time in a month. Attackers hijacked 75 GitHub Actions tags...

6 min read
Back to all News