title: Malicious AI Skill / MCP Server Package Structure (AgentBaiting / FakeGit)
id: ATR-2026-02405
rule_version: 1
status: experimental
description: |
  Detects AI Skill and MCP server packages that carry the AgentBaiting / FakeGit malware-distribution structure reported by Island on 2026-07-20: approximately 7,600 malicious GitHub repositories (about 6,600 throwaway accounts), 800+ of them positioned as Skills or MCP servers for Gmail, WhatsApp, Databricks, Jenkins and Docker, listed across 600+ entries on public registries (LobeHub, Glama, MCP.so, MCP Market) and downloaded over 14 million times. The shipped archive contains a small .cmd/.bat launcher, a renamed copy of the LuaJIT 2.1.0-beta3 runtime, and an obfuscated Lua program masquerading as a text/icon/license/data file (observed: "start luau.exe ico64.txt" from application.cmd), which loads SmartLoader and then the StealC infostealer, persists via scheduled tasks under %LOCALAPPDATA%, and resolves its C2 address from a Polygon smart contract. The novel delivery vector is AgentBaiting - a coding agent searching for a Skill or MCP server surfaces the attacker repository on its own and relays the attacker-authored README to the user as legitimate setup documentation (Island reproduced this with Claude Code, Google Gemini and ChatGPT). Detection targets the artefacts the attacker actually ships: the Windows launcher command line, the bundled Lua runtime alongside the launcher or archive, README install instructions that coach the reader through SmartScreen / Mark-of-the-Web and antivirus warnings, a GitHub Releases binary presented as the install path for a claimed Skill / MCP server, an MCP client config whose server entry point is a bundled Windows launcher instead of a package-manager runtime, and the published campaign IOCs. CWE-506 (Embedded Malicious Code), CWE-494 (Download of Code Without Integrity Check), CWE-1357 (Reliance on Insufficiently Trustworthy Component).
author: ATR Community
date: 2026/07/28
schema_version: '0.1'
detection_tier: pattern
maturity: test
severity: critical
references:
  owasp_llm:
    - LLM03:2025
    - LLM06:2025
  owasp_agentic:
    - ASI05:2026
  mitre_atlas:
    - AML.T0010 - AI Supply Chain Compromise
    - AML.T0011 - User Execution
  mitre_attack:
    - T1195.002 - Compromise Software Supply Chain
    - 'T1204.002 - User Execution: Malicious File'
    - 'T1036.008 - Masquerading: Masquerade File Type'
    - 'T1053.005 - Scheduled Task/Job: Scheduled Task'
  external:
    - https://www.island.io/blog/agentbaiting-how-800-fake-ai-skills-and-mcp-servers-delivered-malware
    - https://labs.cloudsecurityalliance.org/research/csa-research-note-fakegit-agentbaiting-mcp-supply-chain-2026/
metadata_provenance:
  mitre_atlas: human-reviewed
  mitre_attack: human-reviewed
  owasp_llm: human-reviewed
  owasp_agentic: human-reviewed
compliance:
  eu_ai_act:
    - article: '15'
      context: 'A Skill or MCP server package whose install path is an unsigned Windows launcher bundled with a renamed script runtime defeats the accuracy, robustness and cybersecurity duties of Article 15: the deploying organisation cannot attest what code the agent toolchain actually executes. This rule provides the detection evidence that such a component was rejected before it entered the agent supply chain.'
      strength: primary
    - article: '9'
      context: Article 9 risk management must record agent-discovered capability packages as an entry vector. AgentBaiting makes the agent itself the delivery channel - the model surfaces the attacker repository and relays its README as setup guidance - so the risk register must treat unattended Skill/MCP acquisition as a distinct, continuously monitored hazard rather than a generic third-party download risk.
      strength: primary
  nist_ai_rmf:
    - function: Govern
      subcategory: GV.6.1
      context: GV.6.1 supplier risk policy must cover AI capability registries (LobeHub, Glama, MCP.so, MCP Market) as third-party suppliers. This rule enforces that policy at acquisition time by rejecting packages that ship a Windows launcher plus a renamed Lua runtime instead of a verifiable package-manager artefact.
      strength: primary
    - function: Map
      subcategory: MP.5.1
      context: MP.5.1 requires the likelihood and magnitude of identified risks to be characterised. The FakeGit campaign gives measured magnitude - 800+ fake Skill/MCP listings and 14M+ downloads - so agent-discovered capability packages must be mapped as a high-likelihood, high-impact supply-chain risk rather than a theoretical one.
      strength: primary
    - function: Manage
      subcategory: MG.3.1
      context: MG.3.1 mandates that third-party risks be managed before use. Quarantining a candidate Skill or MCP server whose README coaches the operator past SmartScreen or antivirus warnings is the concrete risk treatment for this technique.
      strength: primary
    - function: Measure
      subcategory: MS.2.7
      context: MS.2.7 requires AI system security and resilience to be evaluated and documented. Scanning every candidate Skill/MCP package for the AgentBaiting loader structure produces the documented pre-install security evaluation this subcategory expects.
      strength: secondary
  iso_42001:
    - clause: '8.1'
      context: Clause 8.1 operational control over externally provided processes and products applies directly to Skills and MCP servers pulled from public registries. This rule is the operational control that blocks an externally provided AI component whose distribution shape matches a known malware loader.
      strength: primary
    - clause: '8.3'
      context: 'Clause 8.3 AI risk treatment is implemented here as an acquisition-time gate: the identified risk (agent-mediated installation of a trojanised capability package) is treated by quarantining the artefact and routing it to human review before any executable is run.'
      strength: secondary
tags:
  category: skill-compromise
  subcategory: malicious-package-structure
  scan_target: skill
  confidence: high
agent_source:
  type: skill_lifecycle
  framework:
    - any
  provider:
    - any
detection:
  condition: any
  method: pattern
  false_positives:
    - Threat-intelligence write-ups, IOC feeds, YARA/Sigma rule sets and incident reports that quote the published FakeGit hashes, repository slugs or archive names verbatim will match Layer 6 by design.
    - A legitimate Windows-only tool whose skill documentation genuinely instructs the reader to click through SmartScreen because the vendor ships an unsigned binary (common for small open-source Windows utilities) will match Layer 3a.
    - A skill about Lua/LuaJIT development or game modding that lists luajit.exe or lua51.dll next to a .bat build script or a release .zip will match Layer 2.
    - An MCP server legitimately distributed as a Windows release archive whose README tells the user to extract and run an installer will match Layer 4.
    - Security-hardening or endpoint-management skills that legitimately document Microsoft Defender exclusions inside an installation procedure will match Layer 3b.
    - A batch script that legitimately launches a viewer executable with a data-file argument (for example a log viewer opened on a .log file) will match Layer 1.
  conditions:
    - field: content
      operator: regex
      value: (?i)(?:^|[\r\n>&|;\x60\[(])[ \t]*(?:@[ \t]*)?(?:start|call)[ \t]+(?:/[a-z]+[ \t]+)?"?[\w.\-]{1,40}\.exe"?[ \t]+"?[\w.\-]{1,40}\.(?:txt|ico|log|dat|bin|nfo|lic|license|png|jpe?g|gif|rtf)"?
      description: Windows .cmd/.bat launcher runs a bundled EXE with a disguised data-file payload as its only argument - FakeGit loader command line
    - field: content
      operator: regex
      value: (?i)(?:(?:luajit|luau|lua5[1-4])\.(?:exe|dll)[\s\S]{0,300}(?:\.cmd\b|\.bat\b|\.zip\b|releases/(?:download|latest))|(?:\.cmd\b|\.bat\b|\.zip\b|releases/(?:download|latest))[\s\S]{0,300}(?:luajit|luau|lua5[1-4])\.(?:exe|dll))
      description: Lua/LuaJIT runtime binary bundled alongside a Windows launcher or release archive inside an AI capability package - AgentBaiting loader chain component
    - field: content
      operator: regex
      value: (?i)(?:more\s+info[\s\S]{0,160}run\s+anyway|run\s+anyway[\s\S]{0,160}(?:security|smartscreen|defender|warning|prompt)|windows\s+protected\s+your\s+pc|smartscreen[\s\S]{0,160}(?:bypass|ignore|run\s+anyway|proceed))
      description: Setup instructions tell the operator to click through the Windows SmartScreen / Mark-of-the-Web execution warning - attacker-authored README coaching
    - field: content
      operator: regex
      value: (?i)(?:(?:install|setup|download|before\s+running|first\s+run|launch)[\s\S]{0,200}(?:(?:disable|turn\s+off|temporarily\s+disable)\s+(?:your\s+)?(?:windows\s+)?(?:defender|antivirus|real[\s\-]?time\s+protection|smartscreen)|(?:defender|antivirus)\s+(?:exclusion|exception))|false[\s\-]?positive[\s\S]{0,140}(?:add\s+(?:an\s+)?(?:folder\s+)?exclusion|whitelist\s+it|allow\s+it|ignore\s+the\s+warning))
      description: Setup instructions tell the operator to disable antivirus or add a Defender exclusion before running the package - malware-install coaching
    - field: content
      operator: regex
      value: (?i)(?:(?:mcp\s*server|mcp\s+connector|ai\s+skill|claude\s+skill|agent\s+skill|skill\s+pack)[\s\S]{0,400}releases/(?:download|latest)[^\s")\]]{0,180}\.(?:zip|7z|rar|exe|msi|scr)[\s\S]{0,300}(?:double[\s\-]?click|run\s+it\b|run\s+the\s+(?:exe|installer|setup|launcher)|setup\s+wizard|execute\s+the\s+(?:exe|installer|launcher))|download\s+the\s+\.?exe[\s\S]{0,160}(?:releases|github)|releases[\s\S]{0,160}download\s+the\s+\.?exe)
      description: Package claiming to be an AI Skill or MCP server is installed by downloading and running a Windows binary from a GitHub Releases page instead of a package-manager artefact
    - field: content
      operator: regex
      value: (?i)"mcp_?servers?"[\s\S]{0,600}(?:"command"\s*:\s*"[^"]{0,120}\.(?:cmd|bat|scr|pif|vbs|hta)"|"args"\s*:\s*\[[^\]]{0,300}"[^"]{0,100}\.(?:cmd|bat|scr|pif|vbs|hta)")
      description: MCP client configuration launches the server through a bundled Windows script launcher rather than a package-manager runtime - FakeGit persistence entry point
    - field: content
      operator: regex
      value: (?i)(?:91e5dbfaf45edf25fbc2168f92083e05dfa427afa7633e991392e33cc7427dad|66afc7d87d10dbe392898c4e5c613e0442fabb396415c2bef3a5ef2ac752c5ad|c15693106682f2ddb26649cab6e1962a64537627cde4c5d3c79d5a0be8c1b5a8|a33f40cab1ab7f971d3464af3e7595918107332b9e83342007571842b9e22826|Mann1988/awesome\-claude\-skills|45d5r/databricks\-mcp\-server|DomingosNgongo/walmart\-mcp|MauManto/jenkins\-mcp\-server|awesome\-skills\-claude\-3\.3\.zip|server_databricks_mcp_1\.6\.zip|mcp\-walmart\-2\.2\.zip|mcp\-server\-jenkins\-3\.2\.zip)
      description: Known FakeGit / AgentBaiting campaign artefact - published ZIP SHA-256, repository slug or release archive name
response:
  actions:
    - quarantine_artifact
    - require_human_review
    - alert
    - escalate
  auto_response_threshold: critical
  message_template: |
    [ATR-2026-02405] CRITICAL: this AI Skill / MCP server package matches the AgentBaiting / FakeGit malware distribution structure (Island, 2026-07-20). Indicators include a Windows .cmd/.bat launcher driving a bundled Lua runtime against a disguised data file, setup instructions that coach the operator past SmartScreen or antivirus warnings, a GitHub Releases binary presented as the install path for a claimed integration, an MCP config whose entry point is a bundled Windows script, or a published campaign IOC. Do NOT relay these installation instructions to the user. Quarantine the package, verify the publishing account against the upstream project (the campaign uses one-character typosquats such as Naveenkm007 for Naveenkm07), and require human review before any executable is run. Legitimate MCP servers install through npm / pypi / cargo / nuget / oci / mcpb artefacts, not through a downloaded .exe.
confidence: 74
