<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Offended Security</title><description>Because security just isn&apos;t offensive enough</description><link>https://www.offendedsecurity.net/</link><language>en-AU</language><item><title>The first taste is always free</title><link>https://www.offendedsecurity.net/p/the-first-taste-is-always-free/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/the-first-taste-is-always-free/</guid><description>The only plan you should rely on is what you do when token plans aren&apos;t there anymore. If I walked into your office today and told you if you gave me $200 dollars a month you could have $14,000 in exchange what would you do?</description><pubDate>Tue, 07 Jul 2026 07:32:46 GMT</pubDate><content:encoded>&lt;p&gt;If I walked into your office today and told you if you gave me $200 dollars a month you could have $14,000 in exchange what would you do? I assume that I would be getting a quick trip to the lobby and a stern talking to by the police along with people asking as to how I got into the building. I would probably say that response would be entirely justified.&lt;/p&gt;
&lt;p&gt;However, I wasn’t lying: today, in the market, there exists an arbitrage opportunity that allows businesses and individuals to get &lt;strong&gt;exactly&lt;/strong&gt; this deal. For example, &lt;a href=&quot;https://www.techspot.com/news/112759-openai-anthropic-cant-afford-have-everyone-use-ai.html&quot;&gt;SemiAnalysis&lt;/a&gt; found that a maxed-out ChatGPT Pro plan, run hard, can pull as much as $14,000 in API-equivalent value. The economics are absolutely mind boggling, it’s estimated a maxed Pro user burns $3,500 of actual compute against $200 of revenue, a 17.5x gap on cost alone.&lt;/p&gt;
&lt;p&gt;In the world of technology, venture backed loss-led market capture is the norm. We’ve seen it with Uber, Amazon, and PayPal among many others. I don’t believe that any of them quite met the aggressive attempts that we are seeing with OpenAI and Anthropic though. The most concerning part is that it works and &lt;strong&gt;continues&lt;/strong&gt; to work. Right now businesses are reconfiguring themselves around this massively discounted model and getting the shock of their lives when they truly discover just how much reality costs. Uber themselves, the undisputed masters of loss-led market capture fell for their own game blowing through their &lt;a href=&quot;https://www.forbes.com/sites/janakirammsv/2026/05/17/uber-burns-its-2026-ai-budget-in-four-months-on-claude-code/&quot;&gt;entire AI budget for 2026 in 4 months&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;The number of businesses making this decision is growing:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;On their Q2 earnings call Microsoft disclosed that GitHub Copilot had 4.7M paid subscribers (up 75% YoY) across 90% of the Fortune 100&lt;/li&gt;
&lt;li&gt;Cursor hit 1M+ paid customers across 70% of the Fortune 1000&lt;/li&gt;
&lt;li&gt;ChatGPT has reached 900M weekly users with 9M+ paying business users representing 92% of the Fortune 500&lt;/li&gt;
&lt;li&gt;Anthropic serves 300,000+ business customers&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The level of exposure to pricing shock is deep, these numbers represent millions of seats embedded in hundreds of thousands of organisations.&lt;/p&gt;
&lt;p&gt;Startups aren’t immune from this either. Y Combinator&amp;#39;s Spring 2025 batch was ~46% AI-agent startups (67 of 144). A quarter of the W25 batch had codebases ~95% AI-generated leaving them likely entirely dependent for ongoing feature and maintenance work.&lt;/p&gt;
&lt;p&gt;To be honest though, I can’t blame them. I mean they’re getting one hell of a bargain right now. Unfortunately, it’s a bargain that’s &lt;a href=&quot;https://en.wikipedia.org/wiki/Deal_with_the_Devil&quot;&gt;Faustian&lt;/a&gt; at best. You’re getting the ability to do knowledge/engineering work for 1/17th of the cost it should be. In exchange you get to build your entire business on a shifting substrate. The only plan worth relying on is the one you have for when the subsidy ends.&lt;/p&gt;
&lt;h1&gt;The First Taste Is Free but the Rest Is Going to Cost You&lt;/h1&gt;
&lt;p&gt;I think taking this deal without properly preparing is extremely dangerous. Repricing shock and vendor concentration represent near-existential risks to ill-prepared businesses &lt;strong&gt;right now&lt;/strong&gt;. With a shocking near-consistency across the board tweaks, adjustments and retirements are being made to pricing models in real-time:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;GitHub has rapidly retracted its token offerings moving to a limit based system in June 2025 and doing away with included capacity June 2026, at which point users reported burning: &amp;quot;8 percent of my monthly AI Credits allocation in two hours… my 7,000-unit quota will be depleted in less than two days”.&lt;/li&gt;
&lt;li&gt;Anthropic moved their Enterprise offering to seat cost with API rates in Nov 2025. Existing token plans/discount rates were permitted to continue until March 2026 and have been retired since then.&lt;/li&gt;
&lt;/ul&gt;
&lt;div class=&quot;embedded-diagram&quot;&gt;
&lt;div style=&quot;max-width:720px;margin:0 auto;padding:8px 0;font-family:-apple-system,BlinkMacSystemFont,&apos;Segoe UI&apos;,Helvetica,Arial,sans-serif;color:#1f1f1c;-webkit-font-smoothing:antialiased;&quot;&gt;
&lt;div style=&quot;margin-bottom:20px;&quot;&gt;
&lt;div style=&quot;font-size:20px;font-weight:600;line-height:1.3;&quot;&gt;The reality of token plans&lt;/div&gt;
&lt;div style=&quot;font-size:14px;color:#6b6a63;margin-top:4px;&quot;&gt;Enterprise and business AI pricing repriced in real time, late 2024 – mid 2026&lt;/div&gt;
&lt;div style=&quot;display:flex;margin-top:12px;font-size:12px;color:#6b6a63;flex-wrap:wrap;&quot;&gt;
&lt;span style=&quot;display:inline-flex;align-items:center;&quot;&gt;&lt;span style=&quot;width:11px;height:11px;border-radius:3px;background:#D85A30;display:inline-block;&quot;&gt;&lt;/span&gt;Moved to metered / consumption / outcome billing&lt;/span&gt;
&lt;span style=&quot;display:inline-flex;align-items:center;&quot;&gt;&lt;span style=&quot;width:11px;height:11px;border-radius:3px;background:#EF9F27;display:inline-block;&quot;&gt;&lt;/span&gt;Bundled AI in and raised base prices&lt;/span&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;position:relative;padding-left:150px;&quot;&gt;
&lt;div style=&quot;position:absolute;left:122px;top:6px;bottom:6px;width:2px;background:#e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;position:relative;margin-bottom:16px;&quot;&gt;
&lt;div style=&quot;position:absolute;left:-150px;width:110px;text-align:right;font-size:12px;font-weight:600;color:#6b6a63;top:15px;&quot;&gt;Oct 2024 – late 2025&lt;/div&gt;
&lt;div style=&quot;position:absolute;left:-34px;top:14px;width:14px;height:14px;border-radius:50%;background:#D85A30;border:2px solid #fff;box-shadow:0 0 0 1px #e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;border:1px solid #e3e1d8;border-left:3px solid #D85A30;border-radius:8px;padding:12px 14px;background:#faf9f5;&quot;&gt;
&lt;div style=&quot;font-size:15px;font-weight:600;&quot;&gt;Salesforce Agentforce&lt;/div&gt;
&lt;div style=&quot;font-size:13px;color:#4a4a45;line-height:1.55;margin-top:3px;&quot;&gt;Three pricing models in roughly 18 months: $2 per conversation, then Flex Credits at $0.10 per action (May 2025) after the flat model was criticised as unpredictable, then per-user &quot;digital labour&quot; licences from $125/user. All three now run at once.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;position:relative;margin-bottom:16px;&quot;&gt;
&lt;div style=&quot;position:absolute;left:-150px;width:110px;text-align:right;font-size:12px;font-weight:600;color:#6b6a63;top:15px;&quot;&gt;Mar 2025&lt;/div&gt;
&lt;div style=&quot;position:absolute;left:-34px;top:14px;width:14px;height:14px;border-radius:50%;background:#EF9F27;border:2px solid #fff;box-shadow:0 0 0 1px #e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;border:1px solid #e3e1d8;border-left:3px solid #EF9F27;border-radius:8px;padding:12px 14px;background:#fdf8ef;&quot;&gt;
&lt;div style=&quot;font-size:15px;font-weight:600;&quot;&gt;Google Workspace&lt;/div&gt;
&lt;div style=&quot;font-size:13px;color:#4a4a45;line-height:1.55;margin-top:3px;&quot;&gt;Retired the standalone Gemini add-ons, folded AI into every tier and raised base prices across the board. Customers who never asked for AI paid for it anyway through a higher per-seat rate.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;position:relative;margin-bottom:16px;&quot;&gt;
&lt;div style=&quot;position:absolute;left:-150px;width:110px;text-align:right;font-size:12px;font-weight:600;color:#6b6a63;top:15px;&quot;&gt;Apr 2026&lt;/div&gt;
&lt;div style=&quot;position:absolute;left:-34px;top:14px;width:14px;height:14px;border-radius:50%;background:#D85A30;border:2px solid #fff;box-shadow:0 0 0 1px #e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;border:1px solid #e3e1d8;border-left:3px solid #D85A30;border-radius:8px;padding:12px 14px;background:#faf9f5;&quot;&gt;
&lt;div style=&quot;font-size:15px;font-weight:600;&quot;&gt;OpenAI Codex&lt;/div&gt;
&lt;div style=&quot;font-size:13px;color:#4a4a45;line-height:1.55;margin-top:3px;&quot;&gt;Moved Business and all Enterprise plans to token-based billing (2 Apr, extended to existing Enterprise 23 Apr). New pay-as-you-go Codex seats were later pulled from new Business plans.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;position:relative;margin-bottom:16px;&quot;&gt;
&lt;div style=&quot;position:absolute;left:-150px;width:110px;text-align:right;font-size:12px;font-weight:600;color:#6b6a63;top:15px;&quot;&gt;2025 – 2026&lt;/div&gt;
&lt;div style=&quot;position:absolute;left:-34px;top:14px;width:14px;height:14px;border-radius:50%;background:#D85A30;border:2px solid #fff;box-shadow:0 0 0 1px #e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;border:1px solid #e3e1d8;border-left:3px solid #D85A30;border-radius:8px;padding:12px 14px;background:#faf9f5;&quot;&gt;
&lt;div style=&quot;font-size:15px;font-weight:600;&quot;&gt;Zendesk&lt;/div&gt;
&lt;div style=&quot;font-size:13px;color:#4a4a45;line-height:1.55;margin-top:3px;&quot;&gt;Shifted AI-agent support pricing to outcome-based billing, roughly $1.50 per automated resolution ($2 on pay-as-you-go). The more work the agent does, the higher the bill, decoupled from seat count.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;position:relative;margin-bottom:0;&quot;&gt;
&lt;div style=&quot;position:absolute;left:-150px;width:110px;text-align:right;font-size:12px;font-weight:600;color:#6b6a63;top:15px;&quot;&gt;Dec 2025 → Jul 2026&lt;/div&gt;
&lt;div style=&quot;position:absolute;left:-34px;top:14px;width:14px;height:14px;border-radius:50%;background:#EF9F27;border:2px solid #fff;box-shadow:0 0 0 1px #e3e1d8;&quot;&gt;&lt;/div&gt;
&lt;div style=&quot;border:1px solid #e3e1d8;border-left:3px solid #EF9F27;border-radius:8px;padding:12px 14px;background:#fdf8ef;&quot;&gt;
&lt;div style=&quot;font-size:15px;font-weight:600;&quot;&gt;Microsoft 365&lt;/div&gt;
&lt;div style=&quot;font-size:13px;color:#4a4a45;line-height:1.55;margin-top:3px;&quot;&gt;Announced 4 Dec 2025, live 1 Jul 2026: base-suite prices up 5–43% with Copilot Chat folded into most tiers. The Nov 2025 removal of Enterprise Agreement volume discounts pushed the real increase higher still.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;div style=&quot;font-size:11px;color:#9a998f;margin-top:18px;line-height:1.5;&quot;&gt;Dates reflect announcement or effective dates as reported late 2024 – mid 2026. Pricing figures are list prices and subject to change.&lt;/div&gt;
&lt;/div&gt;
&lt;/div&gt;&lt;h1&gt;The Painted on Escape-hatch&lt;/h1&gt;
&lt;p&gt;Pricing alone is not the killer in this situation. Businesses will vote with their wallets. They can and will shop around and let the market handle the rest. Thus, there is an escape hatch if pricing were the only risk in the balance. Unfortunately this escape hatch is rusty at best, if not entirely painted on. Menlo Ventures’ (and note Menlo is an Anthropic investor, so apply some scepticism) 2025 survey indicated that around 88% of enterprise spend is with three companies: Anthropic at 40%, OpenAI at 27% and Google at 21%. This shows it’s really a market with 3 doors to choose from and every single one leads to the same hallway: a rent-seeking landlord repricing your unsustainable workloads.&lt;/p&gt;
&lt;p&gt;Even if this weren’t the case I don’t think that switching a model or provider is in any way the hard part. From the perspective of API’s the big three are basically indistinguishable and making a swap is often a single line change. The same Menlo survey found that only 11% of teams switched vendors in a year, and most that moved simply upgraded to a newer model from an existing provider. If the model layer was a limiting factor this would be a much smaller problem.&lt;/p&gt;
&lt;p&gt;The lock-in isn’t the model. It’s what you build around and on top of it. It’s the prompts that are tuned to model specific quirks, the agent harness that supports a single tool-calling format, the eval suite that assumes a model’s behaviour and the context layer plumbed around a particular window size. The knowledge you only gain building on a model and fixing it in anger. None of this translates cleanly from model to model even on the same provider. You don’t migrate a model, you migrate scaffolding that is shaped and supported by that model.&lt;/p&gt;
&lt;p&gt;This is where the trap closes especially in the startup space. That quarter of YC startups with their 95% AI generated codebases? Those are all codebases that no one fully understands, that require the tool that wrote it to keep extending and maintaining it. Your agreement with Anthropic and OpenAI, made upon terms that likely will no longer exist, is entirely load bearing. When the price moves and it will, there is no way you’re bringing that back in-house in any reasonable or sustainable timeframe.&lt;/p&gt;
&lt;p&gt;So the two risks are not separate after all. Repricing is the event. Concentration is why you cannot dodge it. And the scaffolding you built to move fast on cheap tokens is the reason you are still standing in the doorway when the rent goes up.&lt;/p&gt;
&lt;h1&gt;Responsible Use of AI&lt;/h1&gt;
&lt;p&gt;To be clear: I am not advocating that you don’t use the tools. Nor am I advocating for you to stop taking advantage of the arbitrage opportunity. The deal is real, the productivity is unreal and sitting it out is a massive missed advantage. The point I am making is that you can take a free taste and not get hooked. Here are a few things that separate businesses that live and those that melt.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Price based on reality before you commit&lt;/strong&gt;. Regardless of the plan quota price your workflow at metered API rates and budget against that number. This is especially relevant if you’re building products that rely on these. The gap is the subsidy and the subsidy is being withdrawn. If the economics only work at the promotional price, you haven’t got a business you’ve got a countdown.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Put a gateway between you and the&lt;/strong&gt; &lt;strong&gt;provider.&lt;/strong&gt; Route everything through a point you control, OpenRouter, LiteLLM, Cloudflare AI Gateway. This makes provider changes substantially easier. You also get spend visibility and attribution so you can readily manage your future costs. This is a massive leverage point because you’re attacking the problem at the layer where switching is cheap.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep the scaffolding portable.&lt;/strong&gt; The lock-in lives in the prompts, the harness, and the evals, so treat them as your core assets to protect. Abstract tool-calling format. Keep an eval suite that runs against multiple models and optimise for more than just your current choice this might also help you find a cheaper option. Resist tuning a task to a single model beyond what that task &lt;strong&gt;genuinely&lt;/strong&gt; requires. Portability isn’t free, but it’s substantially cheaper than a forced migration on a timetable you don’t control.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Turn on hard spending caps.&lt;/strong&gt; Tokenmaxxing is a big-tech luxury. You are statistically not from big tech. Set hard limits and run as if the caps are already binding. Set limits, run as if they are there. On most platforms the spending caps are off by default. This is how you accidentally get a 4/5/6 figure bill. Wire spend alerts and budgets the same way you wire your cloud infrastructure because it’s exactly the same.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Negotiate for continuity, not just price.&lt;/strong&gt; At renewal the terms that matter are the ones that survive repricing. This means: caps that throttle rather than bill above a ceiling, protection against midterm renegotiation and some guarantee of version and price continuity for the life of the contract. While these vendors are pre-IPO they need your logo more than margin, so now is the time to ask.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Keep or get someone that understands the code.&lt;/strong&gt; This is especially for vibe-coded startups out there. If no one can maintain the thing without the tool then you’ve not built a company, you’ve built a very expensive dependency on someone else’s subsidised pricing model.&lt;/p&gt;
&lt;p&gt;The first taste is always free. It’s not a mistake, it’s a business model. The frontier labs are not running a charity, they are acquiring a market, and the discount exists to get you hooked. Take the taste, just don’t go for the ride.&lt;/p&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/the-first-taste-is-always-free-hero.webp" type="image/webp"/><category>AI</category></item><item><title>Skepticism is not a strategy, despair is not doing something</title><link>https://www.offendedsecurity.net/p/skepticism-is-not-a-strategy/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/skepticism-is-not-a-strategy/</guid><description>or how I learnt to stop worrying and be in the room. Absence is not a defence nor is refusal. AI adoption is something that will happen, LLMs do not need to be correct to be successful. They just need to be close enough. Your developers are going to use AI, your HR staff are going to use AI and your executives are going to push AI.</description><pubDate>Wed, 01 Jul 2026 00:53:52 GMT</pubDate><content:encoded>&lt;p&gt;Working in security is a commitment to a career of cognitive dissonance. Our work requires (more like &lt;strong&gt;demands&lt;/strong&gt;) healthy skepticism. Yet we somehow find ourselves coming to work each day. We know about all the proverbial skeletons in the closet of services, devices and apps and all the myriad ways in which they could go wrong and yet we have committed ourselves to fixing it. A curious skeptical nature mixed with a bizarre desire to do good will get you very far in security.&lt;/p&gt;
&lt;p&gt;It might also be your undoing. The same instinct that makes you good at this job, assuming everything will break, can quietly become the reason you refuse to engage when something new shows up.&lt;/p&gt;
&lt;h2&gt;Epistemic and defensive skepticism&lt;/h2&gt;
&lt;p&gt;Skepticism is an interesting concept philosophically. It can present as both a defence mechanism and an epistemic (meaning a means of seeking knowledge) virtue and separating between which brand you have requires self examination. A fair distinguishing feature between epistemic and defensive skepticism is the direction in which it faces. An epistemic skeptic is equally skeptical of all things, seeks balance between belief and evidence and withholds or caveats judgement under uncertainty. This framework is applied uniformly to both internal and external ideas or values. Whereas a defensive skeptic typically applies this framework only to that which threatens existing beliefs or could introduce emotional risk. This leaves uncomfortable assumptions unexamined and is arguably just a form of intellectualisation rather than a legitimate desire to be more critically minded.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Are you fairly applying your skepticism to AI?&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;Defensive skepticism in practice&lt;/h2&gt;
&lt;p&gt;It’s likely you’ve experienced this before, perhaps it’s something you might upon reflection notice in yourself. Refusing to evaluate or approve AI tooling because “it represents too great a risk”, yet not choosing to understand it. Being critical of those that use AI as part of their workflow, not because their approach is flawed, but because they have an approach at all. Or perhaps you’ve seen the perpetual sandman. Not reading, not testing, not forming an opinion and treating that absence as a position. These all seem like unique and perhaps understandable responses but they all produce the same outcome: you’re not in the room when it matters.&lt;/p&gt;
&lt;h2&gt;The price of being defensive&lt;/h2&gt;
&lt;p&gt;Absence is not a defence nor is refusal. AI adoption is something that will happen, LLMs do not need to be &lt;em&gt;correct&lt;/em&gt; to be successful. They just need to be close enough. Your developers are going to use AI, your HR staff are going to use AI and your executives are going to push AI. In security we frequently talk about &lt;strong&gt;Known Knowns, Known Unknowns and Unknown Unknowns&lt;/strong&gt;. Usually it’s the unknowns that keep us awake at night. But here’s an unknown worth losing sleep over: In every room you’re absent from you’ve left an empty chair. That chair was your chance to help make decisions about how AI gets adopted, what guardrails should exist, what data should flow where. Those decisions are getting made right now, by those that show up. You’re on the back foot, responding not guiding, flailing not leading.&lt;/p&gt;
&lt;h2&gt;Philosophy meets practicality&lt;/h2&gt;
&lt;p&gt;Question. Why do you patch vulnerabilities? There are a lot of answers to this question, and the majority of them are correct. Consider for a moment, if you will, the futility of the practice. Do vulnerabilities ever stop? You don’t refuse to patch a vulnerability simply because there will be more. When we must, we simply do. Yet somehow this logic doesn&amp;#39;t survive contact with AI. What you&amp;#39;re doing every time you patch is &lt;a href=&quot;https://www.britannica.com/topic/The-Myth-of-Sisyphus&quot;&gt;what Camus described&lt;/a&gt;. You push the boulder knowing it rolls back. You don&amp;#39;t stop because it&amp;#39;s futile, you find meaning in the effort. Camus concluded this wasn&amp;#39;t despair, it was engagement in spite of the absurdity. &amp;quot;One must imagine Sisyphus happy.&amp;quot;&lt;/p&gt;
&lt;p&gt;So why is AI the boulder you&amp;#39;ve decided to sit down in front of?&lt;/p&gt;
&lt;h2&gt;Being in the room&lt;/h2&gt;
&lt;p&gt;So where does all this leave us? The answer is clear, &lt;strong&gt;you need to be in the room&lt;/strong&gt;. You need to be an active part of the decision making process. This does not mean you’re a cheerleader. You don’t have to be “pro-ai”. Rather you should let the very skepticism that is excluding you become a virtue. This means your solution to AI in your organisation cannot simply &lt;strong&gt;be no.&lt;/strong&gt;&lt;/p&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/skepticism-is-not-a-strategy-hero.webp" type="image/webp"/><category>AI</category><category>Philosophy</category></item><item><title>Are we post-CTF or is it simply time to rethink?</title><link>https://www.offendedsecurity.net/p/post-ctf-world/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/post-ctf-world/</guid><description>A retrospective on the CrikeyCon 11 CTF</description><pubDate>Mon, 23 Mar 2026 06:36:40 GMT</pubDate><content:encoded>&lt;p&gt;I&amp;#39;ve had the privilege of working on some amazing CTFs (Capture the Flags) in my career. From building internal ones, to delivering them for companies at cons or being part of the team running them at community events. Making challenges and seeing people learn from them is something that brings me great joy. There is a pretty insane amount of effort that goes into a good CTF. Coming up with challenges, spinning up reliable infrastructure for hundreds or thousands of people to use and wrangling a bunch of volunteers takes patience and perseverance and hundreds of hours usually crunched into a few weeks/days/hours prior to the event.&lt;/p&gt;
&lt;p&gt;CrikeyCon 11 was no exception. We had big dreams about starting earlier but soon found ourselves working right up to the bell (even pushing challenges during the event). In a lot of ways I probably wouldn&amp;#39;t change a thing about that, pressure makes diamonds.&lt;/p&gt;
&lt;p&gt;As usual I want to thank the challenge writers (you guys rock) and my fellow organisers and volunteers (you know who you are). Your continued dedication and hard work is so impressive and something you should be proud of.&lt;/p&gt;
&lt;p&gt;Without further ado, here is my retrospective for the CrikeyCon 11 CTF.&lt;/p&gt;
&lt;h2&gt;The ai-lephant in the room&lt;/h2&gt;
&lt;p&gt;For those that didn&amp;#39;t attend CrikeyCon this year or attend the closing ceremony (where were you!?) you missed what could be considered a reasonably large disruption within the CTF space: AI. Now to most CTF attendees or organisers this isn&amp;#39;t a surprise: AI is pretty well equipped to aid competitors. This year however, it definitely exceeded just aiding. We had our first competitor to simply authenticate Claude Code with their CTFd cookies and prompt it to complete the CTF. There was a lot more to it and I won&amp;#39;t steal that competitor&amp;#39;s thunder and will share/link them once they have written it up for themselves. For clarification we (the organisers of the CTF) were aware of this and largely saw it as a reasonable experiment. The surprising (or perhaps unsurprising to me) outcome was that this &lt;strong&gt;competitor won&lt;/strong&gt;. The winning competitor gracefully passed on their first prize to the non-agentic winner. The agent basically flattened our CTF completing 79 out of 80ish challenges including access control challenges but excluding lock-picking challenges.&lt;/p&gt;
&lt;p&gt;As with any disruptive technology there are different schools of thought as to what this means and I want to capture some of them for posterity.&lt;/p&gt;
&lt;h3&gt;CTFs are dead&lt;/h3&gt;
&lt;p&gt;This was probably the most common reaction from challenge writers. Writing unique challenges is hard and there is an expectation that people will put effort in to solving them. It&amp;#39;s a natural reaction, one of the greatest rewards from writing a challenge is when you absolutely nail it. Nailing a challenge has a few different forms:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;You make a challenge that gets solved by 1 team&lt;/li&gt;
&lt;li&gt;You make a challenge that fits its category and difficulty rating perfectly&lt;/li&gt;
&lt;li&gt;You make a challenge that is unique and quirky and absolutely frustrates the hell out of a team/player&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;All of these are what I personally consider success when writing a challenge. Sometimes your challenges are meant to be solved (especially 101 challenges), sometimes they aren&amp;#39;t meant to be solved and sometimes you just really want the winning team to beg you for the answer.&lt;/p&gt;
&lt;p&gt;The outcome on Saturday takes away all of these rewards. If your challenge can be solved by AI then every team has access to it, therefore point 1 doesn&amp;#39;t apply. Point 2: the category and difficulty doesn&amp;#39;t matter. And point 3? Well, Claude doesn&amp;#39;t complain. This leaves less incentive for challenge authors to create challenges which then leaves the CTF scene less vibrant and interesting.&lt;/p&gt;
&lt;h3&gt;CTFs are going to have to change but I am not quite sure how&lt;/h3&gt;
&lt;p&gt;The other reaction was: hmmm, what do we do? I call this the &lt;em&gt;what&amp;#39;s next&lt;/em&gt; reaction. Essentially these people acknowledge the coolness of the technology and are also not sure how we can incorporate it. I think this is probably the second most popular viewpoint. They see that there is a future but aren&amp;#39;t quite sure about how we get there. In some cases there is a feeling of not wanting to own the future. This is something I saw in some CTF players and challenge writers as well.&lt;/p&gt;
&lt;h3&gt;Wow this is cool / Wow this is scary&lt;/h3&gt;
&lt;p&gt;Pretty self-explanatory. Most people fall into this category. They are either excited or afraid. Either one is a perfectly natural response. I have a post I am cooking up about this topic so I won&amp;#39;t spend too much time on it.&lt;/p&gt;
&lt;h2&gt;So what does the future of CTF look like?&lt;/h2&gt;
&lt;p&gt;These are just my thoughts so take them with a grain of salt.&lt;/p&gt;
&lt;h3&gt;We probably need two streams of CTF: a classic CTF and an agentic centric CTF&lt;/h3&gt;
&lt;p&gt;The traditional CTF still has a place and I think it should continue. The reason I say this is that the core benefit for participants (aside from Lego and bragging rights) is learning. We have a responsibility to learners as CTF writers to keep giving them a place to play and learn. That being said we will probably have to begin to take a harder line towards AI within these competitions and rethink our challenges a little bit.&lt;/p&gt;
&lt;p&gt;During the CTF we offered prizes to people that would come up and admit/show us that they were using AI. We had at one point a line of 12 people waiting to show us laptops open with ChatGPT and Claude windows on display. AI is inescapable so we need to think about how we can account for that. This is going to take time and creativity.&lt;/p&gt;
&lt;p&gt;The second stream is an agentic centric stream. I have some thoughts about what this might look like.&lt;/p&gt;
&lt;h3&gt;Agent jungle gym&lt;/h3&gt;
&lt;p&gt;It has long been a desire of myself and other CrikeyCon peeps to bring back a form of the Red vs Blue CTF challenge. These are dynamic attack and defence challenges that more closely imitate the way in which attackers and defenders work in a network. I think the outcome of this weekend just past justifies that. I&amp;#39;ve sketched out something I like to call the jungle gym. It&amp;#39;s a hybrid between red vs blue and a king of the hill challenge with a bit of a twist: agents only, or a combination of agents and humans.&lt;/p&gt;
&lt;p&gt;Essentially there are three rounds. At the beginning of each round you get to submit your agent/agents. That agent is presented with a series of boxes they are tasked with protecting and a series of boxes they are tasked with attacking. The boxes they are protecting have services and flags that must remain available; this is a prerequisite to score offensive points. Points are awarded for keeping your services available and taking down other teams&amp;#39; services. Each round is a novel environment and in between rounds competitors get to work on their agentic approaches before the next one starts.&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.offendedsecurity.net/media/post-ctf-world-inline-1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;This creates an interesting and dynamic environment for players and observers and also removes the inherent edge of AI. I am also exploring how to showcase what the agents are doing, and as to if it should be run by a form of AI dungeon master that handles injects. It would also be interesting to see if a team for example decided to not use AI and compare their placing to others. This is still early stages and we are a fair way out from it. My soft goal is to run an online version of this sometime in the later half of this year. If you&amp;#39;re interested in taking part reach out to me, I will be writing and sharing more about this soon.&lt;/p&gt;
&lt;p&gt;I will also be seeking sponsors to help pay for tokens as well so that there isn&amp;#39;t a financial barrier to participation. If you&amp;#39;ve got someone that can help with that please point them in my direction.&lt;/p&gt;
&lt;h3&gt;AI has benefits for challenge creators&lt;/h3&gt;
&lt;p&gt;Writing challenges is time consuming. There are a lot of ways that we as challenge creators can use agents to improve this process.&lt;/p&gt;
&lt;p&gt;I experimented a fair bit with agents this year and have the following observations:&lt;/p&gt;
&lt;h4&gt;Agents make much better UI/UX than we would normally, especially in web challenges&lt;/h4&gt;
&lt;p&gt;UI/UX historically hasn&amp;#39;t been part of the challenge space. A lot of people that write challenges are not actively incentivised to provide a good UI for something that will be used for one day. Agents change this a bit. Having an LLM create a functioning user interface that goes over the top of your web challenge can be extremely powerful. This allows for much better visual storytelling and theming as well. We had some genuinely unique and interesting challenges that were greatly enhanced by the interface we could put on top of them.&lt;/p&gt;
&lt;h4&gt;Agents can add dynamism to challenges&lt;/h4&gt;
&lt;p&gt;Last year I experimented with agentic challenges by creating an IRC server that was populated with LLMs. Each LLM had different levels of protection from prompt injection and had a flag they needed to protect. This year we initially didn&amp;#39;t have any LLM challenges, but during the day I set myself a challenge to use an agent to build an agentic challenge and push it live before the day ended.&lt;/p&gt;
&lt;p&gt;The result was a challenge called slop-machine. Essentially, you pulled the lever and you got a random challenge displayed within an iFrame on the page. This challenge was live vibe-coded by an LLM (qwen3.5-35b-a3b, an open-source model) immediately after you pulled the lever and presented to you without a human reviewing it. Topics for challenges were mostlyweb and crypto, obviously limited by the implementation. There was an element of luck to the challenge in that you had a much greater chance of being presented with a challenge you literally could not solve (either because the LLM just borked it or the answer was wrong).&lt;/p&gt;
&lt;p&gt;It was interesting to watch. Some people came up and asked why it was so easy, while I watched others pull and pull the lever getting perpetually wrong challenges. It&amp;#39;s fun watching the non-deterministic nature of LLMs play out in real time. Dynamic interaction is a really powerful means of making an engaging and interesting challenge and I&amp;#39;ve got a lot more ideas that I will be bringing to future CTFs.&lt;/p&gt;
&lt;h4&gt;Agents are generally pretty capable of handling your 101 challenges&lt;/h4&gt;
&lt;p&gt;101 challenges are a must for any CTF, especially for Crikey. A lot of attendees are students or people new to the industry. These challenges are all very similar each year but still need to be slightly different and fit the yearly theme. These make up a reasonable portion of challenges each year and are still time consuming. Agents are great at making these (with a bit of prodding). So if you&amp;#39;re building 101 challenges, agents are your friend. Avoid trying to one-shot multiple at the same time. I tried a mix of both and the one-shot multiple challenges were extremely unreliable. Use planning mode and be clear about what you want.&lt;/p&gt;
&lt;h4&gt;Agents are better at solving challenges than writing them&lt;/h4&gt;
&lt;p&gt;In a similar vein, agents are much better at solving challenges currently than writing them. Agentic output is inherently derivative; it&amp;#39;s noisy enough to be interesting but not yet truly novel. Challenge writing requires novel thinking and current context that LLMs lack. Humans currently are still the best people to write difficult and interesting challenges. I would recommend avoiding using agents for anything beyond the easiest challenges, agent centric challenges, UI/UX, dynamic testing and writing IaC for infrastructure at the moment.&lt;/p&gt;
&lt;p&gt;Alright, enough AI.&lt;/p&gt;
&lt;h2&gt;What we did right&lt;/h2&gt;
&lt;h3&gt;Created a great vibe within the CTF room&lt;/h3&gt;
&lt;p&gt;CTFs should be social and communication/community reliance are super important skills. Participants are choosing to give up a lot of the benefits of a con by taking part so we want to try to bring them that experience. This year (thanks to our awesome community and sponsors) we had a bunch of prizes. This allowed us to come up with some interesting means of giving out prizes. Aside from the AI confessional we also had a rap battle. We offered 1000 points to the winner of the battle, giving them 45 minutes to come up with a unique rap. This was entirely off the cuff and honestly we did not expect the uptake; something like 8 teams came up and competed. We ended up having a tie for first and gave each team another 15 minutes to come up with some lines for a rap battle.&lt;/p&gt;
&lt;p&gt;The finalist teams were both university cybersecurity societies. It was awesome to see the next generation of cybersecurity being so willing to get up in front of the community and have fun. I think that says a lot about the unique community we have in our industry and it&amp;#39;s something I and the other organisers want to bring to future cons.&lt;/p&gt;
&lt;h3&gt;Improved infrastructure maturity&lt;/h3&gt;
&lt;p&gt;Last year we had a largely click-ops based approach to deploying our CTF infrastructure and I spent days making sure everything was working. This year was entirely different. Underlying infrastructure was handled by Terraform, scheduling services was handled by Nomad and challenge definition files were subject to linting and CI/CD. This wasn&amp;#39;t perfect; we had a few little blips where we had to scale up the instances larger than we expected, but it made the process of getting started so much easier. Taking the learnings from this away, I will have a post soon where I officially open source the infrastructure template I&amp;#39;ve created. My hope is that this will help everyone run better CTFs themselves.&lt;/p&gt;
&lt;p&gt;Some changes I want to make include creating traditional test harnesses as well as agentic ones, so that LLMs can have a crack at challenges. This will give us an idea as to whether our challenges are solvable via LLMs and also help spot issues with availability and performance earlier.&lt;/p&gt;
&lt;h3&gt;Fresh blood in the challenge creator space&lt;/h3&gt;
&lt;p&gt;I&amp;#39;ve said it a million times but I am so thankful for our challenge writers. I have an extra pile of thanks for our new challenge writers. You&amp;#39;ve become part of a strange dysfunctional family that is so much better for you being there. It takes a lot of courage to write a CTF challenge; you&amp;#39;re basically asking people to hack something you made. We saw some awesome challenges from new creators that were fresh, vibrant and different.&lt;/p&gt;
&lt;h2&gt;What we could do better&lt;/h2&gt;
&lt;h3&gt;Start earlier (we try)&lt;/h3&gt;
&lt;p&gt;My perpetual dream with every CTF is that I wish I&amp;#39;d started earlier. This is a pretty hard ask for our volunteers and creators so it&amp;#39;s probably going to stay a wish. There are definitely project management and organisational style bits and bobs we could implement as well.&lt;/p&gt;
&lt;h3&gt;Expand our challenge base&lt;/h3&gt;
&lt;p&gt;Lots of great feedback this year about blue team and forensics challenges. These are things we&amp;#39;d love to have more of. Our challenge make up currently reflects our creators, that is very web/offensive sec heavy. Variety is the spice of life. So if you&amp;#39;re interested in becoming a challenge writer please reach out to me. There is so much to gain from it and writing challenges is such a great way to validate understanding. We are open to any challenge from anyone and if you&amp;#39;re looking for ideas we are also full of those.&lt;/p&gt;
&lt;h3&gt;Embrace AI&lt;/h3&gt;
&lt;p&gt;I&amp;#39;ve said enough about this above. There is more we can do in this space and we will.&lt;/p&gt;
&lt;p&gt;Happy hacking and see you next year.&lt;/p&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/post-ctf-world-hero.webp" type="image/webp"/><category>AI</category><category>CTF</category></item><item><title>Is AI security really different from ProdSec?</title><link>https://www.offendedsecurity.net/p/is-ai-security-really-different-from-prodsec/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/is-ai-security-really-different-from-prodsec/</guid><description>TLDR; The majority of AI security is product or application security fundamentals applied to a new context.</description><pubDate>Tue, 11 Nov 2025 04:37:34 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://magic.beehiiv.com/v1/e40869ad-e8ef-4b50-82cb-48beffe4b820?email=%7B%7Bemail%7D%7D&quot;&gt;Subscribe to get the next post delivered directly to your inbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;In the mid-to-late 1800s humanity developed the humble beginnings of evidence based western medicine, doctors treated illness using medication (mostly opium) and performed basic surgery. We began to see reductions in mortality rates and improvements in public health. Medical history of course, didn’t end in the 1800s, beginning in the 1870s new “medical” boom occurred: patent medicine vendors travelling the countryside pitching cures.&lt;/p&gt;
&lt;p&gt;These cures weren’t for diseases that medicine was already addressing such as cholera or typhoid rather they were for entirely new ailments. Fun sounding diseases such as americanitis (the disease of living too fast), neurasthenia (exhaustion with technology) and hysteria (a dark stain on our medical history) became the modern plague. They weren’t pitched as evolutions of known diseases, rather they were new conditions that medicine couldn’t understand because it was “outdated”. Opium? How quaint, Surgery? How barbaric.&lt;/p&gt;
&lt;p&gt;The new era of disease required a new proprietary fix with its own new secret ingredients. Vendors would publish almanacs, hold lectures and make charts flooded with medical-adjacent terms and classification systems. Suddenly everyone wanted, nay, needed &lt;a href=&quot;https://www.neh.gov/article/dr-kilmers-curious-cure-all&quot;&gt;Dr Kilmer’s Swamp Root&lt;/a&gt; or &lt;a href=&quot;https://embryo.asu.edu/pages/lydia-pinkhams-vegetable-compound-1873-1906&quot;&gt;Lydia Pinkham’s Vegetable Compound&lt;/a&gt;. Doctors were dismayed, and pointed out that these new conditions were in fact just anxiety, poor diet or depression wrapped into a much better looking wrapper. This was dismissed by the public and the patent vendors as just them “not getting it”, they were out of date dinosaurs that hadn’t yet adapted to the reality of the new disease.&lt;/p&gt;
&lt;p&gt;Why is this relevant? Well, patent medicines did sometimes contain novel active ingredients (usually boatloads of cocaine and alcohol). Some potentially might have worked. Instead of integrating these discoveries or understandings into medicine, vendors built entire parallel industries around them, replete with new diagnostic frameworks and certifications. This didn’t stop in the US until 1906 when the Pure Food and Drug Act forced vendors to disclose ingredients and stop making fraudulent claims.&lt;/p&gt;
&lt;p&gt;Flash forward to the present, in the mid to late 2010s humanity developed the humble beginnings of functional AI. Whilst the concept for a large language model had existed for a while, the emergence of both the internet and affordable hardware enabled scale beyond our wildest dreams. The history of AI didn’t end in the 2010’s, in the early to late 2020’s we started to see these tools explode. The adoption of these tools without consideration or planning led to the development of an entire industry built around the need to secure these tools. This industry created its own taxonomy of threats with pretty charts and lectures designed to legitimise it. Prompt injection, emergent capabilities and model poisoning became all the rage.&lt;/p&gt;
&lt;p&gt;This new era of threats required it&amp;#39;s own proprietary practices, tools and teams. Suddenly everyone wanted what these vendors were selling. Security practitioners were dismayed and pointed out that these new conditions were in-fact just product and application security wrapped into a different, more appealing wrapper.&lt;/p&gt;
&lt;p&gt;Why is this relevant? Well there is some truth to the idea that novel security challenges exist within AI, but it’s being packaged as if there is a need for it to operate separately from ProdSec and AppSec. There is an entire parallel industry being created when its really just an extension of our existing practices with some new learnings necessary.&lt;/p&gt;
&lt;p&gt;The patent medicine industry for today’s &lt;strong&gt;ai&lt;/strong&gt;lment is inventively named AI security.&lt;/p&gt;
&lt;p&gt;We’re in an AI boom/bubble/whatever, I am not going to debate about the validity or reality of it because it isn’t relevant. You, me and everyone else have got a job to do and that job most likely involves securing something that is getting or already has AI, regardless of our feelings or opinions. Technology being technology and hype-cycles being hype-cycles we have quickly found ourselves facing a petri-dish of half-baked immature technology smearing rapidly expanding lifeforms all over the place. We’re also continually being bombarded with the latest and greatest solution to fix the problems that tend to occur when half-baked immature technology gets unleashed upon business and individuals alike. What are these problems? Are they something unique? My argument (if it wasn’t already clear) is &lt;strong&gt;no&lt;/strong&gt; and &lt;strong&gt;no.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;AI Security is largely just ProdSec and/or AppSec. Note: I say largely, because there is legitimate necessity for researchers to focus on novel attacks that might arise within these models and a need to update our classification methodologies. Furthermore there is space for new approaches to solving problems and ways that we can use these tools to our benefits. But as a defender/blue/purple teamer I struggle to see the need for this to exist as a separate discipline.&lt;/p&gt;
&lt;p&gt;AI systems are just software systems (usually APIs) with unusual/quirky characteristics. They take inputs, process them (through parameters as opposed to explicit logic) and produce outputs. The concerns these systems create map neatly to traditional product security domains. To clarify this I have outlined some of them below:&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Prompt Injection&lt;/strong&gt; aka Input Validation Failure -&lt;/p&gt;
&lt;p&gt;Regardless as to if you’re sanitising SQL inputs or sanitising prompts to prevent injection, the pattern is identical. We have our methods for addressing this including:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Input sanitisation&lt;/li&gt;
&lt;li&gt;Structured input formats&lt;/li&gt;
&lt;li&gt;Delimiters between system instructions and user input&lt;/li&gt;
&lt;li&gt;Filtering layers before processing (anyone heard of a WAF before)&lt;/li&gt;
&lt;li&gt;Output validation&lt;/li&gt;
&lt;li&gt;Principle of least privilege&lt;/li&gt;
&lt;li&gt;Input length limiting and rate limiting&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Jailbreaking&lt;/strong&gt; aka AuthN/AuthZ Bypass -&lt;/p&gt;
&lt;p&gt;Securing who can query your data and under what circumstances is the same problem whether its a model or an API.&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;System level guardrails independent of the model&lt;/li&gt;
&lt;li&gt;Filtering layers before and after processing&lt;/li&gt;
&lt;li&gt;Behavioural analysis for detecting policy violations&lt;/li&gt;
&lt;li&gt;Principle of least privilege&lt;/li&gt;
&lt;li&gt;Monitoring for known patterns (WAF again)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Model Poisoning&lt;/strong&gt; aka Software Supply Chain attack -&lt;/p&gt;
&lt;p&gt;A poisoned npm package and a backdoored model weight from Hugging Face are exactly the same threat category. Both are just third party dependencies&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Model provenance tracking and signing&lt;/li&gt;
&lt;li&gt;Model sourcing decisions&lt;/li&gt;
&lt;li&gt;SBOMs&lt;/li&gt;
&lt;li&gt;Dependency scanning&lt;/li&gt;
&lt;li&gt;Code review&lt;/li&gt;
&lt;li&gt;Integrity of training pipelines&lt;/li&gt;
&lt;li&gt;Controlled training environments&lt;/li&gt;
&lt;li&gt;Version control&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;This mapping continues all the way up and down the threat landscape and I might dedicate a large post to this alone.&lt;/p&gt;
&lt;p&gt;So what&amp;#39;s the prescription from this ProdSec lead? Extend your existing ProdSec/AppSec program to cover AI systems. Train your team on the quirks of probabilistic behaviour and adversarial ML, yes. Add some new tools for model scanning and prompt testing, absolutely. But don&amp;#39;t create a parallel security organisation. Don&amp;#39;t buy a vendor platform that treats AI security as fundamentally separate from the rest of your security posture. The patent medicine era ended when regulators forced transparency about ingredients. The AI security vendor boom will end when organisations realise they already have most of the ingredients in their existing security programs, they just need to apply them to a new (if quirky) type of software system.&lt;/p&gt;
&lt;p&gt;The patent medicine vendors were selling sugar water with cocaine. The AI security vendors are selling you AppSec/ProdSec with buzzwords. Some of the ingredients are genuinely useful. Most of what you need, you already have.&lt;/p&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/is-ai-security-really-different-from-prodsec-hero.webp" type="image/webp"/><category>AI</category></item><item><title>Practical short term steps for managing supply chain risk in JavaScript/Python</title><link>https://www.offendedsecurity.net/p/practical-steps-for-managing-supply-chain-risk-in-the-short-term/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/practical-steps-for-managing-supply-chain-risk-in-the-short-term/</guid><description>When it rains, it pours... too bad it has always been pouring in the NPM ecosystem</description><pubDate>Thu, 18 Sep 2025 02:12:45 GMT</pubDate><content:encoded>&lt;p&gt;&lt;a href=&quot;https://magic.beehiiv.com/v1/e40869ad-e8ef-4b50-82cb-48beffe4b820?email=%7B%7Bemail%7D%7D&quot;&gt;Subscribe to get the next post delivered directly to your inbox&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;If you’ve got an app that even tangentially touches NodeJS/NPM (really if you have eyes and ears) you’ve probably seen these.&lt;/p&gt;
&lt;p&gt;[&amp;quot;Shai-Hulud&amp;quot; NPM attack runs malicious GitHub Action&lt;/p&gt;
&lt;p&gt;An NPM attack compromised dozens of popular packages which then ran malicious GitHub actions in the compromised accounts&lt;/p&gt;
&lt;p&gt;getsafety.com/blog-posts/shai-hulud-npm-attack&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.offendedsecurity.net/media/practical-steps-for-managing-supply-chain-risk-in-the-short-term-inline-1.jpg&quot; alt=&quot;&quot;&gt;](&lt;a href=&quot;https://getsafety.com/blog-posts/shai-hulud-npm-attack&quot;&gt;https://getsafety.com/blog-posts/shai-hulud-npm-attack&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;[ctrl/tinycolor and 40+ NPM Packages Compromised - StepSecurity&lt;/p&gt;
&lt;p&gt;The popular @ctrl/tinycolor package with over 2 million weekly downloads has been compromised alongside 40+ other NPM packages in a sophisticated supply chain attack dubbed &amp;quot;Shai-Hulud&amp;quot;. The malware self-propagates across maintainer packages, harvests AWS/GCP/Azure credentials using TruffleHog, and establishes persistence through GitHub Actions backdoors - representing a major escalation in NPM ecosystem threats.&lt;/p&gt;
&lt;p&gt;&lt;a href=&quot;http://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised&quot;&gt;www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.offendedsecurity.net/media/practical-steps-for-managing-supply-chain-risk-in-the-short-term-inline-2.jpg&quot; alt=&quot;&quot;&gt;](&lt;a href=&quot;https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised&quot;&gt;https://www.stepsecurity.io/blog/ctrl-tinycolor-and-40-npm-packages-compromised&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;[Nx npm Packages Compromised in Supply Chain Attack Weaponizi...&lt;/p&gt;
&lt;p&gt;Malicious Nx npm versions stole secrets and wallet info using AI CLI tools; Socket’s AI scanner detected the supply chain attack and flagged the malwa...&lt;/p&gt;
&lt;p&gt;socket.dev/blog/nx-packages-compromised&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.offendedsecurity.net/media/practical-steps-for-managing-supply-chain-risk-in-the-short-term-inline-3.png&quot; alt=&quot;&quot;&gt;](&lt;a href=&quot;https://socket.dev/blog/nx-packages-compromised&quot;&gt;https://socket.dev/blog/nx-packages-compromised&lt;/a&gt;)&lt;/p&gt;
&lt;p&gt;I am not going to spend a lot of time writing about these particular pieces of malware. The posts above such as that from my mate &lt;a href=&quot;https://www.linkedin.com/in/mccartypaul/&quot;&gt;Paul McCarty&lt;/a&gt; will do the job much better than I ever could.&lt;/p&gt;
&lt;p&gt;I am also not going to talk much about how to respond to this directly. To those affected I wish you a relatively peaceful IR process.&lt;/p&gt;
&lt;p&gt;Rather, I want to spend my words talking about how we as engineers, can move forward from this, providing some steps for short term solutions, plans for medium term solutions and then thought pieces about longer term plays.&lt;/p&gt;
&lt;p&gt;Key thoughts:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Our model of dependency trust is broken and has been broken since the foundation of package managers&lt;/li&gt;
&lt;li&gt;Industry standards for managing this risk are fundamentally faulty.&lt;/li&gt;
&lt;li&gt;Manifest-based composition analysis is at best a great distraction from improving your security posture&lt;/li&gt;
&lt;li&gt;Vulnerability management is less about managing vulnerabilities and more about managing expectations, CVSS/EPSS you name it, they are all largely awful. The number of CVE’s never gets smaller and your system never gets more secure.&lt;/li&gt;
&lt;li&gt;&lt;a href=&quot;https://en.wikipedia.org/wiki/Reachability_analysis&quot;&gt;Reachability analysis&lt;/a&gt; might give us some relief from this but I’ve yet to see if actually provide benefits to triaging vulnerabilities.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Anyways on to the actual practical bits, this post is going to examine short term solutions for JavaScript and Python in a very compressed manner. I will take a look at other languages in future posts.&lt;/p&gt;
&lt;h2&gt;Pinning dependencies&lt;/h2&gt;
&lt;p&gt;Dependencies are typically specified within two key file types, &lt;strong&gt;manifest files&lt;/strong&gt; and &lt;strong&gt;lock files&lt;/strong&gt;. Manifest files &lt;code&gt;package.json&lt;/code&gt;, &lt;code&gt;go.mod&lt;/code&gt;) typically contain the list of direct dependencies e.g. ones you have explicitly installed via &lt;code&gt;npm install&lt;/code&gt; or &lt;code&gt;pip install&lt;/code&gt; . &lt;strong&gt;Lock files&lt;/strong&gt; on the other hand contain not only the direct dependencies but they typically also contain indirect or transitive dependencies as well as some form of cryptographic verification information (largely used to reduce downloading things that haven’t changed or preventing corruption).&lt;/p&gt;
&lt;p&gt;The dependencies within &lt;strong&gt;manifest&lt;/strong&gt; files are declared typically using a &lt;strong&gt;constraint format&lt;/strong&gt; such as &lt;code&gt;package_name@&amp;gt;1.2.3&lt;/code&gt; this would indicate that we are seeking to install the dependency &lt;code&gt;package_name&lt;/code&gt; with a version greater than &lt;code&gt;1.2.3&lt;/code&gt; from a package repository.&lt;/p&gt;
&lt;p&gt;Version tags as represented within most dependency repositories once published are typically available forever. There are circumstances where a package may need to be removed (such as cases of supply chain compromise) and the behaviour of the registries vary. You can see a breakdown of behaviours below.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;NPM&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: 404&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy:&lt;/strong&gt; Limited unpublishing (24-72 hours after publish) plus other conditions&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; Tombstone/placeholder for established packages&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;PyPi&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: 404&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy:&lt;/strong&gt; Authors can delete releases but not entire projects easily&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; &amp;quot;Yanked&amp;quot; releases - hidden but metadata visible&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Maven Central&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: Never returns 404&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy: Never deletes&lt;/strong&gt; - core immutability principle&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; Deprecation warnings only&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;RubyGems&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: 404&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy:&lt;/strong&gt; Complete removal possible but discouraged&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; &amp;quot;Yank&amp;quot; versions - hidden from search&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;Cargo&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: Normal response with warning&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy: Cannot delete&lt;/strong&gt; once published&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; &amp;quot;Yank&amp;quot; versions - unavailable for new projects&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;NuGet&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Response Code&lt;/strong&gt;: 404&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Removal Policy:&lt;/strong&gt; Complete deletion allowed for package owners&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Alternative Actions:&lt;/strong&gt; &amp;quot;Unlist&amp;quot; packages - hidden from search&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;We can see that some registries actually don’t have facilities for removal whatsoever rather they rely upon the behaviour of the package manager itself.&lt;/p&gt;
&lt;p&gt;These behaviours combined with the typical constraint definition within manifest files create the first component of supply chain risk.&lt;/p&gt;
&lt;p&gt;Going back to the &lt;code&gt;package_name@&amp;gt;1.2.3&lt;/code&gt; example. When all is working, a maintainer publishes &lt;code&gt;1.2.4&lt;/code&gt; and you run &lt;code&gt;npm install&lt;/code&gt; which ultimately results in you getting &lt;code&gt;v1.2.4&lt;/code&gt; of &lt;code&gt;package_name&lt;/code&gt;. What happens if (like recent compromises) a bad actor publishes &lt;code&gt;v.1.2.5&lt;/code&gt; ? Well next time you run &lt;code&gt;npm install&lt;/code&gt; you’re getting the bad version and its game over.&lt;/p&gt;
&lt;p&gt;How do we fix this?&lt;/p&gt;
&lt;h3&gt;Provide strict constraints&lt;/h3&gt;
&lt;p&gt;Define your dependencies using explicit constraints rather than wide constraints. For example you should specify &lt;code&gt;[email protected]&lt;/code&gt; rather than &lt;code&gt;package_name@&amp;gt;1.2.3&lt;/code&gt;&lt;/p&gt;
&lt;p&gt;This only protects your direct dependencies, unfortunately most dependencies have dependencies and they may not specify their dependencies in a manner that is as strict as yours.&lt;/p&gt;
&lt;h3&gt;Use &lt;a href=&quot;https://en.wikipedia.org/wiki/Deterministic_algorithm&quot;&gt;deterministic&lt;/a&gt; operating modes&lt;/h3&gt;
&lt;p&gt;The largest cause of frustration and introducer of risk within dependency managers is when they operate in a non-deterministic manner, NPM is a great example of this behaviour:&lt;/p&gt;
&lt;p&gt;Running &lt;code&gt;npm install&lt;/code&gt; results in an interesting set of behaviours&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Install performs a full dependency resolution which makes it slow. This process is necessary if you don’t already have a &lt;code&gt;package-lock.json&lt;/code&gt; but is entirely superfluous if you do.&lt;/li&gt;
&lt;li&gt;If dependencies (either direct or indirect) have loose constraints &lt;code&gt;install&lt;/code&gt; will update them transparently without prompting. This is fine if you intend it, but can be a disaster when security is the aim.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Arguably this violates the entire point of a &lt;strong&gt;lock file&lt;/strong&gt; but hey.&lt;/p&gt;
&lt;p&gt;NPM offers an alternative install mode called &lt;code&gt;ci&lt;/code&gt; which is designed to install exactly what is within the &lt;code&gt;package-lock.json&lt;/code&gt; and will fail if it doesn’t match or can’t be installed.&lt;/p&gt;
&lt;p&gt;So for NPM people:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Developers:&lt;/strong&gt; Use &lt;code&gt;npm install&lt;/code&gt; when adding or upgrading dependencies, then commit &lt;code&gt;package-lock.json&lt;/code&gt;. Afterwards use &lt;code&gt;npm ci&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;CI/CD &amp;amp; Production:&lt;/strong&gt; Always use &lt;code&gt;npm ci&lt;/code&gt; to guarantee a clean, reproducible install.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;I’ve highlighted similar operating modes for other dependency tools within the Javascript/Python ecosystem.&lt;/p&gt;
&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Package Manager&lt;/th&gt;
&lt;th&gt;npm ci Equivalent&lt;/th&gt;
&lt;th&gt;Deterministic&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;&lt;tr&gt;
&lt;td&gt;yarn&lt;/td&gt;
&lt;td&gt;&lt;code&gt;yarn install --frozen-lockfile&lt;/code&gt; or &lt;code&gt;yarn install --immutable&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pnpm&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pnpm install --frozen-lockfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;bun&lt;/td&gt;
&lt;td&gt;&lt;code&gt;bun install --frozen-lockfile&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;pip&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pip-sync&lt;/code&gt; (pip-tools)&lt;/td&gt;
&lt;td&gt;⚠️ Limited (External tool)&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Poetry&lt;/td&gt;
&lt;td&gt;&lt;code&gt;poetry install&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Pipenv&lt;/td&gt;
&lt;td&gt;&lt;code&gt;pipenv sync&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;uv&lt;/td&gt;
&lt;td&gt;&lt;code&gt;uv sync --frozen&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;✅ Yes&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;&lt;/table&gt;
&lt;p&gt;&lt;strong&gt;Pythonistas:&lt;/strong&gt; I recommend the use of Astral’s &lt;code&gt;uv&lt;/code&gt; dependency manager. It’s just all around better than any other dependency manager from a speed and safety perspective.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Js/Ts Developers:&lt;/strong&gt; I recommend the use of &lt;code&gt;bun&lt;/code&gt; or &lt;code&gt;pnpm&lt;/code&gt;. Again these are just all around better than the other options.&lt;/p&gt;
&lt;p&gt;❝&lt;/p&gt;
&lt;p&gt;Use deterministic operating modes of dependency managers combined with explicit version constraints to ensure you aren’t getting the latest versions of dependencies without explicitly seeking them.&lt;/p&gt;
&lt;p&gt;Takeaway 1&lt;/p&gt;
&lt;h2&gt;Disabling or limiting lifecycle scripts&lt;/h2&gt;
&lt;p&gt;A common feature of dependency managers is their ability to run scripts through the lifecycle of the package install process e.g. pre/post install. These are also an extremely common attack path for malware authors as they tend to be overlooked by security tooling. Sources for numbers below will be provided in a research doc.&lt;/p&gt;
&lt;h4&gt;Javascript&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total Packages:&lt;/strong&gt; 2.5M+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle Hooks:&lt;/strong&gt; 2.2% use install scripts (~55,000)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Malicious Usage&lt;/strong&gt;: 0.9-1.3%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Javascript ecosystem is the clearest case for disabling lifecycle hook scripts**,** several modern dependency managers such as &lt;code&gt;bun&lt;/code&gt; and &lt;code&gt;pnpm&lt;/code&gt; actually do this by default. They require you to explicitly enable each lifecycle hook for each dependency that has them. If switching dependency managers isn’t possible you are best served by disabling them via the &lt;code&gt;npm ci --ignore-scripts&lt;/code&gt; command. If you’re in the rare situation where you need a script it is best to look at moving to &lt;code&gt;bun&lt;/code&gt; or &lt;code&gt;pnpm&lt;/code&gt;.&lt;/p&gt;
&lt;h4&gt;Python&lt;/h4&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Total Packages:&lt;/strong&gt; 530K+&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Lifecycle Hooks:&lt;/strong&gt; ~33% use setup.py (~175,000)&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Malicious Usage:&lt;/strong&gt; 0.06-0.2%&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The Python ecosystem is a little less clear, unfortunately there isn’t a direct guaranteed means of disabling pre-install scripts nor does the data really support it. There is the ability if you’re operating with a relatively well supported set of dependencies to force the installation of binary &lt;code&gt;wheel&lt;/code&gt; formats rather than building anything from source.&lt;/p&gt;
&lt;p&gt;Python as an interpreted language relies heavily upon system libraries get a lot of its work done. Some of this code needs to be built for specific systems but in most cases the interfaces they interact with are common enough across a set of systems (or the dependencies license permissive enough) that they can be pre-compiled and distributed as binary that will run just work. In the Python ecosystem these are called &lt;code&gt;wheels&lt;/code&gt; a wheel is basically zip file that contains the python source as well as the binary extensions.&lt;/p&gt;
&lt;p&gt;Using &lt;code&gt;wheels&lt;/code&gt; means you don’t execute the &lt;code&gt;setup.py&lt;/code&gt; script which closes down a vector of risk. You can force &lt;code&gt;pip&lt;/code&gt; and &lt;code&gt;uv&lt;/code&gt; to attempt to only use &lt;code&gt;wheels&lt;/code&gt; by passing the &lt;code&gt;--only-binary=all&lt;/code&gt; command. This will fail if a dependency you’re using doesn’t have a wheel though. In &lt;code&gt;pip&lt;/code&gt; you can also pass a list of dependencies that you want installed only from &lt;code&gt;wheel&lt;/code&gt; so this allows you to find the ones that have &lt;code&gt;setup.py&lt;/code&gt; scripts and specify them. Luckily &lt;code&gt;uv&lt;/code&gt; is just plain better and allows you to pass &lt;code&gt;--no-binary=some-other-package package_name&lt;/code&gt; as well, so you can specify exactly the dependencies to install from source and just audit those for risk. If you combine this with the previous suggestion of dependency pinning you are narrowing the window of risk down to when you legitimately update the dependencies that you allow pre-install scripts to run in during a supply chain attack.&lt;/p&gt;
&lt;p&gt;❝&lt;/p&gt;
&lt;p&gt;Disable lifecycle scripts within the Javascript and Python ecosystems to limit your exposure to malware.&lt;/p&gt;
&lt;p&gt;Takeaway 2&lt;/p&gt;
&lt;h5&gt;That’s enough for now, I will spend a bit of time on Java for the next post.&lt;/h5&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/practical-steps-for-managing-supply-chain-risk-in-the-short-term-hero.webp" type="image/webp"/><category>Supply Chain</category></item><item><title>Pragmatic AppSec: Part 1 - A map that reflects the territory</title><link>https://www.offendedsecurity.net/p/pragmatic-appsec-part-1-a-map-that-reflects-the-territory/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/pragmatic-appsec-part-1-a-map-that-reflects-the-territory/</guid><description>Level 0 maturity</description><pubDate>Fri, 12 Sep 2025 04:47:31 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;Welcome to my new series: Pragmatic AppSec.&lt;/strong&gt; It aims to provide security professionals at organisations that are AppSec curious with the necessary information to kickstart a program.&lt;/p&gt;
&lt;p&gt;AppSec, whilst being extremely effective is frequently deprioritised, the success of it at an organisation is frequently dependent upon a single engineers willingness to drive it. It’s important to note that this series is based off my own experience and every business is different. The aim is to make this as agnostic as possible because AppSec is for everyone that has an App. I’ve been at large companies, medium companies and very small companies and have seen and implemented various versions of this. You will see me frequently talk about discovering business needs and appetites, this is an important aspect of any cybersecurity program: &lt;strong&gt;your solution needs to be right-sized to risk, resource and scale.&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;❝&lt;/p&gt;
&lt;p&gt;Throughout the series you will see sections called Pragmatic Mantras these are designed to be thought-provoking callouts that help highlight useful tools of thought.&lt;/p&gt;
&lt;p&gt;Pragmatic Mantra Example&lt;/p&gt;
&lt;h1&gt;Prerequisites&lt;/h1&gt;
&lt;p&gt;There is no specific profile of what makes a good Appsec engineer or leader. What you’ve done in the past just determines how much work you’ll need to do to give people the right information and support. That being said there are a few stereotypical archetypes within the Appsec sphere. I’ve outlined these below for posterity.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The former pentester&lt;/strong&gt;: a lot of people in the field have worked in offensive security. This history shows in the way that they approach solving application security problems. I’d argue this strain of thinking dominates Appsec, sometimes to its detriment.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;The compliance person:&lt;/strong&gt; There is strain of compliance framework driven approaches to AppSec. This attracts a compliance centric archetype to the role. Again this background shows in the way the program runs and problems are solved.&lt;/p&gt;
&lt;p&gt;There is nothing inherently right or wrong with these archetypes and their approaches will suit different businesses differently.&lt;/p&gt;
&lt;p&gt;Fun fact: I don’t come from either of these backgrounds and a lot of the best Application security engineers I’ve met don’t either. To reflect this I figured I’d do my least favourite thing and talk about myself.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;What is my background?&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;That’s a bit of a weird one, I started by studying tech at university and spent some time writing software. I very quickly discovered that I did not want to do that and ran to Systems Administration. This changed very early onto my career into DevOps and SRE and Security kind of just led from there.&lt;/p&gt;
&lt;p&gt;The common thread woven throughout this is that I’ve spent a lot of time &lt;strong&gt;being close to engineers&lt;/strong&gt;. DevOps and SRE was all about the product and engineering interface and Developer efficiency was my aim. My early security roles were all about securing developers either through building a product for them or working as a security engineer within Developer Platforms teams. Engineers productivity and safety was the ultimate deliverable for those roles.&lt;/p&gt;
&lt;p&gt;As you will soon see successful Application Security &lt;em&gt;&lt;strong&gt;requires working closely and considerately with engineers&lt;/strong&gt;&lt;/em&gt;. Their productivity is the primary currency (aside from dollars) that we spend when we add security to a process.&lt;/p&gt;
&lt;p&gt;❝&lt;/p&gt;
&lt;p&gt;Engineers productivity is the currency of AppSec, spend it wisely&lt;/p&gt;
&lt;p&gt;Pragmatic Mantra 1&lt;/p&gt;
&lt;p&gt;Part 1 of this series looks at creating a common understanding of not only what AppSec is, but the establishment of an underlying map that helps guide you towards success. It’s not the most practical of the series but is certainly one of the most important. We are establishing the common language a.k.a the &lt;em&gt;lingua franca&lt;/em&gt; of AppSec.&lt;/p&gt;
&lt;h1&gt;What is AppSec?&lt;/h1&gt;
&lt;p&gt;AppSec, rightly or wrongly, means a lot of different things to different people and that’s great! But for a program to work we need a common definition. Security historically was an afterthought, we built software and then worried about security. This is generally regarded as a bad idea, software is a brittle and fickle entity that will happily work its way around any badly structured controls. As the concept of SaaS became the predominate form of software consumption we quickly discovered through black eyes and breaches that we needed to change how we approached software security. Application Security or AppSec arose to fill this need.&lt;/p&gt;
&lt;p&gt;If you asked most people what AppSec is the answer you will get is something along the lines of:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Application security is the practice of protecting software applications throughout their lifecycle by identifying, fixing and preventing security vulnerabilities through secure coding practices, automated testing tools, security reviews and runtime protection.&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;This is a great description of the kinds of tools and processes that are involved in an AppSec program but I would argue it really misses the crux of AppSec. &lt;strong&gt;Culture&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;I like to define AppSec as:&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Application Security (AppSec) is the practice of empowering engineering teams to build secure software through architectural guidance and frictionless, well-integrated tooling that enhance delivery velocity rather than impede it. AppSec prioritises secure architecture and design guidance over tooling alone, with tools serving to support and execute that guidance effectively. Success depends on cultivating a security-conscious culture and communicating meaningful metrics tailored to both engineering teams (actionable technical insights) and management (business risk and program effectiveness).&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;&lt;strong&gt;Yeah, it’s a mouthful. I promise I will explain it better in the future.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;h2&gt;A rationale for thinking this way&lt;/h2&gt;
&lt;p&gt;Now this definition might raise eyebrows, for starters, shift-left happened and we are still dealing with the side effects of that. Why are we focussing on developers? Shift-left and historical approaches like it made a series of mistakes when attempting to involve developers into the security cycle; &lt;strong&gt;for starters developers are not security people.&lt;/strong&gt; The approach I advocate for in the above definition and this series corrects these mistakes by ensuring that responsibility still lies with the AppSec function.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;We are engineers as well&lt;/strong&gt; and therefore need to be at the centre or at the very least operating within the confines of the engineering function at an organisation. Our aim is not to make security developers responsibility, rather we seek to encourage them to build in a manner that is inherently secure. This aim is achieved through guidance, involvement, understanding and consideration.&lt;/p&gt;
&lt;p&gt;Whenever your thinking about how to approach this:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Developers do not exist to fix our vulnerabilities &lt;strong&gt;they have a product to deliver&lt;/strong&gt;. We need to enable them to deliver a product and do it in a way that addresses our vulnerabilities.&lt;/li&gt;
&lt;li&gt;Developers are &lt;strong&gt;experts at writing software&lt;/strong&gt;. We need to mirror this expertise and innately understand what they are doing.&lt;/li&gt;
&lt;li&gt;Developers are &lt;strong&gt;overburdened and frequently under the pump&lt;/strong&gt;. We need to be a pressure relief valve and encourage them to help us find pressure points.&lt;/li&gt;
&lt;li&gt;Developers &lt;strong&gt;want&lt;/strong&gt; to maintain their software and have a functioning safe development environment but frequently lack the ability or capacity to obtain justification for doing so. We need to help them get that justification.&lt;/li&gt;
&lt;/ul&gt;
&lt;h1&gt;The virtuous cycle of success in AppSec&lt;/h1&gt;
&lt;p&gt;At the core of any AppSec program you should have three core aims/principles/objectives/goals whatever floats your boat. I’ve created the following acronym as a memorisation method.&lt;/p&gt;
&lt;p&gt;Mould, Advise, Publicise - &lt;strong&gt;M.A.P&lt;/strong&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Mould&lt;/strong&gt;: Shape a security conscious, blame-free culture centred around collaboration that empowers engineers, whilst enabling you to ask for things when you need them.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Advise:&lt;/strong&gt; Provide suitable guidance/advice/support and enable it with tooling that is velocity considerate and meets developers where they are.&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Publicise:&lt;/strong&gt; Expose and communicate success in a manner suitable to your audience - both engineers and leadership.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Each of these objectives sustain and nurture each other and will enable you to achieve whatever security/risk aims your company has.&lt;/p&gt;
&lt;p&gt;What does this look like in practice? &lt;strong&gt;A virtuous cycle of success&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img src=&quot;https://www.offendedsecurity.net/media/pragmatic-appsec-part-1-a-map-that-reflects-the-territory-inline-1.png&quot; alt=&quot;&quot;&gt;&lt;/p&gt;
&lt;p&gt;The M.A.P that reflects the territory&lt;/p&gt;
&lt;p&gt;Moulding a culture helps you identify opportunities to advise, these give you success to publicise which then encourages further cultural improvements. The self-sustaining nature of this cycle creates a positive feedback loop that ultimately drives you towards a successful AppSec program.&lt;/p&gt;
&lt;h2&gt;A practical example&lt;/h2&gt;
&lt;p&gt;AppSec Engineer &lt;strong&gt;Billie&lt;/strong&gt; has identified that we have a series of vulnerabilities within container images at the organisation that are persisting across multiple sprints. &lt;strong&gt;Billie&lt;/strong&gt; has invested a lot of time with &lt;em&gt;Engineering Team A&lt;/em&gt;.&lt;/p&gt;
&lt;p&gt;Through conversations and pair coding sessions she has identified that the reason they struggle to patch vulnerabilities in their containers is because they are just too complex. &lt;strong&gt;Billie&lt;/strong&gt; has provided the engineers with a safe space to talk about frustrations and can readily map her needs to theirs.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Billie&lt;/strong&gt; offers to help them build better containers, focussing on the developer experience in communications. “Let’s make these easier for your team to iterate on these so that you can test our new versions of X language”&lt;/p&gt;
&lt;p&gt;Through iteration and work (yes she might be actually helping make a container) &lt;strong&gt;Billie&lt;/strong&gt; has helped produced a container that not only aids the developers in their aims but also reduces the attack surface and vulnerability numbers substantially.&lt;/p&gt;
&lt;p&gt;This is communicated to engineering leadership as a win for developer productivity, to security leadership as a win for security and to engineers as a win for making their job easier.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Engineering Team B&lt;/em&gt; enjoying the benefits of &lt;em&gt;Engineering Team A’s&lt;/em&gt; new containers, reaches out to Billie and asks her to help them with their build pipeline. Billie has identified that vulnerabilities within CI/CD are not being readily maintained.&lt;/p&gt;
&lt;p&gt;And so on…&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;Thus the virtuous cycle sustains&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;em&gt;Alright that’s enough for now&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;In future posts we will examine each of these pillars in detail and look at how we can build them out but for now keep this model in mind as we delve deeper into this.&lt;/p&gt;
&lt;p&gt;Thanks for reading&lt;/p&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/pragmatic-appsec-part-1-a-map-that-reflects-the-territory-hero.webp" type="image/webp"/><category>Pragmatic AppSec</category></item><item><title>Don&apos;t forget to do your damn job and tell people about it</title><link>https://www.offendedsecurity.net/p/don-t-forget-to-do-your-damn-job-and-tell-people-about-it/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/don-t-forget-to-do-your-damn-job-and-tell-people-about-it/</guid><description>Remember to actually do what you need to do</description><pubDate>Thu, 14 Aug 2025 14:00:00 GMT</pubDate><content:encoded>&lt;p&gt;A good friend of mine who runs a great Appsec company, sent me &lt;a href=&quot;https://charity.wtf/2021/03/07/know-your-one-job-and-do-it-first&quot;&gt;&lt;strong&gt;this great article&lt;/strong&gt;&lt;/a&gt; about a month ago. It wasn&amp;#39;t new to me, but in recent weeks it&amp;#39;s really been playing on my mind.&lt;/p&gt;
&lt;p&gt;This hit its peak when I gave a guest lecture at QUT to a class full of people looking to get into tech and cybersecurity. It was a great opportunity and I am extremely grateful for the chance to help guide the next generation of engineers.&lt;/p&gt;
&lt;p&gt;The job climate is obviously a little whack at the moment so the usual set of questions came up:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;How do I get into X job?&lt;/li&gt;
&lt;li&gt;What can I do to stand out in an interview?&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;The kinds of advice I fall back to here beyond what they might be already doing are typically things like:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Have a portfolio&lt;/li&gt;
&lt;li&gt;Learn in public&lt;/li&gt;
&lt;li&gt;Broaden your skills&lt;/li&gt;
&lt;li&gt;Focus on the market and the needs of the businesses in it&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;It struck me after this lecture had concluded that a lot of these behaviours are exactly the kinds of extracurriculars mentioned in this article.&lt;/p&gt;
&lt;p&gt;These are the things that result in people getting stuck going from mid to senior and above roles (in an individual contributor space). &lt;em&gt;&lt;strong&gt;The irony of this thought occurring while I was doing exactly the kind of activity that&amp;#39;s the subject of this article is not lost on me. Nor is the fact that I am writing about it in a blog article.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;It&amp;#39;s a curious industry we work in (cybersecurity), the path to success in our roles is usually circuitous and tangled. The ability to demonstrate your impact when you&amp;#39;re slowly cutting your way through the jungle is vital to your long term success, &lt;em&gt;&lt;strong&gt;it&amp;#39;s also a skill that a lot of people lack.&lt;/strong&gt;&lt;/em&gt;&lt;/p&gt;
&lt;p&gt;The most common method (at least from what I have seen) to make up for this shortfall is to focus on doing everything that isn&amp;#39;t your job. You&amp;#39;re part of the community, you&amp;#39;re writing blog posts, maybe you maintain some open source projects. There is nothing wrong with that, we need people to shape communities, maintain software and share their thoughts; but you need to do your damn job be able to communicate the impact it&amp;#39;s having.&lt;/p&gt;
&lt;p&gt;The idea of both actually having impact and communicating it is something so thoroughly missed in both formal education and informal education. It&amp;#39;s also arguably why a lot of big tech companies have such awful approaches to role changes (10k word role change docs read by people that you&amp;#39;ve never worked is so good right?). Forcing people to write large documents that justify their existence gives people that aren&amp;#39;t doing their job, or lack the skills to demonstrate impact, the ability to spend time pretending they are doing their job. The need to create the appearance of impact also creates a whole graveyard of barely functioning PoC&amp;#39;s propping up large tech companies. A lot of these same problems still exist in smaller contexts, the difference is that people just don&amp;#39;t get promoted/maybe lose your job and/or the size of teams gets larger than it needs.&lt;/p&gt;
&lt;p&gt;Here&amp;#39;s the rub, I&amp;#39;ve always found it incredible just how much time people in security engineering roles have to write thought-pieces. Again irony, I am an engineering leader writing a thought piece blog. For full transparency, finding time write a blog is like herding cats for me, my participation in various groups and programs is a carefully negotiated dance and the rare occasion I get to do anything new it requires several rituals to all known gods.&lt;/p&gt;
&lt;p&gt;Enterprise security is rough, product security is frequently non-existent and we are always talking about just how threats never stop coming. We speak constantly about how we always need more people. All of this is to say that if you&amp;#39;re taking the time to write a blog or run a community group you should consider whether you&amp;#39;re doing your job and demonstrating your impact. This is a super vital time to consider this, the world is changing and regardless of your position on AI it will have an impact on how people do their jobs, the types of roles that are available and the quality of work people expect.&lt;/p&gt;
&lt;p&gt;So ask yourself an honest question am I:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;doing my job&lt;/li&gt;
&lt;li&gt;demonstrating the impact&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;If the answer is yes to both, then great, thank you for your time.&lt;/p&gt;
&lt;p&gt;If the answer is no to either of these, well here is what can you do?&lt;/p&gt;
&lt;ol&gt;
&lt;li&gt;Do your damn job&lt;/li&gt;
&lt;li&gt;Measure your damn impact (if you don&amp;#39;t know how I am going herd some cats and write posts for you)&lt;/li&gt;
&lt;li&gt;Talk about your damn outcomes&lt;/li&gt;
&lt;li&gt;If you&amp;#39;ve still got time left over do the rest&lt;/li&gt;
&lt;/ol&gt;
</content:encoded><enclosure url="https://www.offendedsecurity.net/media/don-t-forget-to-do-your-damn-job-and-tell-people-about-it-hero.webp" type="image/webp"/><category>People and Processes</category></item><item><title>Getting comfortable in the grey part 2 - Becoming a generalist and transitioning careers</title><link>https://www.offendedsecurity.net/p/getting-comfy-grey-2/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/getting-comfy-grey-2/</guid><description>How does one get comfy in the grey? How does one become a cyber generalist?</description><pubDate>Thu, 29 Feb 2024 07:04:32 GMT</pubDate><content:encoded>&lt;p&gt;&lt;strong&gt;&lt;em&gt;This post is the second in a series designed to examine the value of generalists in cyber security. This post looks at how one might transition to be a generalist in security. Future posts will be targeted at constructing teams and other topics. Check back each Thursday for the next part.&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;A disclaimer: there is no single path into cyber security, no algorithm or bootcamp that can get you there. It unfortunately takes a combination of luck and passion. This post won&amp;#39;t necessarily get you a job but it might help you get closer to one.&lt;/p&gt;
&lt;p&gt;How does one get comfy in the grey? How does one become a cyber generalist? It&amp;#39;s a weird question to answer for me and honestly it took me a while to think about what I could possibly tell someone that wants to move into cyber security as a generalist. The truth is that it never crossed my own mind, I was incredibly lucky and my own passions happened to align really well with the needs of the industry. However, I strongly believe that cyber is a better place when we have a more diverse and my own journey does highlight some really valuable advice that could be key for someone looking to make a change.&lt;/p&gt;
&lt;p&gt;So despite my own declaration that there is no algorithm for getting into cyber I will attempt to boil my experience down to something similar to an algorithm. A set of rules for getting comfy in the grey.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;1. Start elsewhere&lt;/em&gt;&lt;/strong&gt;
Entry level jobs are extremely rare in security. Unless you&amp;#39;re graduating and are seeking a SOC role or are lucky enough to make it into a graduates program or traineeship it can be really hard for someone to go directly in to cyber. So rule number 1 and perhaps the most important part of being a generalist is that you should start elsewhere. Cybersecurity ultimately protects people and businesses and a key aspect of being able to do that is to understand what you are protecting. Therefore a good place to start is to look at what kinds of threats we care about right now and seek a job in those areas. This could be a role in DevOps, Software Engineering, Machine Learning or Infrastructure Engineering. These roles will do a few things: a) they let you explore your passions, b) they give you the chance to identify and resolve security issues that you can then develop into resume defining items and c) they get you working. Arguably, most of the iconic people in security today didn&amp;#39;t start in security (it didn&amp;#39;t exist) they appreciate diversity and understand that security comes from all places.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;2. Don&amp;#39;t do &amp;quot;cyber&amp;quot; certifications first&lt;/em&gt;&lt;/strong&gt;
Unless you have a very specific role in mind certifications aren&amp;#39;t really it. Does this mean that you shouldn&amp;#39;t do them? No, but arguably the ROI on most certifications isn&amp;#39;t going to be there early in your career especially if you can manage to get yourself a role where other (relevant) certifications such as the AWS vendor certs could be covered by employers. You should focus on getting relevant experience in the job role that you&amp;#39;re starting in. This could be taking part in your companies security champions program, helping the company identify vulnerabilities (especially relevant for Software and DevOps engineers) and making sure you&amp;#39;re recording and writing down each of these experiences so that when the experience issue comes up you&amp;#39;re able to identify key aspects of your career that answer those questions.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;3. Do make your own tools&lt;/em&gt;&lt;/strong&gt;
Tooling isn&amp;#39;t everything in security, but it certainly helps out a lot. Identify problems you can solve and write code to fix it. &lt;strong&gt;&lt;em&gt;Coding is a skill you need in security&lt;/em&gt;&lt;/strong&gt;, I disagree strongly that you aren&amp;#39;t advantaged by being able to write and design software in security. Even GRC peeps should be writing tools that enhance the delivery of their work. This doesn&amp;#39;t mean they need to be writing a scanner, but they certainly should be creating python scripts or other tools to make data visualisations that will wow executives. Write tools that solve your problems, make those tools open source and get people using them. Why? This will give you exposure to solving problems and vulnerabilities that arise in the day to day maintenance of a product. Ultimately that is what you do in a lot of security roles. You will be &lt;strong&gt;&lt;em&gt;constantly&lt;/em&gt;&lt;/strong&gt; identifying and potentially solving problems. If you understand how this works already you are a huge leap ahead of the competition. Furthermore you will have a name! Imagine going to a job role and someone interviewing you uses a tool that you wrote daily. This happens more than you realise.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;4. Seek startups and scale ups&lt;/em&gt;&lt;/strong&gt;
It isn&amp;#39;t easy getting a security role at an established organisation if you don&amp;#39;t have experience. So start small, get a role at a startup or a scaleup especially one that is very early stage and in an industry vertical you are interested in. This role could be a hybrid role, it could also just be a software engineer or infrastructure engineer. A lot of startups give you a lot of latitude and freedom in the early days. This means you can solve security problems as part of your day job without risk. Furthermore, most startups do not hire security people (although they probably should and a future post will cover this) so there is a distinct chance for you to move into a security role just as the organisation grows. Startups are also the place I have learnt the most, the risk of sink or swim is daunting but it gives you an incredible clarity and freedom that you cannot get elsewhere. Embrace the grey that is inherently part of being an early startup employee and you will be well on your way to getting comfy in the grey.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;5. Convert experience into relevant experience&lt;/em&gt;&lt;/strong&gt;
Finally and perhaps the most important rule: Experience using the above rules is only valid if it&amp;#39;s relevant. This means you need to be able to translate what you&amp;#39;re doing into security relevant experience. Highlight the bugs you&amp;#39;ve found, identify the improvements you&amp;#39;ve made and speak the language of risk. Security is part of every job role and you can easily highlight the things you&amp;#39;re doing in a way that is relevant to the role you&amp;#39;re seeking. If you can&amp;#39;t? then you need to find yourself a way to do that. This means that you need to seek opportunity (again this is why startups are great) to grow in your current role. Inversely to this, admit when you don&amp;#39;t know something or don&amp;#39;t have experience. Lying isn&amp;#39;t going to get you anywhere, integrity and ethical behaviour is a key part of being a security professional and admitting that you don&amp;#39;t know something isn&amp;#39;t immediately a failure. No one; I repeat, no one understands everything nor is it realistic for people to expect all applicants to know everything. Cultural fit and passion are important markers for the kinds of employers that you want to work for.&lt;/p&gt;
&lt;p&gt;Alright, that is enough for now. Check back next week for more. Leave a comment in the social channels if you have any feedback.&lt;/p&gt;
</content:encoded><category>Career</category></item><item><title>Getting comfortable in the grey part 1 - Generalists and job roles</title><link>https://www.offendedsecurity.net/p/getting-comfy-grey-1/</link><guid isPermaLink="true">https://www.offendedsecurity.net/p/getting-comfy-grey-1/</guid><description>Specialisation is important... or is it?</description><pubDate>Tue, 20 Feb 2024 02:01:32 GMT</pubDate><content:encoded>&lt;blockquote&gt;
&lt;p&gt;Patty: I&amp;#39;ll be the good guy.&lt;br&gt;Shermy: I&amp;#39;ll be the bad guy.&lt;br&gt;Patty: What are you going to be, Charlie Brown?&lt;br&gt;Charlie Brown: I&amp;#39;ll be sort of in-between; I&amp;#39;ll be a hypocrite! - Charles M. Schulz&lt;/p&gt;
&lt;/blockquote&gt;
&lt;p&gt;&lt;strong&gt;&lt;em&gt;This post is the first in a series designed to examine the value of generalists in cyber security. This first one looks at how we can get our hands on more generalists and why we should. Future posts will be targeted at people looking to transition as well as constructing teams and other topics. Check back each Thursday for the next part&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;Specialisation is important... or is it? It&amp;#39;s a question I have frequently asked myself as a self admitted generalist. What should my speciality be? Do I need a specialisation? Is it too late for me to pick one? The further I got into my career the more frantic this question got and the less obvious the answers got, the greater the pressure I felt to make a decision, it became a burning issue.&lt;/p&gt;
&lt;p&gt;Until it didn&amp;#39;t. As I moved from Sysadmin to DevOps/SRE, to Security, to DevSecOps I increasingly came to realise that the biggest differentiator for me was my lack of formal &amp;quot;specialisation&amp;quot;. My broad based approach allowed me to fit into and lead any team. I could speak the language and walk the walk of developers, security engineers and everything in between. Most importantly though, I never found myself in a position where I felt the need to block with the standard security ban hammer. I also built solutions just as comfortably as I guided and protected.&lt;/p&gt;
&lt;p&gt;I got comfortable in the grey. I also believe that more people should. I&amp;#39;ve noticed a trend whereby we focus so much training content and pathways upon two core concepts: GRC and Pentesting. This leaves us with a dismal gap, we&amp;#39;ve got a whole lot of people that know how to translate vulnerabilities into business risk and a whole bunch of people that are great at finding vulnerabilities but a significant shortage of people that can practically fix them or better yet avoid them. This is where the precis of my argument lies: we need a whole lot more people that sit right in the middle, we need more generalists.&lt;/p&gt;
&lt;p&gt;This isn&amp;#39;t an attack on specialists, we need them just as much my ideal team is a mix of both. It&amp;#39;s more an argument that generalists create the possibility to address a few core issues within our industry&lt;/p&gt;
&lt;h3&gt;Hiring differently to fix the gap problem&lt;/h3&gt;
&lt;p&gt;Finding vulnerabilities isn&amp;#39;t easier, but its a hell of a lot easier than eliminating a whole class of vulnerabilities. This requires a unique combination of knowledge. Eliminating classes could be as simple as changing a framework or library but it could also involve deep infrastructure changes or mental model shifts. Generalists are the best people to guide and construct this. They understand enough of a broad set of domains to be able to target the specialists towards the most effective and considered fix.&lt;/p&gt;
&lt;h3&gt;Generalists can readily transition from other parts of the tech industry&lt;/h3&gt;
&lt;p&gt;Layoffs are happening as we face a decades overdue realignment between financial expectations and reality and whilst its terrible and my heart goes out to those that are facing this; there is opportunity in adversity. Some incredibly talented software engineers, infrastructure engineers and more are looking for roles right now and it&amp;#39;s highly possible they would make exceptional security engineers. We should embrace and bring them in, get rid of these ridiculous 5 year experience role requirements, get rid of the must have experience in blah. Unless you&amp;#39;re looking for a principal that needs to be able to mentor people the most important thing we need is people that are keen in securing the world and interested in sharing their knowledge.&lt;/p&gt;
&lt;h3&gt;Diversity of thought greatly enhances our ability to identify new threats&lt;/h3&gt;
&lt;p&gt;Imagine having access to a never ending stream of people that are exposed to the pointy end of our software and infrastructure every single day. Now imagine that you could build a team out of those people! You get to have the people that you&amp;#39;re securing or write the software you&amp;#39;re securing working to secure it with you. The value of this is impossible to overstate. They might not have the language that we speak but they sure as hell know what they are talking about.&lt;/p&gt;
&lt;p&gt;If you have any thoughts feel free to reach out to me on the various social channels.&lt;/p&gt;
</content:encoded><category>Career</category></item></channel></rss>