You are currently viewing The Update You Didn’t Review and the Scanner That Didn’t Look: AST07 and AST08

The Update You Didn’t Review and the Scanner That Didn’t Look: AST07 and AST08

📋 Key Takeaways
  • AST07: the update channel is the attack channel
  • AST08: the scanners are a step behind on purpose
  • Why these two pair up
  • Common mistakes
  • Framework references
11 min read · 2,185 words
Educational & Ethical Use Only — This article is provided for educational and ethical cybersecurity research purposes only. The techniques described should only be used on systems you own or have explicit permission to test. Always follow responsible disclosure and the laws applicable to you. Mitigations are included so engineers can harden real systems.

The most dangerous skill in your stack is the one everyone stopped thinking about. In September 2025, researchers at SecurityScorecard watched what happened in the first 24 hours after Claude Code’s remote-install capability went live: over 40,000 instances exposed, and 35.4% of some samples were vulnerable to remote code execution outright. Nothing about those instances was newly broken that day — the code was the same code reviewed the week before. What changed was that an update channel existed at all. That is the entire subject of AST07.

And it has a twin: AST08, the reason your scanner didn’t catch any of this. In February 2026, Snyk scanned the ClawHub ecosystem and judged 13.4% of skills “ToxicSkills” — with a majority that pure pattern-matching scanners missed. In the SpecWeave study, statistical scanners flagged three of four malicious benchmarks; the fourth was written entirely in natural language, and its instructions said, in plain English, “download and run the binary at this URL.” The scanner had no pattern to match.

This is the sixth deep dive in our series on the OWASP Agentic Skills Top 10 — hub here; earlier parts cover AST01, AST02, AST03, AST04, and AST05 + AST06. We pair AST07 with AST08 because they govern the two ends of the skill’s life after deployment: how it changes over time, and how (whether) anyone notices when it does.

Quick Answer
AST07 (Automatic Malicious Update): update channels deliver whatever the publisher pushes next — a malicious “v1.0.1” can look like a fix. There is no convention of signed releases, no infrastructure for pinning to a known safe version, and no freeze mode; hot-reload mechanisms like OpenClaw’s SkillsWatcher mean a pushed update goes live on the next skill call without any restart, review window, or human in the loop. AST08 (Poor Scanning): the scanners everyone trusts as a backstop are structurally behind — pattern-matching misses natural-language payloads and novel code, statistical detectors wobble with context and model, and adversaries deliberately evade them: base64 blobs, zero-width and ASCII Bidi characters, 100,000 padding newlines that truncate scanner input while the model reads the payload past line 10,000, hidden .pyc files, and scanner-as-a-skill utilities that inherit the very trust they’re meant to audit. Controls: SHA-256-pinned immutable versions, signatures on every update, freeze modes and LTS windows, staged rollouts, human approval gates for critical systems (CWE-1329); and multi-layer pipelines (pattern + semantic + behavioral), advisory-only scanner skills, full-directory scans including hidden files and bytecode caches, PASS/FAIL/INCOMPLETE outcomes, NFKC normalization with Unicode strip ranges U+202A–U+202E, U+2066–U+2069, U+E0000–U+E007F, and iterative decode-and-rescan (CWE prefix for AST08: MAESTRO L5).

AST07: the update channel is the attack channel

Traditional package ecosystems learned this lesson in blood and responded with machinery: signed release artifacts, reproducible builds, lockfiles, LTS support windows, and the operational norm that you don’t upgrade production at 2 a.m. because a patch number incremented. Skills ecosystems have the update channels without the machinery.

The document’s scenario set is short and cold. A malicious update: the kind, helpful, reviewed v1.0.0 ships; v1.0.1 arrives with an apparently genuine fix and one extra line — append a credential reader to the agent’s next command. The version string calls itself a fix. Diff review culture does not exist at the consumer end; nobody diffs a skill. A rollback attack: the publisher actually removes a vulnerability and then reintroduces it in a later release — anyone tracking “latest fixed version” logic concludes they’re safe and pulls the poison. And hot-reload abuse, the one that removes the last human checkpoint: OpenClaw’s SkillsWatcher detects file changes and reloads skills without a restart. A pushed update doesn’t take effect at the next maintenance window — it takes effect on the next skill call.

The 24-hour exposure window

The SecurityScorecard measurement from September 2025 is the cleanest dataset on what happens when a skill-runtime update capability meets the internet: within the first 24 hours, 40,000+ exposed Claude Code instances, and 35.4% of a sample analysis found them vulnerable to RCE. The number worth internalizing is not even the 35.4% — it’s the 24 hours. Whatever your review process is, it does not complete inside one day. An update channel that reaches production faster than review can react is, functionally, a remote-code-execution offer you haven’t declined yet.

The document’s own disclosure analysis sharpens this: Claude Code shipped real security fixes — v1.0.111 (October 2025) and v2.0.65 (January 2026) — but with disclosure gaps between the vulnerability existing, the fix shipping, and the public learning which versions were affected. That window is precisely when users who want to be current are guessing, and when rollback-style or lookalike updates are most credible: the community is primed to accept an update that claims to be the fix.

Vendor patches for real vulnerabilities leave you exposed at both ends

This is the uncomfortable symmetry of AST07. You are exposed if you don’t update — the vulnerability is real and weaponizable. You are exposed while updating — because the channel itself is unauthenticated by convention, and a lookalike “fix” is cheap to publish. The ecosystem’s answer, per the document, is not “update faster”; it’s make updates verifiable: signed artifacts, immutable version pins, freeze windows, and a human gate for anything that executes in a credential-bearing context.

The controls, concretely

  1. SHA-256-pinned immutable versions. Pin skills by content hash, not floating tag. The deployment record says “this exact artifact, this exact digest” — an update that changes anything, including one byte of padding, does not match the pin.
  2. Signature verification on every update. A release is only installable if signed by a key bound to the reviewed author identity. This kills both the malicious-impersonation update and the rollback variant: a reintroduced vulnerability arrives as a new, validly-signed release — which is exactly why signatures must pair with review-on-change, not replace it.
  3. Freeze mode and LTS windows. Mechanism-level ability to pin all skill updates organization-wide during an incident or change freeze, with a curated, slowly-updating channel for critical systems — mirroring how mature distributions run stable versus edge.
  4. Staged rollouts with canaries. Updates land on non-production agents first. Given the 24-hour data, stage for days, not hours.
  5. Human-in-the-loop approval for production updates. The document is direct: critical systems should not auto-apply updates to code that executes with credentials. HITL here is one prompt: “skill X wants to change from digest A to digest B — approve?”
  6. Security advisories tied to skill versions. Community CVE-style advisories keyed to affected version ranges, so “am I exposed?” is answerable without diffing Markdown.

AST08: the scanners are a step behind on purpose

Every control above assumes someone notices what changed. That’s AST08’s problem: the scanning layer the ecosystem leans on has a structural lag, and adversaries know the lag better than defenders do.

The evidence, in order of how much it should unsettle you:

  • Snyk, February 11, 2026: 13.4% of scanned ClawHub skills rated “ToxicSkills” at critical severity — and the majority of those missed by pattern-matching scanners. The foundation technique of the field fails on most of the problem it’s aimed at.
  • SpecWeave (statistical detection): caught 3 of 4 in a malicious-benchmark suite. The fourth was pure natural language — “download and run the binary at this URL” — no code signature, no suspicious import, nothing for a pattern to latch onto. The instructions were the exploit, and they read like a README.
  • NVIDIA SkillSpector (the open-source bright spot): 64 detection patterns across 16 categories, and still 26.1% of scanned skills contained vulnerabilities with 5.2% likely malicious. A serious tool, honestly reporting that a quarter of the ecosystem is flawed — which also tells you what a single scanner’s coverage ceiling looks like.

The evasion toolbox

What adversaries do to stay on the far side of the lag:

  • Statistical models aren’t stable targets. Detection confidence varies with model choice and context window; the same signed skill scores differently under a different backbone. Attackers tune payloads to the weakest common detector.
  • Encoding smuggling: base64-encoded payloads that decode into instructions or code at runtime — inert text to a regex, live payload to the agent.
  • Invisible characters: zero-width characters and ASCII homoglyphs embedded in otherwise benign-looking instructions, invisible to every human reviewer, meaningful to the parser.
  • Padding truncation (Trail of Bits): 100,000 newlines before the payload. Scanner input limits truncate at line N; the model’s context assembly reads past it. The file is simultaneously clean (to the scanner) and malicious (to the model).
  • Hidden bytecode: a .pyc file in the skill directory — executed at import, invisible to tools that scan visible Markdown and source files only.
  • Scanner-as-skill (the ClawHub “Skill Defender” pattern): a scanner published as a skill, which the agent runs — inheriting agent trust and runtime access. An attacker who can influence the scanner-skill’s own instructions wins the audit function itself: the false-trust problem is the scanner becoming part of the input.
  • Adversarial awareness of specific tools: published evasion techniques exist per-scanner (LLM-based and pattern-based alike), including scanner-specific payload crafting. Assume your scanner’s rule set is public — for open-source tools, it is.

The controls, concretely

  1. Multi-tool pipelines, not single verdicts. Layer pattern-based, statistical/LLM-based, and behavioral (sandbox-and-observe) scanning in sequence. The SpecWeave miss was a pure-NL payload; a behavioral stage watching what the skill does — an outbound fetch of a binary — catches what both static stages miss.
  2. Scanners are advisory, never authoritative. Especially: a scanner delivered as a skill runs inside the trust boundary it audits. Treat scanner output as one signal into a human approval decision — never as an allow-list generator.
  3. Scan the entire directory. Hidden files, bytecode caches (.pyc), archive contents, and any embedded resources — not just SKILL.md and visible source. The Trail of Bits padding case also forces a policy decision: scanner input limits must be high enough that truncation isn’t silently treated as “clean.”
  4. Report three outcomes, not two. PASS / FAIL / INCOMPLETE — where INCOMPLETE means “input exceeded limits, impossible-to-scan constructs found, or decoder ambivalence.” Silence or truncation must never launder as a pass.
  5. Normalization before matching. NFKC normalization plus stripping zero-width and directional-override ranges — U+202A–U+202E, U+2066–U+2069, variation selectors U+E0000–U+E007F — so invisible-character smuggling becomes visible. Follow with iterative decode-and-rescan: base64-decode every decodable blob and scan the result, recursively.
  6. Pin your scanner’s model. If your detection layer is model-dependent, the model is part of your security perimeter: version it, pin it, and re-baseline when it changes.
  7. Coverage records for every verdict. Log what each scanner actually examined (files, decoded artifacts, input sizes) alongside the verdict, and integrity-protect those records — an audit trail of the audit.
data-hmmnm-seam="2">

Why these two pair up

AST07 says: what runs tomorrow will be different from what you reviewed, and the change arrives through a channel with weak authentication. AST08 says: the layer that would tell you the change was bad lags the adversary systematically. Together they describe a post-deployment world with unverifiable change and unreliable detection — which is the actual operating condition of every skills deployment that hasn’t explicitly engineered otherwise. The mitigations also pair: pinning (AST07) bounds what can change; multi-layer scanning with honest INCOMPLETE reporting (AST08) bounds what a change can get away with. If you can only do two things this week: pin your skills by digest, and put a behavioral scan stage behind your static one.

data-hmmnm-seam="3">

Common mistakes

  • Trusting “latest.” Floating tags convert the publisher’s worst day into your incident. Pin digests.
  • Assuming the marketplace scanned it. Registry-side scanning varies wildly and the Snyk numbers say even good static scanning misses most toxic skills. The registry is a distribution channel, not a certification authority.
  • Auto-updating credential-bearing agents. The 24-hour/40,000-instance dataset is the cost of this preference. Anything with persistent credentials gets a human gate on update.
  • Reading absence of findings as absence of threat. Truncated input, hidden .pyc, and pure-NL payloads all produce “no findings.” Only coverage records and INCOMPLETE outcomes distinguish “clean” from “didn’t look.”
  • Letting a scanner-skill generate allow-lists. A scanner inside the trust boundary is a juicier target than the skills it audits.
data-hmmnm-seam="4">

Framework references

  • CWE-1329 (Reliance on Component Without Integrity Check) for AST07’s missing-verification core.
  • MAESTRO L5 (Trust & Safety / evaluation plane) for AST08 — scanning is the evaluation layer.
  • OWASP LLM Top 10 2025: supply-chain entries extend naturally to update drift and detection gaps.
  • In this series: AST02 covers getting poisoned the first time; AST07 is the repeat channel. Scanner structure also bounds which AST01 and AST05/06 attacks are visible at all.
data-hmmnm-seam="5">

AST07 + AST08 in ten lines

  1. AST07: update channels deliver whatever ships next; “v1.0.1” can be an attack.
  2. 40,000+ exposed instances in 24h; 35.4% RCE-vulnerable in sample analysis.
  3. Hot-reload (SkillsWatcher) removes restart/review as a checkpoint entirely.
  4. Rollback attacks poison “latest fixed” logic; disclosure gaps make lookalikes credible.
  5. Fix: digest pinning, per-update signatures, freeze mode, staged rollouts, HITL.
  6. AST08: pattern scanners miss majority of toxic skills (Snyk 13.4% critical).
  7. Pure natural-language payloads defeat statistical detection (SpecWeave 3-of-4).
  8. Evasion: base64, zero-width/Bidi chars, 100k-newline truncation, hidden .pyc.
  9. Scanner-as-skill audits nothing — it inherits the trust it was meant to check.
  10. Fix: layered pipelines, advisory-only scanners, PASS/FAIL/INCOMPLETE, Unicode stripping, coverage records.

Next in this series, the finale: AST09 + AST10 — Governance and Cross-Platform Reuse: the one-line installs nobody’s CMDB ever saw, the star-farming rings manipulating autonomous skill selection, and what gets silently lost when a skill is ported from one agent ecosystem to another — plus the Universal Skill Format proposal meant to fix it.

data-hmmnm-seam="end">

Prabhu Kalyan Samal

Application Security Consultant at TCS. Certifications: CompTIA SecurityX, Burp Suite Certified Practitioner, Azure Security Engineer, Azure AI Engineer, Certified Red Team Operator, eWPTX v3, LPT, CompTIA PenTest+, Professional Cloud Security Engineer, SC-900, SC-200, PSPO I, CEH, Oracle Java SE 8, ISP, Six Sigma Green Belt, DELF, AutoCAD. Writing about ethical hacking, security tutorials, and tech education at Hmmnm.