
Loading

Loading
We use strictly necessary cookies to run this site, and analytics cookies to understand how it's used. See our Privacy Policy for details.
A practical AI security playbook — least privilege for agents, treating inputs as untrusted, protecting model weights and training data, and real adversarial testing.
Knowing the vulnerability categories an AI system can have — see our breakdown of OWASP's 2026 Top 10 for GenAI Applications — is the first half of the problem. The second half is what to actually build, restrict, and monitor once you've shipped an LLM-powered feature or deployed a model of your own. Here's what a real AI security program looks like in practice, not just the list of things that can go wrong.
The single highest-leverage control for an AI system is the same one that's always been true for human accounts: give it access to exactly what it needs to do its job, nothing more. An LLM-powered agent that can read a customer database to answer support questions doesn't need write access to that database, and almost certainly doesn't need access to unrelated internal systems just because the underlying model could technically be prompted to try. This is Excessive Agency (OWASP's LLM06) in reverse — the category exists because too many AI deployments hand an agent broad tool access by default and rely on the model's own judgment to not misuse it, which is exactly the assumption prompt injection exists to defeat. Scope tool access and API permissions the way you'd scope a new employee's access on day one: to the specific task, reviewed and expanded deliberately, not granted wholesale up front.
A prompt injection doesn't have to come through a chat box. If your AI feature summarizes documents, browses web pages, processes emails, or ingests any content a user didn't type directly into the prompt field, every one of those is a potential injection point — the model has no reliable built-in way to distinguish your system instructions from an instruction embedded in a document it was asked to summarize. The practical defenses are layered, not singular: validate and constrain what the model is allowed to output (never let raw model output execute as code or a command without a human or a hard-coded check in between), and design the system assuming injection will occasionally succeed rather than assuming it can be fully prevented at the input layer.
Model theft, data poisoning, and training-data leakage are more of the OWASP list (Supply Chain, Data and Model Poisoning, Sensitive Information Disclosure) — and they all point back to the same basic control gap: model weights, fine-tuning datasets, and embedding stores need access controls and audit logging as rigorous as a production database gets, not the informal access a research or ML team's shared storage often has by default. If your model was fine-tuned on internal data, assume that data can resurface in a response under the right prompting, and design what the model is allowed to be trained on accordingly — the same "don't put data somewhere it can leak from" discipline that applies to any other system.
A foundation model's safety testing (from the provider you're building on) tells you very little about how your specific implementation behaves once it has your system prompt, your tool integrations, and your data connected to it. The vulnerability isn't usually in the model itself — it's in how a specific deployment wires that model into real permissions and real data. That's a testable, scoped exercise: systematically trying to get the deployed system to ignore its instructions, leak data it shouldn't, or take an action outside its intended scope, the same adversarial mindset a penetration test applies to a web application, aimed at the AI-specific attack surface instead.
Standard application logging often doesn't capture what an AI system actually did — which tools it called, what it retrieved, what it was told to do versus what it actually executed. Without that, a successful prompt injection or a model quietly leaking data can go unnoticed for a long time, because "the feature is technically working" and "the feature is doing something it shouldn't" can look identical from the outside without the right visibility into what the model itself decided to do.
If you've shipped an AI feature without having gone through this deliberately, the highest-value first step is usually an assessment of what the deployed system can actually be made to do — not a theoretical review of the architecture, a real adversarial test against it. Our AI Services engagements are built specifically for this: testing prompt injection resistance, tool-access boundaries, and data leakage on the actual system you've deployed, and our Secure Code Review service covers the surrounding application code an AI feature is wired into, since the vulnerability is rarely in the model alone.
Tell us about your environment and goals — we'll help you scope the right engagement.