Skills: The Missing Piece in AI Security Tooling

securevibes-skills

Sage Co-authored with Sage πŸ¦‰

Building on the SecureVibes series β€” this post explores how skills transform generic AI agents into domain experts.


The Industry Problem: One-Size-Fits-All Security Analysis

Here's a pattern I've seen across the security industry: we build tools that apply the same methodology regardless of what they're analyzing.

Run STRIDE on a web app? You get STRIDE threats. Run STRIDE on a mobile app? Same STRIDE categories. Run STRIDE on a multi-agent AI application with cascade confidence propagation and LLM tool execution? Still the same STRIDE threats.

This is a problem because agentic applications have fundamentally different risk profiles than traditional software. When your application can:

  • Execute tools autonomously
  • Chain multiple AI agents together
  • Propagate confidence scores between decision-makers
  • Accept natural language that becomes executable logic

...you need threat modeling that understands these patterns.

This isn't just a SecureVibes problem. It's an industry problem. And I believe skills are the solution.


What Are Skills? (And Why They Matter)

TL;DR β€” Skills are modular knowledge packages that augment AI agents with domain-specific expertise. They're the LLM-native equivalent of Semgrep rulesβ€”but for reasoning, not pattern matching.

If you've worked with AI coding assistants, you've probably seen context files like CLAUDE.md that give the AI information about your codebase. Skills take this concept furtherβ€”they're structured knowledge packages that teach an AI agent how to think about specific domains.

A security skill might include:

  • Detection patterns β€” How to recognize when the skill applies
  • Threat categories β€” Domain-specific vulnerability classes
  • Examples β€” Real-world attack scenarios
  • Reference materials β€” Validation logic and deeper context

The key insight: skills don't replace the agent's reasoningβ€”they augment it with domain expertise.

And here's what makes this exciting for the industry: skills are portable. They're just markdown and code. No vendor lock-in. No proprietary formats.


The Experiment: Proving Skills Work

To demonstrate the power of skills, I ran a controlled experiment using SecureVibes' threat modeling subagent.

The Test Subject: FinBot

I used finbot-ctf-multiagentβ€”a multi-agent invoice processing system that's the flagship project for OWASP's Agentic Security Initiative (ASI).

FinBot is ideal because it exhibits real agentic patterns:

  • Multi-agent chain: ValidatorAgent β†’ RiskAnalyzerAgent β†’ ApprovalAgent β†’ PaymentProcessorAgent
  • Cascade confidence propagation between agents
  • Custom goal injection via admin endpoints
  • LLM tool execution for invoice processing

Important note on methodology: I modified the FinBot codebase to remove all hints, comments, and obvious vulnerability markers. This ensured the testing was purely unbiasedβ€”SecureVibes had to discover the agentic patterns and threats on its own, without any breadcrumbs.

Two Runs, Same Codebase

Run 1: Generic STRIDE (no skills)

  • Standard threat modeling methodology
  • No context about AI/LLM-specific risks

Run 2: STRIDE + OWASP ASI Skills


The Results: Data Speaks

Threat Comparison: STRIDE vs Skills

High-Level Comparison

MetricSTRIDE-OnlySTRIDE + ASI Skills
Total Threats3025
ASI-Specific Threats09

The skill-augmented run found 9 threats in agentic-specific categories that generic STRIDE simply cannot identify. These aren't relabeled STRIDE threatsβ€”they're fundamentally different risk categories that only exist in multi-agent systems.

Threat Category Breakdown

STRIDE-Only Distribution

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ STRIDE-Only: 30 Threats by Category                     β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ Tampering            β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ  9 (30%)      β”‚
β”‚ Info Disclosure      β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ       7 (23%)      β”‚
β”‚ Denial of Service    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ             4 (13%)      β”‚
β”‚ Elevation of Priv    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ             4 (13%)      β”‚
β”‚ Spoofing             β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ               3 (10%)      β”‚
β”‚ Repudiation          β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ               3 (10%)      β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

STRIDE + ASI Skills Distribution

β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”
β”‚ With Skills: 25 Threats (16 STRIDE + 9 ASI)             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ STRIDE Categories (16 threats)                          β”‚
β”‚   Spoofing           β–ˆβ–ˆβ–ˆβ–ˆ                 2             β”‚
β”‚   Tampering          β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ           5             β”‚
β”‚   Repudiation        β–ˆβ–ˆ                   1             β”‚
β”‚   Info Disclosure    β–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆβ–ˆ             4             β”‚
β”‚   Denial of Service  β–ˆβ–ˆβ–ˆβ–ˆ                 2             β”‚
β”‚   Elevation of Priv  β–ˆβ–ˆβ–ˆβ–ˆ                 2             β”‚
β”œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€
β”‚ ASI Categories (9 threats) ← ONLY FOUND WITH SKILLS     β”‚
β”‚   ASI01: Goal Hijacking      β–ˆβ–ˆβ–ˆβ–ˆ         2             β”‚
β”‚   ASI03: Tool Misuse         β–ˆβ–ˆβ–ˆβ–ˆ         2             β”‚
β”‚   ASI04: Resource Exhaustion β–ˆβ–ˆ           1             β”‚
β”‚   ASI05: Insecure Output     β–ˆβ–ˆ           1             β”‚
β”‚   ASI07: Multi-Agent Risks   β–ˆβ–ˆ           1             β”‚
β”‚   ASI08: Memory Manipulation β–ˆβ–ˆ           1             β”‚
β”‚   ASI10: Insufficient Loggingβ–ˆβ–ˆ           1             β”‚
β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜

The 9 Threats Only Skills Could Find

These are threats that exist in categories generic STRIDE doesn't even know about:

IDASI CategoryThreatWhy STRIDE Misses It
ASI01-001Goal HijackingInvoice Description Prompt Injection to Bypass Approval ControlsSTRIDE sees "Tampering"β€”misses the LLM-specific attack vector
ASI01-002Goal HijackingCustom Goals Injection via Unauthenticated Admin EndpointGoals override agent behaviorβ€”unique to agentic systems
ASI03-001Tool MisuseAgent Tool Chain Manipulation via Confidence Score PoisoningMulti-agent confidence cascadeβ€”no STRIDE equivalent
ASI03-002Tool MisuseIntegrity Check Bypass via Configuration ManipulationDisabling agent guardrails remotely
ASI04-001Resource ExhaustionOpenAI API Cost Exhaustion via Mass Invoice Submission4 LLM calls per invoiceβ€”agentic cost amplification
ASI05-001Insecure OutputLLM Response Parsing Vulnerabilities Leading to Decision BypassMalformed LLM output triggers weaker fallback logic
ASI07-001Multi-Agent RisksCascade Failure Exploitation to Force Approval BypassIntentional failures propagate through agent chain
ASI08-001Memory ManipulationAgent Context Pollution via Persistent Configuration StatePoisoned config affects all future agent decisions
ASI10-001Insufficient LoggingInadequate Audit Trail for AI Decisions and Security EventsAI decisions aren't logged for forensics

ASI07 (Cascade Failure Exploitation) is a perfect example: an attacker can trigger specific failures in one agent that manipulate downstream agents through confidence propagation. This is a risk unique to multi-agent systemsβ€”STRIDE has no category for it.


Sample Results: STRIDE-Only Output

Here's a sample of what the generic STRIDE run produced:

THREAT-001: Complete Absence of Authentication on All API Endpoints

  • Category: Spoofing
  • Impact: HIGH | Likelihood: HIGH
  • All API endpoints including admin routes (/api/admin/*) are publicly accessible without any form of authentication. Anyone can access administrative functions, modify system configuration, approve/reject invoices, and manipulate vendor data without proving their identity.

THREAT-004: AI Goal Manipulation via Prompt Injection in Custom Goals

  • Category: Tampering
  • Impact: HIGH | Likelihood: HIGH
  • The /api/admin/finbot/goals endpoint allows setting custom goals in natural language that are directly incorporated into the AI system prompts with 'CUSTOM GOALS (TAKE PRIORITY IF CONFLICTING)' prefix.

THREAT-005: Invoice Description Prompt Injection Attack

  • Category: Tampering
  • Impact: HIGH | Likelihood: MEDIUM
  • Invoice descriptions are passed directly to AI agents (ValidatorAgent, RiskAnalyzerAgent, ApprovalAgent) in prompts without any sanitization or boundary enforcement.

Notice how THREAT-004 and THREAT-005 are categorized as "Tampering"β€”a generic STRIDE category. While technically correct, this misses the nuance that these are prompt injection attacks specific to LLM-based systems.


Sample Results: Skills-Augmented Output (ASI Threats)

Here's what the skill-augmented run found in the ASI-specific categories:

THREAT-ASI01-001: Invoice Description Prompt Injection to Bypass Approval Controls

  • Category: ASI01: Agent Goal Hijacking / Prompt Injection
  • Severity: Critical
  • The invoice description field is passed directly to LLM prompts without sanitization across all four agents. An attacker can craft invoice descriptions containing prompt injection payloads that manipulate the AI agents into approving fraudulent invoices regardless of actual risk factors.

THREAT-ASI03-001: Agent Tool Chain Manipulation via Confidence Score Poisoning

  • Category: ASI03: Tool Misuse / Unauthorized Tool Use
  • Severity: High
  • The multi-agent system uses cascade confidence multiplication where each agent's confidence affects subsequent agents (confidence_multiplier = validator_result.confidence * risk_result.confidence). An attacker can manipulate early-stage agent outputs to poison the confidence scores flowing through the chain.

THREAT-ASI07-001: Cascade Failure Exploitation to Force Approval Bypass

  • Category: ASI07: Multi-Agent System Risks
  • Severity: Medium
  • The multi-agent cascade design explicitly propagates failures between agents. If ValidatorAgent fails, subsequent agents receive corrupted data with CASCADE_FAILURE_FROM_VALIDATOR errors. An attacker can intentionally trigger failures to exploit how downstream agents handle error states.

THREAT-ASI08-001: Agent Context Pollution via Persistent Configuration State

  • Category: ASI08: Memory/Context Manipulation
  • Severity: High
  • FinBotConfig persists custom_goals and configuration state in the database, affecting all future invoice processing. An attacker who modifies configuration once has persistent control over agent behavior until manually detected and corrected.

The difference is clear: skills enable the agent to recognize and categorize agentic-specific risks that generic methodologies can't properly identify.


Context Awareness: How Skills Detect Agentic Patterns

Before generating threats, the skill-augmented run automatically detected these patterns:

βœ… OpenAI API usage (gpt-4o-mini)
βœ… Multi-agent chain (ValidatorAgent, RiskAnalyzerAgent, 
   ApprovalAgent, PaymentProcessorAgent)
βœ… LLM function calling/tool execution
βœ… Custom goal injection via admin interface
βœ… Cascade confidence propagation between agents

This is what enables targeted analysis. The agent knew it was analyzing a multi-agent system before it started threat modeling, so it applied the right mental models.


Why This Matters for the Industry

1. Every Application Type Needs Its Own Skills

The same principle applies across the board:

Application TypeSkill FocusExample Threats
Agentic AIOWASP ASIPrompt injection, tool misuse, cascade failures
Web AppsOWASP Top 10XSS, SQLi, broken access control
Mobile AppsOWASP MASVSInsecure storage, cert pinning bypass
Crypto/Web3Smart contract risksReentrancy, flash loans, oracle manipulation
APIsOWASP API SecurityBOLA, rate limiting, mass assignment

You don't need different tools for each application typeβ€”you need different skills for the same tool.

2. Skills Are the New Rules

Traditional security tools rely on rules:

  • Semgrep rules for SAST
  • YARA rules for malware
  • Snort rules for IDS

Skills are the LLM-native equivalent. But instead of pattern matching, they enable reasoning. An agent with the right skills can:

  • Understand context, not just syntax
  • Chain together multi-step attack scenarios
  • Identify domain-specific risks

3. The Open Source Shift

Trail of Bits recently open-sourced their skills for security research and audit workflows. This signals a shift: the future of security tooling isn't monolithic productsβ€”it's composable, shareable expertise that makes everyone's agents smarter.

The industry is moving toward:

  • Composable expertise that can be shared
  • Community-driven knowledge that improves over time
  • Portable skills that work across tools

This is how we collectively get better at securityβ€”not by hoarding knowledge in proprietary tools, but by sharing it as skills anyone can use.


How I Created the Agentic Security Skills

Here's the part that surprised me: creating these skills was fast.

The traditional bottleneck in security tooling has always been knowledge engineering. Someone has to read the documentation, understand the threat landscape, and encode that knowledge into rules or patterns. This takes weeks or months.

Here's what I did instead:

  1. Downloaded the OWASP Top 10 for Agentic Applications PDF from genai.owasp.org
  2. Converted it to markdown β€” a straightforward transformation
  3. Pointed Claude Code at it with context from a skills best practices guide I curated
  4. Gave it the existing DAST skills as an example of the structure and format I wanted
  5. Asked it to create skills for all ASI01-ASI10 categories

The result? A complete skill set for agentic threat modeling in a fraction of the time it would have taken to build manually.

This is the paradigm shift. Humans used to be the bottleneck in encoding security knowledge. But if you give AI the right contextβ€”the source material, the format you want, and examples to followβ€”you can move incredibly fast.


Embracing Non-Determinism

Here's something that trips people up when they first use AI for security analysis: the results aren't always the same.

Run the same threat model twice and you might get slightly different threats. Run it with a different model and you'll definitely get different results. This bothers people who are used to deterministic tools where the same input always produces the same output.

But here's the thing: this isn't a bugβ€”it's a feature you should embrace.

The right approach isn't to expect consistency. It's to:

  1. Run the workflow multiple times β€” maybe 2-3 runs
  2. Try different models β€” Sonnet and Opus often catch different things
  3. Consolidate the results β€” union of all findings

What you'll find is that critical risks show up consistently on every run. These are the threats that matter mostβ€”the ones where the signal is so strong that the model can't miss them regardless of sampling variance.

The threats that appear inconsistently? They're often edge cases or lower-severity issues that won't materially change your security posture. They're nice to have, but missing them in one run isn't catastrophic.

This is fundamentally different from traditional SAST tools where you expect deterministic output. But it's also how human security researchers workβ€”run the same pentest twice with two different testers and you'll get different findings. We've always accepted that in human-driven security work. It's time to accept it in AI-driven work too.


Building Your Own Skills

The agentic security skill in SecureVibes follows a simple structure:

skills/
  threat-modeling/
    agentic-security/
      SKILL.md          # Core skill + ASI01-ASI10 categories
      examples.md       # Real attack scenarios
      reference/
        README.md       # OWASP ASI reference

The SKILL.md teaches the agent:

  1. When to activate β€” Detection patterns for agentic code
  2. What to look for β€” Threat categories with code patterns
  3. How to report β€” Structured templates with required fields

Here's the detection logic:

### Detection Phase Scan the codebase for agentic patterns: 1. LLM API usage: - anthropic|openai|claude|gpt-|completion|chat\.create 2. Agent patterns: - class.*Agent|class.*Runner|class.*Executor 3. Tool execution: - bash.tool|browser.tool|tools\s*[:=]|@tool 4. Memory/context: - memory|context|session|conversation **If ANY pattern found β†’ activate agentic threat modeling**

You Don't Need SecureVibes to Use These Skills

Here's what I love about skills: they're just files.

You don't need to run SecureVibes if you don't want to. Grab the agentic-security skill and drop it in your Claude Code workspace.

Add the skill to your .claude/ directory or reference it in your CLAUDE.md. The next time you ask Claude Code to threat model an agentic application, it will have the full OWASP ASI taxonomy with detection patterns and examples.


Key Takeaways

  1. Generic threat modeling produces generic threats. STRIDE on an agentic app gives you STRIDE categories, missing agentic-specific risks.

  2. Skills enable context-aware analysis. The skill-augmented run found 9 threats in ASI categories that STRIDE couldn't categorizeβ€”including cascade failures, goal hijacking, and context pollution.

  3. Relevant threats > More threats. 9 agentic-specific threats that actually apply to your multi-agent system are more valuable than 30 generic threats that may or may not be relevant.

  4. Skills are portable. Use them with Claude Codeβ€”they're just markdown files with structured knowledge.

  5. Creating skills is now fast. Download the PDF, convert to markdown, give AI the right context and examples, and validate the output. What used to take weeks now takes hours.


Try It Yourself

If you're threat modeling an agentic application:

  1. ⭐ Star SecureVibes
  2. Grab the agentic-security skill
  3. Drop it in your Claude Code workspace
  4. Find threats that generic methodologies miss

If you have ideas for skills or want to contribute, please reach out! The more skills we share, the smarter everyone's agents become.

Until next time, ciao! πŸ¦‰


Happy threat modeling!