Fake CVE Exploits Delivering SmartLoader
Fourteen archives across ten repositories: launcher structure, hashes, detection results and limitations.
Cristian Chiriac
- Published:
- 2 November 2026
- Version:
- 1.0
- Last observed:
- 30 October 2026
- Dataset frozen:
- 1 November 2026
- Collection cut-off:
- 31 October 2026, 17:59 UTC
- Tracked items rechecked:
- 1 November 2026, 18:23 UTC
- Time zone
- All dates UTC.
Contents
Repositories presented as CVE proofs of concept distribute archives with launcher-and-interpreter layouts instead of exploits.
The research in 30 seconds
- What I found
- Repositories presented as CVE proofs of concept distribute archives with launcher-and-interpreter layouts instead of exploits.
- What this adds
- The research records hashes, identical archive-entry layouts with different archive hashes, and detection results for the examined set.
- Verified scope
- Ten repositories, 14 archives; 12 detected by VirusTotal and two without a record on 29 October.
- What remains unknown
- Archive contents were listed in memory. The scripts were not run or read; five archives have explicit SmartLoader labels.
The numbers, with their boundaries
Current count
10
Repository proof set
30 Oct 2026 · UTC
- Counts:
- All ten still carried an archive at a pinned commit.
Earlier snapshot or subset
12 / 14
Archives with detections
29 Oct 2026 · UTC
- Counts:
- 12 detected by 13–50 engines; five explicitly labelled SmartLoader. The two others were unknown.
Security people download proof-of-concept exploits to test their own systems. Ten GitHub repositories named after real 2024–2026 vulnerabilities offer exactly that. What they deliver is 14 zip archives with no exploit inside, only a tiny launcher script, a renamed interpreter and an obfuscated script file.
- 12 of the 14 archives are detected by 13 to 50 antivirus engines on VirusTotal, five of them explicitly as SmartLoader. The other two were unknown to VirusTotal on 29 October 2026.
- All 10 repositories were still public on 29 October, and all 10 still carried an archive at a pinned commit on 30 October.
- Five of the archives were first seen by VirusTotal in a single week, 6–13 October 2026.
I did not extract or run any archive. Each was read into memory inside an isolated virtual machine only to compute its SHA-256 and list the file names in it.
Where this stands (1 November 2026)
#The proven set was closed on 1 November 2026 with what had been found up to 31 October 2026, 17:59 UTC; repositories found after that are tracked separately and are not in these figures. The full proof pass at pinned commits ran on 30–31 October. On 1 November 2026, 18:23 UTC a read-only GitHub API recheck covered the 162 repositories, 73 accounts and 12 issues that are tracked one by one (operator repositories, Shai-Hulud accounts, phishing issues), not the whole set.
- Frozen: 10 repositories under 10 accounts.
- State: all public on 1 November, no new commits.
Key findings
#Scope and method
#Expand technical detail · complete record
| Step | What was done | Scope | Date (UTC) | Coverage limit |
|---|---|---|---|---|
| 1. Name search | Repositories named "CVE-2024", "CVE-2025", "CVE-2026", in three-day creation slices | 9,432 repositories, 4,626 CVE IDs (Jan 2025 – Oct 2026) | to 29 Oct 2026 | Repositories without a CVE in the name are missed |
| 2. Light pass | File tree and release assets of repositories with a risky profile | 809 repositories | 29 Oct 2026 | Profile heuristics |
| 3. Archive pass | SHA-256 and zip file list, in memory in an isolated VM | 51 archives in 45 repositories | 29 Oct 2026 | No extraction, no execution |
| 4. Reputation | VirusTotal hash lookups, no uploads | All archive hashes | 29 Oct 2026 | Vendor labels disagree |
| 5. State | Public, archived, disabled | 10 repositories | 29 Oct 2026, 07:38 | Single check |
At a glance
#| Count | Value | What it counts |
|---|---|---|
| CVE-named repositories searched | 9,432 | Name search, Jan 2025 – Oct 2026 |
| Malicious archives | 14 | Loader layout, in the repositories below |
| Repositories | 10 | Six with one archive, four with two |
| Detected on VirusTotal | 12 | 13–50 engines |
| Unknown to VirusTotal | 2 | Suspected by layout |
| Still public on 29 Oct 2026 | 10 of 10 |
This is a floor: only 45 of the 9,432 repositories had their archives examined.
What the lure looks like
#Full data table · 9 rows
| Feature | Observed in |
|---|---|
| Name cites a real or plausible CVE (Netlogon RCE, BitLocker bypass, 7-Zip CVE-2025-0411, CheckMK privilege escalation, MongoDB CVE-2025-14847, Linux "Copy Fail") | 10 of 10 |
| Generated, emoji-heavy README (9–21 emoji) | 9 of 10 |
| README tells the reader to download and run the tool | 9 of 10 |
| README links straight to the archive file | 5 of 10 |
| Archive in a random-word folder or one named images, assets, screenshots or keys | 10 of 10 |
Version-like archive name (3.9.zip, 2.7.zip, CV_1.6.zip) |
most |
| Any exploit source code | 0 of 10 |
| Owner with 1–2 public repositories | 8 of 10 |
| Owner account created in 2025–2026 | 5 of 10 |
- 01Search for a public exploitA repository named after the CVE ranks in GitHub search
- 02Download the "PoC"T1608.001README call to action; zip hidden in a random-word folder
- 03Run the launcherT1204.002A 22–360 byte .cmd or .bat starts a renamed interpreter
- 04Interpreter runs the scriptT1036.005The large .txt file is the obfuscated script (as described for SmartLoader; not read here)
- 05Final payloadReported elsewhere as Lumma or StealC; one label here says stealc; not observed
What is inside the archives
#Read from the file lists only:
| Layout | Archives | Contents |
|---|---|---|
| LuaJIT runner | 7 | A launcher script (Launcher.cmd, LaunchTool.cmd, Application.cmd; 22–360 bytes), lua51.dll, a renamed LuaJIT executable (lua.exe, luajit.exe, vm_s390x.exe, util64.exe, selector.exe) and a 180–360 KB .txt file |
| Small launcher + executable | 5 | Application.bat or similar, one ~760 KB executable (cli.exe, utils.exe, resolver.exe) and a 184–296 KB .txt file |
| Java-named runner | 2 | LaunchApp.cmd, java.exe and a 584 KB .txt file |
By public descriptions of SmartLoader, the .txt file is the obfuscated script the interpreter runs
[1, 3]. I did not read it. VirusTotal's own sandbox tags most of the detected archives with debugger
detection and long sleeps.
Twins. Two archives are each 487,683 bytes with identical entries (Application.bat 24 B, cli.exe
760,320 B, skey.txt 184,136 B). Two others are each 584,435 bytes with identical entries. Both pairs have
different hashes.
Reuse. VirusTotal also records one archive as game-unnamed-v-1.3-beta.4.zip and another as
App-OC-Streamlit-v2.0.zip. The CVE theme is one costume among several.
Detection status
#Full data table · 14 rows
| # | SHA-256 | Layout | Lure (CVE) | VirusTotal (29 Oct 2026) | First seen by VirusTotal |
|---|---|---|---|---|---|
| 1 | d2a999ab6b9213b0f259ea8a8bfb286b70be8cb9162b3b391081a48658732f49 |
launcher + exe | CVE-2026-41089 | 37, smartloader | 13 Oct 2026 |
| 2 | 828c9dcca32f5397ca21d868fef0010c0be198588bf9e9ae12e7a33582d11e37 |
launcher + exe | CVE-2026-45585 | 17, smartloader/stealc | 13 Oct 2026 |
| 3 | 3846ed3e0c6b84dce464f579c5f6d9fa3b2760db444873d5085fd6f778206c40 |
LuaJIT | CVE-2024-0670 | 16, runner | 6 Feb 2026 |
| 4 | 45a4085cfb047969e220345ac337a1d54f28a8bf060f4bdb8d9e1a7ec9a65bd3 |
LuaJIT | CVE-2024-0670 | 47, alevaul/runner | 29 Mar 2026 |
| 5 | 31b0cc276576c59d707b331c728b6748e37d61647cb94edfe12826a3dfb9cf0a |
LuaJIT | CVE-2025-0411 | 36, fakegit/runner | 17 Oct 2025 |
| 6 | f2c53c93555a2218da4ef27378abd2add47c8d2fac220197e7f05caae0047900 |
LuaJIT | CVE-2026-31431 | 40, smartloader/malgent | 6 Oct 2026 |
| 7 | 6a271032a6c7c669d81d8e8ffcdfb2f4cfb8fa6d1f8f1678f4d74f7f2863a075 |
LuaJIT | CVE-2026-2991 | not in VirusTotal | — |
| 8 | 245079f2529db7d3f8364b874ef58e982e6cff41b790ff86e6232dad996f2c4b |
launcher + exe | CVE-2026-42978 | 35, smartloader | 13 Oct 2026 |
| 9 | 16f1deb8ee1ab5cc161d1de8609ed0871bfe34e98f36e0faf692b16a0ec75fdc |
LuaJIT | CVE-2025-68921 | 21, stealer/runner | 12 Oct 2026 |
| 10 | 11604cdba937cc652f93ad8bc7a0eb8e626b8de0ff7bfa039933a273fc729355 |
Java-named | CVE-2025-68921 | 48, lazy/runner | 21 May 2026 |
| 11 | f60ab4b8a4d11cbb0fd9ae1572a5be16d598327c1229df6ea15750f1482b253e |
Java-named | CVE-2025-14847 | 50, lazy/runner | 21 May 2026 |
| 12 | e2990e4386c51f576069e75876ffc4156cca7dc9ab1cc889e224577dcb06e7cd |
LuaJIT | CVE-2025-14847 | 13, malgent | 11 Feb 2026 |
| 13 | b5a13c02bd4b88123b1d0330ab1a53dfbe3edaa07d3a31e517ec1bfbe6d4f931 |
launcher + exe | CVE-2026-45585 | not in VirusTotal | — |
| 14 | febbcad6ea7227091bcefaf3a3868c72fa4de1a575196730079be719c5623a36 |
launcher + exe | CVE-2026-20841 | 48, lazy/convagent | not recorded |
Calling all 14 "SmartLoader" is an inference for the nine without that label: they share the layout
described for it. The two unknown archives match detected siblings exactly. Number 13 has the same
760,320-byte cli.exe as numbers 1 and 8. Number 7 has the same 488,960-byte lua51.dll and
292,864-byte executable as number 4.
Also seen, not counted
#| Item | Why it is not counted |
|---|---|
Three PyArmor-protected "exploits" with a Dork.txt (one hash in two repositories) |
0 detections |
A password-protected archive with exploit.exe, an empty file whose name is the password, and a batch file |
0 detections; layout matches Kaspersky's Webrat description [6], not confirmed |
| A "crypter" with a client executable | Unknown to VirusTotal |
| One account with nine "CVE" repositories and no code | Never opened |
ATT&CK mapping
#Expand technical detail · complete record
| Technique | Name | Tactic | Evidence |
|---|---|---|---|
| T1608.001 | Upload Malware | Resource Development | Fourteen loader archives hosted in public GitHub repositories (observed) |
| T1036.005 | Match Legitimate Resource Name or Location | Stealth | Repositories named after real CVEs; interpreters renamed lua.exe, java.exe, cli.exe (observed) |
| T1204.002 | Malicious File | Execution | README asks the user to download and run the archive (observed) |
| T1497.001 | System Checks | Stealth | VirusTotal sandbox tags (debugger detection) on most detected archives; not this research's own analysis |
Evidence register
#Expand technical detail · complete record
SHA-256, size and zip central-directory entries of 51 archives in 45 repositories; 14 match the loader layout. Read in memory, never extracted.
Source: GitHub contents API inside an isolated VM · Collected 29 October 2026
Detection counts, labels, sandbox tags, first-seen dates and submission names for each archive hash; no uploads.
Source: VirusTotal API · Collected 29 October 2026
Confidence and alternative explanations
#| Inference | Confidence | Alternative explanation | Why it is less likely |
|---|---|---|---|
| The two unknown archives are malicious | High | Benign tools with the same layout | Byte-identical components shared with detected siblings |
| The family is SmartLoader | Moderate | Several loaders with similar layouts | Five explicit labels; layout matches public descriptions |
| Same operator as FakeGit | Low | Shared tooling or a copycat | Only one label and timing |
Timeline
#Earliest VirusTotal sighting among these archives
7-Zip CVE-2025-0411 lure
CheckMK lure archive first seen
Two Java-named runner archives first seen
FakeGit campaign reported
First of five archives seen in one week
6–13 October 2026
FakeGit restart reported
Last pushes on seven of the ten repositories begin
Until 14 October 2026
All ten repositories public
Trend Micro first documented SmartLoader through fake GitHub repositories in March 2025 [1].
Data notes and reconciliation
#Expand technical detail · complete record
| Item | Values seen | Explanation |
|---|---|---|
| Distinct CVE IDs | 4,626 vs 4,715 | Two regular expressions; the looser one accepts other separators |
| Layout groups | Earlier notes placed some archives in the wrong group | Re-classified strictly from the file lists: 7 / 5 / 2 |
| VirusTotal result for archive 14 | In notes, not in the raw lookup file | Reported as recorded; first-seen date unknown |
Defensive checks
#- A proof of concept without source code is not a proof of concept. Real exploits ship Python, C or Go. A precompiled Windows tool in a random folder is hostile until proven otherwise.
- Block by layout, not by hash: a tiny
.cmdor.batnext tolua51.dlland a renamed interpreter, or a lone executable next to a several-hundred-kilobyte.txt. - "Not found on VirusTotal" is not a clean result. Two of these archives were unknown.
- Run every third-party exploit in a disposable virtual machine with no saved credentials.
Indicators
#Expand technical detail · complete record
| Type | Value | Context | Lookups | Copy | |
|---|---|---|---|---|---|
| sha256 | d2a999ab6b9213b0f259ea8a8bfb286b70be8cb9162b3b391081a48658732f49 | CVE-2026-41089 lure; VT 37 Confidence: Confirmed malicious | |||
| sha256 | 828c9dcca32f5397ca21d868fef0010c0be198588bf9e9ae12e7a33582d11e37 | CVE-2026-45585 lure; VT 17 Confidence: Confirmed malicious | |||
| sha256 | 3846ed3e0c6b84dce464f579c5f6d9fa3b2760db444873d5085fd6f778206c40 | CVE-2024-0670 lure; VT 16 Confidence: Confirmed malicious | |||
| sha256 | 45a4085cfb047969e220345ac337a1d54f28a8bf060f4bdb8d9e1a7ec9a65bd3 | CVE-2024-0670 lure; VT 47 Confidence: Confirmed malicious | |||
| sha256 | 31b0cc276576c59d707b331c728b6748e37d61647cb94edfe12826a3dfb9cf0a | CVE-2025-0411 lure; VT 36 Confidence: Confirmed malicious | |||
| sha256 | f2c53c93555a2218da4ef27378abd2add47c8d2fac220197e7f05caae0047900 | CVE-2026-31431 lure; VT 40 Confidence: Confirmed malicious | |||
| sha256 | 6a271032a6c7c669d81d8e8ffcdfb2f4cfb8fa6d1f8f1678f4d74f7f2863a075 | CVE-2026-2991 lure; not in VirusTotal Confidence: High-confidence suspicious | |||
| sha256 | 245079f2529db7d3f8364b874ef58e982e6cff41b790ff86e6232dad996f2c4b | CVE-2026-42978 lure; VT 35 Confidence: Confirmed malicious | |||
| sha256 | 16f1deb8ee1ab5cc161d1de8609ed0871bfe34e98f36e0faf692b16a0ec75fdc | CVE-2025-68921 lure; VT 21 Confidence: Confirmed malicious | |||
| sha256 | 11604cdba937cc652f93ad8bc7a0eb8e626b8de0ff7bfa039933a273fc729355 | CVE-2025-68921 lure; VT 48 Confidence: Confirmed malicious | |||
| sha256 | f60ab4b8a4d11cbb0fd9ae1572a5be16d598327c1229df6ea15750f1482b253e | CVE-2025-14847 lure; VT 50 Confidence: Confirmed malicious | |||
| sha256 | e2990e4386c51f576069e75876ffc4156cca7dc9ab1cc889e224577dcb06e7cd | CVE-2025-14847 lure; VT 13 Confidence: Confirmed malicious | |||
| sha256 | b5a13c02bd4b88123b1d0330ab1a53dfbe3edaa07d3a31e517ec1bfbe6d4f931 | CVE-2026-45585 lure; not in VirusTotal Confidence: High-confidence suspicious | |||
| sha256 | febbcad6ea7227091bcefaf3a3868c72fa4de1a575196730079be719c5623a36 | CVE-2026-20841 lure; VT 48 Confidence: Confirmed malicious |
Archive file-name pattern: Launcher.cmd, LaunchTool.cmd, LaunchApp.cmd, Application.bat or
Application.cmd, plus lua51.dll and a renamed LuaJIT; or cli.exe, utils.exe, resolver.exe or
java.exe, plus one .txt of 180–600 KB.
| Type | Value | Context | Copy | |
|---|---|---|---|---|
| other | Gillarchnganasan2735 | GitHub user created 2026-05-01, live on 2 November 2026. Fake CVE proof-of-concept repository with a loader archive Confidence: Confirmed malicious | ||
| repository | Gillarchnganasan2735/CVE-2026-41089-Netlogon-RCE-PoC | Archive: VirusTotal 37 (trojan.smartloader/agentb) Confidence: Confirmed malicious | ||
| other | RustMacrosRecoil | GitHub organization created 2025-06-24, live on 2 November 2026. Fake CVE proof-of-concept repository with a loader archive Confidence: Confirmed malicious | ||
| repository | RustMacrosRecoil/7-Zip-CVE-2025-0411-POC | Archive: VirusTotal 36 (trojan.fakegit/runner) Confidence: Confirmed malicious | ||
| other | coactionbrittlemaidenhair51 | GitHub user created 2026-09-16, live on 2 November 2026. Fake CVE proof-of-concept repository with a loader archive Confidence: Confirmed malicious | ||
| repository | coactionbrittlemaidenhair51/CVE-2026-42978-PoC-Research | Archive: VirusTotal 35 (trojan.smartloader/agentb) Confidence: Confirmed malicious | ||
| other | 404godd | GitHub user created 2025-07-21, live on 2 November 2026. Fake CVE proof-of-concept repository with a loader archive Confidence: Confirmed malicious | ||
| repository | 404godd/CVE-2026-20841-PoC | Archive: VirusTotal 48 (lazy/convagent) Confidence: Confirmed malicious |
What was already public
#Expand technical detail · complete record
Sources were read on or before 29 October 2026. Each one also links to its Internet Archive record, which lists the captures that exist, in case the original moves or changes.
- Trend Micro, AI-assisted fake GitHub repositories and SmartLoader (March 2025): https://www.trendmicro.com/en_us/research/25/c/ai-assisted-fake-github-repositories.html (Internet Archive lookup)
- Gridinsoft, fake GitHub repositories with Lumma and SmartLoader: https://blog.gridinsoft.com/fake-github-repositories-lumma-smartloader/ (Internet Archive lookup)
- Island, AgentBaiting / FakeGit: https://www.island.io/blog/agentbaiting-how-800-fake-ai-skills-and-mcp-servers-delivered-malware (Internet Archive lookup)
- The Hacker News, FakeGit (20 July 2026): https://thehackernews.com/2026/07/fakegit-campaign-uses-7600-github.html (Internet Archive lookup)
- BleepingComputer on Apiiro, FakeGit returns (8 October 2026): https://www.bleepingcomputer.com/news/security/fakegit-malware-campaign-returns-with-17-610-malicious-github-repos/ (Internet Archive lookup)
- Kaspersky, Webrat in fake exploit repositories (December 2025): https://securelist.com/webrat-distributed-via-github/118555/ (Internet Archive lookup)
- Trend Micro, infostealer posing as the LDAPNightmare PoC (January 2025): https://www.trendmicro.com/en_us/research/25/a/information-stealer-masquerades-as-ldapnightmare-poc-exploit.html (Internet Archive lookup)
Not found in the reports I read, as of 29 October 2026:
- SmartLoader-style archives using CVE and exploit lures;
- these 14 hashes and the CVEs used as lures;
- the random-folder placement and the re-packed twins.
I did not check the IOC lists published by Island or Apiiro.
Limitations
#- No archive was extracted or run; behaviour comes from vendor labels and public reports.
- Vendor labels disagree on the family name.
- Only 45 of 9,432 repositories had their archives examined.
- Live state is a single check at 07:38 UTC on 29 October.
Investigation context
#This article is part of the GitHub threat investigation. Counts are a snapshot, not evidence that the code ran on a victim's machine. The shared methodology and proof rules explain inclusion, exclusions and the independent re-check.
Claims, evidence and limits
| Claim | Assessment | Evidence | Limit |
|---|---|---|---|
| Twelve fake-exploit archives are detected malware | Confidence: Confirmed malicious | E-SL-HASH, E-SL-VT | Not stated in the finding |
| Two archives are unknown to VirusTotal | Confidence: High-confidence suspicious | E-SL-HASH | Not stated in the finding |
| Same content, new hash | Confidence: Confirmed malicious | E-SL-HASH | Not stated in the finding |
| Link to the FakeGit operation | Confidence: Unconfirmed | E-SL-VT | Not stated in the finding |
Terms used on this page
- pinned commit
- A specific commit, identified by its hash, at which a repository was read. Every counted repository was proven at the default-branch commit recorded in the proof pass, so a later change to the repository does not change what was proven.
- proof pass
- The 30–31 October 2026 re-read of every candidate at a pinned commit under fixed inclusion rules, followed by an independent re-read of a random sample of 555 repositories through a different API.
All terms: glossary.
Corrections & discussion
Found an error, or have evidence that supports or contradicts a finding? Send a correction. Name the section and what you observed.