Shipping Without Saying No: The First 180 Days in AppSec and AI Security
How to make software and AI features safer while the people who build them keep shipping.
You were hired to make software safer. The people who write that software were hired to ship it. This book is about doing your job without becoming the reason theirs got harder.
It runs in time order, from your first day to about six months in. Each chapter starts with the questions people tend to ask quietly, then gives plain answers and ends with one thing to practise on PlayCISO.
Read it straight through once, then come back to the chapter that matches your week. Nothing here needs a budget. Most of it needs conversations.
Day 1: listen before you scan
Before any tool runs, learn who builds what, how code reaches production and what is already live.
Meet the engineers before the scanners
Day 1
The fastest way to lose a development team is to run a scanner on day one and send them a spreadsheet of findings. They did not ask for it, they cannot tell which rows matter, and they now know you as the person who makes work. Hold the scanner for a week.
Your first job is to understand how software gets made here. That knowledge lives in people, not in a wiki. Book short, informal conversations with a handful of engineers from different teams. Ask them to show you, not tell you.
Who to meet in week one
- A senior engineer on the busiest product team. They know where the bodies are buried.
- Whoever owns the build and deploy pipeline. Often a platform or DevOps team.
- The engineering manager who is under the most delivery pressure.
- Someone building an AI feature, if there is one. These teams move fast and often have no security contact yet.
- Whoever answered security questions before you arrived. They may be relieved, or protective. Either way, they know the history.
Questions that open people up
- What part of the codebase are you most nervous about?
- When did a security request last slow you down, and was it worth it?
- What would you fix if you had a free week?
- Where do secrets and config live?
- What would you like from a security person that you are not getting?
Write down what you hear, word for word where you can. The phrases engineers use for their own worries are the phrases you will later use to explain why a fix matters. A finding described in their words gets fixed faster than one described in scanner language.
The question you might not ask out loud
I am new and they are senior. Will they take me seriously?
They will take you seriously if you are useful and curious. Nobody expects you to know their codebase in week one. They do notice whether you listen. Asking good questions is the credibility you have right now, so use it.
What you are really learning
Behind every conversation are three questions. How does a change go from an idea to production? Who can approve it? Where would an attacker most like to be? You do not need full answers yet. You need a sketch you can improve over the next month.
Rule of thumb:Rule of thumb: for every hour you spend with a tool in your first month, spend an hour with the people who will act on what it finds.
By Friday, aim to have a short list of names, a rough picture of the teams and two or three worries you heard more than once. That list is your first backlog, and it came from them, which makes it far easier to work on together.
Practise it next: Know what each testing type finds before the engineers ask which one you plan to run. DAST vs SAST vs IAST chooser
Find the pipeline
Days 1–5
The build and deploy pipeline is the most important system you will learn this month. Every line of code passes through it. Every check you add will run in it. And if someone can change what it does, they can ship anything to production with your company name on it.
Ask the pipeline owner to walk you through one real change, from a pull request to running in production. Take notes as you go. Do not try to fix anything yet.
Draw the path
- Where is the source code hosted, and who can push to the main branch?
- What runs when a pull request is opened? Tests, linting, any security checks?
- Who must approve a merge, and can that rule be bypassed?
- Where are build artefacts stored, and are they signed or checked?
- What credentials does the pipeline hold, and what can each one reach?
- Who can deploy to production, and is there a record of each deploy?
You will probably find more than one pipeline. Older services often build differently from newer ones, and a team may have its own scripts. Note each one. The old one is often the risky one.
What to look for
- Long-lived secrets stored as pipeline variables that every job can read.
- Third-party actions or plugins pulled by a moving tag rather than a fixed version.
- Jobs triggered by pull requests from forks that run with write access or secrets.
- Branch protection that admins can skip, and do.
- No link between what was reviewed and what was deployed.
The question you might not ask out loud
Is it my job to secure the pipeline, or the platform team’s?
Usually both, and that is fine. The platform team owns it day to day. Your job is to know where the risks are, explain them in their terms and help them pick fixes that do not make builds slower or flakier.
Where checks belong
Fast checks that rarely produce noise, such as secret detection, can run on every pull request. Slow or noisy checks belong on a schedule or on the main branch, with results sent to a place the team already looks. A check that adds minutes to every build and cries wolf will be turned off quietly, and nobody will tell you.
Rule of thumb:Ask before adding a blocking check. A check that fails builds needs an owner, a way to suppress a false positive and a person to call when it breaks at 6 pm.
By the end of the week, you should have a simple diagram of each pipeline with the credentials and approval points marked. Share it with the pipeline owner and ask what you got wrong. You will learn more from the corrections than from the drawing.
Practise it next: Paste a workflow file and see the pipeline risks this chapter describes. GitHub Actions Security Auditor
What is already shipping
Week 1
You cannot protect what you do not know exists. In most organisations nobody has a complete list of what is running in production. That is normal. Your job in week one is to make a list that is useful, not one that is complete.
Start with four questions
- What can someone on the internet reach? Websites, APIs, mobile back ends, admin panels.
- What handles the most sensitive data? Payments, health, identity, customer files.
- What third-party code does it depend on? Open source packages, container images, SaaS integrations.
- Which features call an AI model, and what can that model see or do?
Use what already exists. Cloud accounts list load balancers and domains. The source host lists repositories. Package lock files list dependencies. DNS records show subdomains people forgot. You are stitching together sources, not starting from nothing.
Shadow features
Expect to find things nobody told security about. A chatbot built in a hackathon that is now live. A test environment with real data. An old API version still answering requests. Treat these calmly. If the first person to tell you about a forgotten system gets blamed, nobody will tell you about the next one.
The question you might not ask out loud
What if I find something risky in my first week?
Tell the owner directly and privately, explain what you saw and ask what they know about it. If it is being exploited or exposes sensitive data right now, follow the incident process and tell your manager the same day. Otherwise, it goes on the list with everything else.
Keep the list small and alive
- One row per service or feature, with an owner name, not a team alias.
- Whether it is internet-facing, and what data it handles.
- Whether it calls an AI model or runs an MCP server, and which one.
- Last time anyone looked at it from a security point of view.
Rule of thumb:A list with an owner on every row is worth more than a long list with no owners. When something breaks, the owner column is the one you will read first.
Share the list with the engineering leads and ask them to correct it. They will. Every correction is a conversation, and every conversation teaches you which services matter most to the people who run them.
Practise it next: Check a package you found in a lock file and see what it pulls in. NPM Package Scanner
The first 30 days
The working habits that make AppSec useful: quick threat models, calm triage, the supply chain and AI features.
Threat modelling a feature in an hour
Weeks 2–4
Threat modelling has a reputation for being slow, formal and full of diagrams. It does not need to be. The most useful threat models are short conversations with the people building a feature, held early enough that changes are still cheap.
The four questions
- What are we building? Draw the feature: users, services, data stores and the lines between them.
- What can go wrong? Walk each line and ask who could abuse it, and how.
- What are we going to do about it? Pick fixes, accept risks or move them to the backlog.
- Did we do a good job? Agree when you will look again.
Running the hour
- 10 minutes: an engineer draws the feature. You ask questions and do not correct.
- 25 minutes: walk the drawing. Where does untrusted input enter? Where does data cross a trust boundary? Who checks permissions, and where?
- 15 minutes: list what could go wrong and sort it into fix now, fix later and accept.
- 10 minutes: name an owner for each fix and write it in the team’s own tracker.
For prompts while walking the drawing, use a known list. The OWASP Top 10 for web apps, the OWASP API Security Top 10 for APIs and the OWASP Top 10 for LLM Applications for AI features all give you a vocabulary the team can look up later.
The question you might not ask out loud
What if they ask about a threat I do not know how to fix?
Say so, write it down and come back within two days. Nobody expects a security person to know every fix on the spot. They do expect you to follow up. A threat model that ends in your homework is still a good one.
What not to do
- Do not bring a finished threat model and ask them to sign it. They will not own it.
- Do not list every possible threat. Ten real ones beat fifty theoretical ones.
- Do not file the results in a security-only tool. Use the backlog the team already works from.
Rule of thumb:If you can only threat model one feature this month, choose the one that handles sensitive data and ships soonest. Late changes cost more, and sensitive data raises the stakes.
Keep a copy of each drawing. Over a few months they become a map of your systems that is more current than any architecture document, because the people who built the systems drew them.
Practise it next: Practise the four questions on a sample feature before you run the hour with a real team. Threat Model tool
Sources: OWASP Top 10:2025 (read 2026-11-14); OWASP API Security Top 10 2023 (read 2026-11-14); OWASP Top 10 for LLM Applications 2025 (read 2026-11-14)
Triaging scanner output without drowning devs
Weeks 2–4
The first time you run a scanner across a real codebase, the number of findings will be large. That number is not a measure of risk. It is a measure of how many patterns the tool matched. Your value is in what you do between the scanner and the developer.
Sort before you send
- Group duplicates. One vulnerable library used in thirty places is one finding with thirty locations.
- Drop what does not apply. Test code, dead code and unreachable paths go to a separate list, not to developers.
- Rank what is left by exposure and impact: internet-facing beats internal, sensitive data beats none.
- Check for known exploitation. A flaw listed in a public catalogue of exploited vulnerabilities moves to the top.
- Confirm the top few by hand before you send them.
Only then open tickets, and only for the items you would defend in a meeting. A developer who gets three accurate findings will fix them. A developer who gets three hundred mixed with noise will learn to ignore the source.
False positives
Every scanner produces them. Treat each one as a tuning job, not an embarrassment. Suppress it with a written reason that names who decided and when, so the next person does not re-raise it. If a rule produces mostly noise, turn it off and note why.
The question you might not ask out loud
Am I hiding risk if I do not send every finding?
No, as long as you keep the full list and can explain how you sorted it. Sending everything is not thoroughness. It moves the triage work to the people least equipped to do it and hides the real problems in the pile.
Make fixing easy
- Say where the problem is, why it matters here and what the fix looks like.
- Link to the exact line and, if you can, a sample patch.
- Agree a fix-by date with the team, based on severity and exposure.
- Close the loop. When a fix ships, say thank you where the team can see it.
Rule of thumb:Track the size of your untriaged pile separately from the developers’ backlog. The first is your work. The second is theirs. Mixing them makes both look worse than they are.
Over the first month, keep notes on which rules and which tools produce the findings developers actually fix. That record tells you where to tune, which checks to keep and which to retire, and it gives you something concrete to show when someone asks why you did not forward everything.
Practise it next: Rank a set of findings using known exploitation and exploit likelihood, the way this chapter describes. Vulnerability Prioritizer
Secrets, dependencies and the supply chain
Weeks 2–4
Much of what your company ships is code it did not write: open source packages, container base images, build plugins and, increasingly, AI models. The OWASP Top 10:2025 lists Software Supply Chain Failures as its own category. That matches what most AppSec teams see day to day.
Secrets first
A leaked key is one of the few findings an attacker can use immediately, with no exploit to write. Start here because the fix is clear and the risk is concrete.
- Scan the current code and the full git history. Deleting a secret in a later commit does not remove it from history.
- For every real secret found, rotate it first. Removing it from code comes second.
- Add secret detection to pull requests so new leaks are caught before merge.
- Agree where secrets should live instead, and make that path easy to use.
Rule of thumb:Rotate, then verify the new secret works, then revoke the old one. Never revoke first. A rotation you cannot check is an outage you planned.
Dependencies
- Know which packages each service uses. A lock file is the start of a software bill of materials.
- Pin versions and review updates rather than pulling whatever is newest.
- Watch for packages with names close to popular ones, and for packages that run install scripts.
- Prefer fewer, well-maintained packages over many small ones that do one thing.
The question you might not ask out loud
Do I need to read the code of every package?
No. Nobody can. Focus on what is new, what runs at install time, what has very few maintainers and what sits on a sensitive path. Let tools watch the rest and alert you when something changes.
The path to production
Supply chain security also covers your own build. Can someone change a build step without review? Can a compromised plugin read every secret? Is what you deploy the same thing that was reviewed and tested? These questions connect back to the pipeline map from your first week.
You will not finish this in a month. Aim to have secret detection running, a plan for rotating anything found and a first dependency inventory for your most exposed services.
Write down who owns each of these jobs. Secret rotation often belongs to the service team, dependency updates to developers and the build to the platform team. Your role is to make the gaps visible, suggest the simplest fix and check back. A short weekly note on what changed keeps everyone moving without a meeting.
Practise it next: See what leaked keys and tokens look like in real code before you scan your own repositories. Secret Scanner
Sources: OWASP Top 10:2025 (read 2026-11-14)
AI features: prompt injection and what the model can do
Weeks 3–4
When a team adds a large language model to a product, they add a component that follows instructions written in plain language. The problem is that it cannot reliably tell your instructions apart from instructions hidden in the text it reads: a user message, a web page, an email, a document or a tool result. That is prompt injection, and the OWASP Top 10 for LLM Applications 2025 lists it first, as LLM01.
Direct and indirect
- Direct: a user types instructions meant to override the system prompt.
- Indirect: the model reads content that someone else wrote, such as a support ticket or a web page, and that content carries the instructions.
Indirect injection is usually the bigger risk, because the person harmed is not the person who wrote the attack.
The question you might not ask out loud
Can we not just block the bad prompts?
Filters help a little and are worth having, but no filter is reliable against text written to get past it. Plan for the model being talked into something. Then make sure that when it is, the damage is small.
Limit the blast radius
- List what the feature can read. Does it see data the current user should not?
- List what it can do. Send email, call APIs, change records, run code?
- Give it only the permissions of the user it is acting for, never a shared admin key.
- Require a human to confirm actions that are hard to undo, like payments or deletions.
- Treat its output as untrusted input. Escape it before showing it, and validate it before acting on it.
Several items on the OWASP LLM list follow from this: Sensitive Information Disclosure (LLM02), Improper Output Handling (LLM05), Excessive Agency (LLM06) and System Prompt Leakage (LLM07). If you design for injection, you cover a large part of the list.
Questions to ask the AI team
- What is in the system prompt, and would it matter if a user saw it?
- Which outside content can reach the model?
- What tools can it call, and with whose permissions?
- Is there a limit on usage per user, so one person cannot run up the bill?
Rule of thumb:Never put secrets, keys or internal rules you need to stay private in a system prompt. Assume a determined user will read it.
Practise it next: Read all ten LLM risks in plain words and see which ones your AI features touch. OWASP LLM Top 10 explained
Sources: OWASP Top 10 for LLM Applications 2025 (read 2026-11-14)
Model files, MCP servers and an AI bill of materials
Weeks 3–4
AI features bring new kinds of third-party parts: model files downloaded from a hub, datasets, and MCP servers that let an AI assistant call tools. Treat each one the way you treat an open source package. Know where it came from, what it can do and who owns it.
Model files
Some model formats can run code when loaded. Hugging Face’s own documentation says that loading a pickle file can lead to arbitrary code execution, and suggests loading models only from sources you trust or using safer formats such as safetensors. So a model download is not just data. It can be a program.
- Prefer formats that store weights only, not code.
- Record where each model came from, which version and who approved it.
- Load untrusted models in an isolated environment, never on a developer’s main machine.
MCP servers
The Model Context Protocol (MCP) lets AI assistants connect to tools and data. A local MCP server is a program that runs with the user’s permissions. The protocol’s own security guidance describes risks such as malicious startup commands in a client configuration, token passthrough and over-broad scopes.
- Find out which MCP servers developers have installed, and where they came from.
- Check what each one can reach: files, network, cloud accounts, source code.
- Ask for least privilege: narrow scopes, no shared admin tokens.
- Treat a new MCP server like any new dependency, with an owner and a review.
The question you might not ask out loud
Developers are installing MCP servers on their own. Should I ban them?
A ban usually pushes them out of sight. Offer a short approved list and a quick way to request a new one. You learn what people need, and they get a path that does not involve hiding things from you.
An AI bill of materials
An AI bill of materials (AIBOM) lists the models, datasets and AI components a system uses, the way a software bill of materials lists packages. CycloneDX, for example, supports a machine learning bill of materials covering models, datasets, their dependencies and provenance. You do not need a perfect one in month one. Start with a table: model, version, source, where it runs, what data it sees, owner.
Rule of thumb:If a team cannot tell you which model version is in production, start there. You cannot respond to a problem with a model you cannot name.
Practise it next: Browse hygiene results for public MCP servers and see the checks to ask about before one is approved. MCP Scan explorer
Sources: Hugging Face Hub docs: Pickle Scanning (read 2026-11-14); Model Context Protocol: Security Best Practices (read 2026-11-14); CycloneDX: Machine Learning Bill of Materials (ML-BOM) (read 2026-11-14)
What if I screw up?
Something will ship that should not have. How you respond matters more than the fact that it happened.
A vulnerability shipped
Any time
At some point you will find a vulnerability in production that you reviewed, or should have. It might come from a researcher, a customer, a scanner or your own second look. The feeling is the same: a drop in the stomach and an urge to fix it quietly. Resist the second part.
The first hour
- Work out the exposure. Is it reachable from the internet? Does it touch sensitive data?
- Look for signs of use. Check logs for requests that match the flaw.
- Tell your manager and the owning team now, not after you have a fix.
- If there is any sign of exploitation or data exposure, start the incident process.
- Agree the fastest safe fix: a patch, a config change, a feature flag or turning the feature off.
The question you might not ask out loud
Will I get in trouble for missing it?
In a healthy team, telling people quickly is what earns trust. Hiding it, or slowing the fix to protect your reputation, is what damages it. No reviewer catches everything. Your manager knows that, even if you do not feel it right now.
Telling people
Keep the first message short and factual. What you found, where, how exposed it is, whether you see signs of use and what happens next. Avoid guessing. If you do not know yet, say so and say when you will know more.
Rule of thumb:Write down times as you go: when you learned, who you told, what you checked. It feels like a distraction during the work. It saves hours when people ask questions later.
After the fix
- Confirm the fix in production, not just in the pull request.
- Search for the same pattern elsewhere. Flaws rarely live alone.
- If someone outside reported it, thank them and tell them when it is fixed.
- Ask why it got through. Missing test, unclear ownership, rushed review? That goes in the review, not on a person.
Whether customers or regulators must be told depends on the data, the law where you operate and your contracts. That decision belongs to legal and leadership, with your facts. Your job is to give them accurate facts fast.
Finally, look after yourself and the team. Fixing a live flaw under pressure is tiring. Once it is contained, say thank you to the people who helped, hand over anything that can wait and get some rest. Good judgement in the next incident depends on it.
Practise it next: Walk through the first steps for an incident that starts in your code or pipeline. DevSecOps Breach Response Checklist
An AI feature leaked data
Any time
An AI feature can leak data in ways that look unfamiliar: it repeats part of its system prompt, summarises a document the user should not see, or follows instructions hidden in a web page and sends data somewhere. The response steps are the familiar ones. The questions you ask along the way are a little different.
Contain first
- Turn the feature off or put it behind a flag for everyone, or for affected users, while you investigate.
- Keep the logs: prompts, responses, tool calls and what data was retrieved.
- Revoke or narrow any credential the feature used that may have been misused.
- Start the incident process if personal or customer data may be involved.
Questions specific to AI
- What could the model read at the time? Which data sources, with whose permissions?
- What could it do? Which tools or APIs could it call?
- Was the trigger a user message, or content from somewhere else?
- Can you reproduce it? Model output varies, so try more than once.
- Which model and version was running? Did anything change recently?
The question you might not ask out loud
Can we not just add a line to the prompt telling it not to do that?
You can add one, but treat it as a speed bump, not a fix. A prompt line can be talked around. The lasting fix is usually outside the model: narrower data access, per-user permissions, output checks or a human confirmation step.
Fix the design, not just the wording
Most AI data leaks come down to a feature that could see more than the user it served. If the model only ever retrieves data the current user is allowed to see, a clever prompt cannot reveal someone else’s records. That is the same access-control principle as any other feature, applied to a new component.
Rule of thumb:Keep prompts and responses from an incident under the same access rules as the data they contain. Incident evidence can itself be sensitive.
When you write it up, record the model version, the data sources and the exact trigger. AI incidents are new for most organisations, and a clear write-up becomes the reference the next team reads.
Tell the people who own the feature what you found in plain words, and agree together what has to be true before it is switched back on. Writing those conditions down stops the feature returning quietly with the same gap, and it gives the team a clear finish line instead of an open-ended security review.
Practise it next: Work through an AI incident scenario and make the containment calls yourself. AI Prompt-Injection Incident Lab
Running a blameless review
After any incident
After an incident, someone will ask what went wrong. If the answer is a person’s name, you will learn nothing useful, and people will start hiding the next mistake. A blameless review assumes people acted reasonably given what they knew, and asks why the system made the wrong action easy.
What blameless does not mean
It does not mean nobody is accountable, and it does not mean pretending nothing went wrong. It means the review looks for causes you can fix: missing tests, unclear ownership, confusing tools, time pressure, alerts nobody watched. Deliberate harm is a different process, and rare.
Running the meeting
- Write a timeline first, from logs and notes, and share it before the meeting.
- Invite the people involved, and say plainly that the goal is learning.
- Walk the timeline. At each decision, ask what the person knew and what they saw.
- Ask what made the mistake easy and the right action hard.
- Agree a small number of actions, each with an owner and a date.
The question you might not ask out loud
It really was one engineer who pushed the bad change. Is it not honest to say so?
It is a fact, but it is not the useful one. The useful questions are why one person could push it without review, why no test caught it and why it reached production. Fix those and the next person cannot make the same mistake.
Words that help
- Ask what happened, not why you did it.
- Say the change was deployed rather than naming who deployed it.
- Avoid should have. Hindsight makes every decision look obvious.
- Thank people for being open, out loud, in the meeting.
Rule of thumb:Fewer actions that get done beat a long list that does not. Two or three changes with owners are a good result.
Share the write-up widely, in plain words. Other teams learn from your incident at no cost, and engineers see that security responds to mistakes by improving systems, not by finding someone to blame. That reputation is worth more than any tool you will buy this year.
Come back to the actions a month later. Check which ones were done, which stalled and why. A review whose actions never happen teaches people that reviews are theatre. A review whose actions visibly land teaches them that telling the truth leads to real change, which is the whole point of doing it without blame.
Practise it next: Run an incident from first alert to review and practise the decisions a good write-up records. IR Playbook Lab
How am I doing?
Measure what changes risk and what developers feel, not how many findings a tool produced.
Measure time to fix, not findings count
Months 2–3
Around month two, someone will ask how AppSec is going. The tempting answer is a big number: findings raised, scans run, tickets opened. Those numbers go up when you turn on a noisy tool and down when you tune it, and neither change says anything about risk.
Measures that mean something
| Measure | What it tells you | Watch out for |
|---|---|---|
| Time to fix, by severity | How long real risk stays open | Closing tickets as will not fix to look faster |
| Open serious findings on internet-facing services | Exposure right now | Arguing about severity instead of fixing |
| Share of services with a named owner | Whether anyone can act | Owners who left the company |
| Share of critical services with checks in the pipeline | Coverage | Checks that run but block nothing and alert nobody |
| Features threat modelled before launch | How early you are involved | Models done after launch to tick a box |
| Repeat findings of the same type | Whether fixes teach anything | Small samples that swing a lot |
Ask the developers too
Some of the most useful signals are not in any tool. Do teams invite you to design reviews? Do engineers report suspicious things to you? Do they argue less about findings than they did in month one? Ask a few of them, every month or two, what is working and what is in their way.
The question you might not ask out loud
My numbers look worse than last month. Should I worry?
Not necessarily. Adding a service to the inventory or turning on a new check often makes numbers look worse, because you are now seeing what was always there. Say that plainly in your report. Trends over a few months matter more than one month.
Reporting upward
- Lead with a sentence on exposure: what is most at risk right now, and what you are doing about it.
- Show two or three measures as trends, not snapshots.
- Name one thing you need: a decision, an owner or time from a team.
- Keep it to one page. Detail goes in an appendix nobody has to read.
Rule of thumb:Every measure can be gamed. Pick a few, explain how each could mislead and look at them together rather than one at a time.
Agree the definitions with the teams before you publish anything. When does the clock start: when a scanner flags something, or when a person confirms it? What counts as fixed: merged, or running in production? Settling these early stops arguments later and makes the numbers something engineers recognise rather than something done to them.
Practise it next: Practise choosing measures that tell leaders about risk instead of activity. Board Metrics Selection Lab
Choose your own adventure: 180 days
By month six you know the place. Pick one deeper programme that fits what you have learned.
Four paths for months 4 to 6
Months 4–6
By month four you have a pipeline map, an inventory, a triage habit and some trust with engineers. You cannot do everything next. Pick one programme, based on what the first three months showed you, and do it properly.
Path 1: security champions
A champions programme gives each development team a person with an interest in security, some extra training and a direct line to you. It scales you across teams you cannot attend every week. OWASP runs a Security Champions Guide project for organisations building one.
- Choose this if you have many teams and not enough of you.
- Make it voluntary, give champions real time for it and recognise their work in front of their managers.
Path 2: AI red team
If your products depend on AI features, test them the way an attacker would: try to make them reveal data, ignore rules, call tools they should not or produce harmful output. Use the OWASP Top 10 for LLM Applications as a starting checklist.
- Choose this if AI features are central to the product or growing fast.
- Agree scope and rules in writing first, and report findings the same way as any other.
Path 3: supply-chain security
Go deeper on what you started in month one: a bill of materials for key services, signed builds, reviewed updates and an approved list for model files and MCP servers.
- Choose this if your inventory showed many dependencies, unclear build steps or a lot of downloaded models.
Path 4: API security
APIs carry most of the data in modern products. The OWASP API Security Top 10 2023 puts Broken Object Level Authorization first: one user reading another user’s records by changing an ID. These flaws are rarely caught by generic scanners and need testing that understands the business logic.
- Choose this if your inventory is mostly APIs, or partners and mobile apps consume them directly.
The question you might not ask out loud
What if my manager wants a different path from the one I would choose?
Show them the evidence from your first three months: the inventory, the findings, the incidents. If they still prefer another path, they may know something you do not, such as a customer requirement. Ask what it is, then commit.
Rule of thumb:Whichever path you choose, write down what success looks like at month six before you start, so you can tell whether it worked.
Practise it next: Labs and tools for the API path, mapped to the OWASP API Security Top 10. API Security Hub
Sources: OWASP Security Champions Guide (project page) (read 2026-11-14); OWASP Top 10 for LLM Applications 2025 (read 2026-11-14); OWASP API Security Top 10 2023 (read 2026-11-14)
Epilogue
What AppSec as a field is not good at, so you can avoid repeating it.
What AppSec is not good at
Month 6 and after
Application security has done a lot of good. It also has habits that make engineers wary of it. You will be tempted by each one, usually under pressure. Knowing them by name makes them easier to resist.
Blocking releases
Stopping a release feels like the strongest thing a security person can do. Sometimes it is right. More often it teaches teams to bring you in late, or not at all. If you find yourself wanting to block a release, ask why you are only hearing about this now. That is usually the real problem.
- Prefer a fix with a date over a block.
- If you must block, explain the risk in plain words and offer the smallest change that would unblock it.
- Afterwards, find out how to get involved earlier next time.
Tool sprawl
Each new scanner promises to find what the others miss. Each also brings its own dashboard, its own false positives and its own integration to maintain. Several tools reporting the same issue in different words is noise, not coverage.
- Before adding a tool, name the gap it fills and the tool it might replace.
- Count the time to tune and maintain it, not just the licence.
- Send results to one place developers already look.
Reports nobody reads
Long reports full of findings, colour-coded by severity, often go unread. Not because people do not care, but because nothing in them tells a busy reader what to do next.
- Lead with the one or two decisions you need.
- Write for the person who will act, in their language.
- If nobody asks about a regular report, ask whether it should still exist.
The question you might not ask out loud
If I do less blocking and fewer reports, will people think I am doing less?
Some might at first. Over time, faster fixes, earlier involvement and engineers who come to you on their own are hard to miss. Those are the results you were hired for.
Rule of thumb:The best compliment an AppSec person can get is a developer saying they asked security early because it made their work easier.
Six months in, you know more about this codebase than most people outside the teams that wrote it. Use that to help them ship safely, not to stand in their way.
Practise it next: Practise approving risky pipeline changes with conditions instead of a flat no. DevSecOps change lab
Glossary
- AI bill of materials (AIBOM):
- A list of the models, datasets and AI components a system uses, with versions and sources.
- API:
- Application programming interface: a way for programs to talk to each other.
- AppSec:
- Application security: making the software an organisation builds or buys safer.
- Artefact:
- A file produced by a build, such as a container image or package, that gets deployed.
- Attack surface:
- Every place an attacker could try to interact with a system.
- Blameless review:
- An incident review that looks for system causes rather than a person to blame.
- BOLA:
- Broken Object Level Authorization: one user reaching another user’s data by changing an identifier.
- Branch protection:
- Rules that stop changes reaching a main branch without review or checks.
- CI/CD:
- Continuous integration and delivery: the automated pipeline that builds, tests and deploys code.
- Container image:
- A packaged application with everything it needs to run.
- CVE:
- Common Vulnerabilities and Exposures: a public identifier for a known vulnerability.
- DAST:
- Dynamic application security testing: testing a running application from the outside.
- Dependency:
- Third-party code your software relies on, such as an open source package.
- Excessive agency:
- An AI feature able to take more actions, or broader ones, than it needs.
- False positive:
- A finding that a tool reports but that is not a real problem.
- Feature flag:
- A switch that turns a feature on or off without a new deploy.
- Git history:
- The full record of past changes in a repository, including deleted content.
- Guardrail:
- A check or limit around an AI model that catches or blocks unwanted behaviour.
- IAST:
- Interactive application security testing: watching the application from inside while it runs.
- Indirect prompt injection:
- Instructions hidden in content an AI model reads, written by someone other than the user.
- Injection:
- Untrusted input treated as code or commands, such as SQL injection.
- Inventory:
- A list of what an organisation runs, with owners and exposure.
- Least privilege:
- Giving a person, service or tool only the access it needs, and no more.
- LLM:
- Large language model: an AI model that reads and writes text.
- Lock file:
- A file that records the exact versions of every dependency a project uses.
- MCP:
- Model Context Protocol: a standard way for AI assistants to connect to tools and data.
- MCP server:
- A program that exposes tools or data to an AI assistant over MCP.
- ML-BOM:
- Machine learning bill of materials: the CycloneDX format for listing models and datasets.
- Model card:
- A short document describing a model, how it was trained and its limits.
- OWASP:
- Open Worldwide Application Security Project: a non-profit that publishes free security guidance.
- Pickle:
- A Python file format that can run code when loaded; risky for untrusted model files.
- Pinning:
- Fixing a dependency or plugin to an exact version so it cannot change silently.
- Pipeline:
- The automated steps that take code from a commit to production.
- Prompt injection:
- Text that makes an AI model follow an attacker’s instructions instead of the intended ones.
- Pull request:
- A proposed code change that others review before it is merged.
- Red team:
- People who test a system by acting as an attacker, with permission.
- Rotation:
- Replacing a secret with a new one and retiring the old one.
- Safetensors:
- A model file format that stores weights only, without code that runs on load.
- SAST:
- Static application security testing: scanning source code without running it.
- SBOM:
- Software bill of materials: a list of the components inside a piece of software.
- SCA:
- Software composition analysis: tools that find known problems in dependencies.
- Scope:
- The set of permissions a token or credential grants.
- Secret:
- A password, key or token that grants access and must be kept private.
- Security champion:
- A developer with an interest in security who acts as a link between a team and AppSec.
- Severity:
- How bad a flaw would be if exploited, often combined with exposure to set priority.
- Supply chain:
- Everything outside your own code that goes into what you ship, including your build tools.
- System prompt:
- Hidden instructions given to an AI model by the application, not the user.
- Threat model:
- A structured look at what could go wrong with a system and what to do about it.
- Time to fix:
- How long a confirmed flaw stays open, from discovery to a fix in production.
- Token passthrough:
- An MCP server forwarding a token it did not check was issued to it; the MCP spec forbids it.
- Trust boundary:
- A point where data or control passes between parts with different levels of trust.
- Typosquatting:
- Publishing a malicious package with a name close to a popular one.