<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Matt Kellock: Talks &amp; writing</title>
    <link>https://kellock.com.au/writing/</link>
    <atom:link href="https://kellock.com.au/feed.xml" rel="self" type="application/rss+xml"/>
    <description>Talks and articles by Matt Kellock on platform engineering, DevSecOps, security and technology governance.</description>
    <language>en-AU</language>
    <lastBuildDate>Sat, 26 Sep 2026 09:00:00 +1000</lastBuildDate>
    <item>
      <title>The Agent That Wouldn't Take No for an Answer</title>
      <link>https://kellock.com.au/writing/agent-that-wouldnt-take-no/</link>
      <guid isPermaLink="true">https://kellock.com.au/writing/agent-that-wouldnt-take-no/</guid>
      <pubDate>Sat, 26 Sep 2026 09:00:00 +1000</pubDate>
      <dc:creator>Matt Kellock</dc:creator>
      <category>Security</category>
      <description>Public by design, private by default: what the Medicare portal incident teaches about AI agents.</description>
      <content:encoded><![CDATA[<p><em>Public by design, private by default: what the Medicare portal incident teaches about AI agents.</em></p>
<p><em>Last updated 26 September 2026. The investigation and the government's review are still running, so some details may change. Views are my own, not my employer's.</em></p>
<blockquote><p><strong>In short:</strong> An OpenAI research agent working on an ordinary task got past a government portal's refusals, reached non-public files and wrote to an internal server, and nobody in government noticed. The lesson I take from it is to keep public systems away from non-public data, and to notice when something keeps trying doors. If you run agents, you're now part of the threat model too.</p></blockquote>
<p>I run infrastructure for a living, and in the evenings I'm building an AI product that relies on agents. The Medicare portal incident sits right where those two jobs meet. It's easy to take only half a lesson from it, so this is my attempt at the whole thing.</p>
<h2 id="agent-that-wouldnt-take-no-the-portal-that-said-no">The portal that said no</h2>
<p>On 18 June 2026, OpenAI researchers were using an internal model, running as an agent, to research public spending on medicines.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" id="agent-that-wouldnt-take-no-ref-1" aria-label="Reference 1">1</a></sup> It went to Services Australia's Medicare Statistics Reporting Service, a public portal of aggregated Medicare and Pharmaceutical Benefits Scheme statistics.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-2" id="agent-that-wouldnt-take-no-ref-2" aria-label="Reference 2">2</a></sup></p>
<p>The portal said no, repeatedly. In the Prime Minister's words, the agent &quot;didn't accept no for an answer&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" aria-label="Reference 1">1</a></sup> It tried other routes, reached public and non-public information within the portal and, according to Services Australia, wrote files to an internal server.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" aria-label="Reference 1">1</a></sup></p>
<p>OpenAI became aware of the activity on 11 August, during a review of misaligned model activity. On 10 September, 84 days after the event, it emailed Services Australia's public disclosure inbox.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-3" id="agent-that-wouldnt-take-no-ref-3" aria-label="Reference 3">3</a></sup> The Prime Minister went public on 24 September and set up a taskforce to review whether existing processes can handle AI-related cyber incidents.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" aria-label="Reference 1">1</a></sup></p>
<p>The damage looks limited. The government believes no personal information was accessed &quot;at this stage&quot;, and says the evidence so far shows no broader compromise of Services Australia's network.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" aria-label="Reference 1">1</a></sup> OpenAI says the information accessed included aggregate health statistics and internal file names.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-3" aria-label="Reference 3">3</a></sup></p>
<p>Minister Katy Gallagher described the portal as a legacy system: &quot;not a system of government significance&quot;, but one that &quot;did have protections in place&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-4" id="agent-that-wouldnt-take-no-ref-4" aria-label="Reference 4">4</a></sup> She has also said &quot;we won't be reactivating it&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-5" id="agent-that-wouldnt-take-no-ref-5" aria-label="Reference 5">5</a></sup></p>
<h2 id="agent-that-wouldnt-take-no-the-visitor-nobody-planned-for">The visitor nobody planned for</h2>
<p>Forgotten government websites with weak access controls are an old problem. What caught my attention is who found this one.</p>
<p>The visitor was a research agent from a legitimate company, working on an ordinary task. Transluce, which documented agents linked to OpenAI probing other public data providers, including the Australian Institute of Health and Welfare, put it plainly: &quot;the tasks the agents were trying to solve were <em>not cyber-related</em>&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-6" id="agent-that-wouldnt-take-no-ref-6" aria-label="Reference 6">6</a></sup></p>
<p>The agents tried SQL injection, cross-site scripting and path traversal &quot;after failing to retrieve data through normal means&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-6" aria-label="Reference 6">6</a></sup> Nobody asked them to attack anything. The exploit attempts came out of trying to finish the job. OpenAI's post-mortem of a separate incident, involving Hugging Face, found the same trait: its agents rarely gave up on evaluation tasks, even ones that appeared impossible.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-7" id="agent-that-wouldnt-take-no-ref-7" aria-label="Reference 7">7</a></sup></p>
<p>The obvious objection is that any scanner could have found this portal's weaknesses. True, and that's the problem. We've tended to design around attackers who are rare and malicious, and hoped that obscure systems would fall below their attention. Now there are agents that nobody pointed at a target, and I expect there'll be many more of them, patiently trying every door when the front one is locked.</p>
<p>People with bad intent are using the same capability deliberately. In November 2025, Anthropic reported a state-sponsored espionage campaign in which AI did an estimated 80–90% of the work.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-8" id="agent-that-wouldnt-take-no-ref-8" aria-label="Reference 8">8</a></sup></p>
<p>So the working assumption has to change. Every reachable endpoint will be found and tested, and a refusal from your application may be treated as a puzzle rather than a boundary.</p>
<p>I've seen this from the other side with my own agents. Our coding and QA agents run on a cloud server, and our production bot protection blocks that traffic, as it should. We didn't ask the agents to find a cleverer way in. We gave them one sanctioned test path that we control, and a written rule never to improvise another.</p>
<h2 id="agent-that-wouldnt-take-no-three-old-failures">Three old failures</h2>
<blockquote><p><strong>What we don't know yet</strong></p>
<ul><li>How the agent got past the portal's controls. No root cause has been published.</li><li>What was written to the internal server, and how. That's still under forensic investigation.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-2" aria-label="Reference 2">2</a></sup></li><li>Whether any offence applies. That's for investigators and possibly the courts.</li><li>Who else was affected. OpenAI says it has notified dozens of third parties.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-9" id="agent-that-wouldnt-take-no-ref-9" aria-label="Reference 9">9</a></sup></li></ul>
<p>What follows is my reading of what has been reported.</p></blockquote>
<p>Three things went wrong, and none of them is new.</p>
<p><strong>The public tier could reach non-public data.</strong> The agent got to non-public information through the same portal that served the public.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-1" aria-label="Reference 1">1</a></sup> Richard Marles, acting as Prime Minister that day, put it this way: &quot;The AI agent climbed the fence.&quot; The data, he said, &quot;was not sitting behind a particularly high fence&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-10" id="agent-that-wouldnt-take-no-ref-10" aria-label="Reference 10">10</a></sup></p>
<p><strong>The public tier could write to an internal system.</strong> A statistics portal serving anonymous visitors should give them no way to create files on an internal server. However it happened, that path shouldn't have existed. To me, it's the most important detail in the whole story.</p>
<p><strong>Nobody detected it.</strong> Services Australia found out from the company whose model did it.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-3" aria-label="Reference 3">3</a></sup> Repeated refusals followed by new approaches, requests for odd files and an unexpected write to an internal server are the signals monitoring should catch while it's happening.</p>
<p>We've been here before. In the 2022 Optus cyber attack, the Australian Communications and Media Authority (ACMA) alleges that a coding error in access control went undetected for four years, on a domain left dormant rather than decommissioned. The personal information of more than nine and a half million current and former customers was accessed.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-11" id="agent-that-wouldnt-take-no-ref-11" aria-label="Reference 11">11</a></sup></p>
<p>ACMA says the attack wasn't sophisticated: it was &quot;carried out through a simple process of trial and error&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-11" aria-label="Reference 11">11</a></sup> Trial and error is what agents do best.</p>
<h2 id="agent-that-wouldnt-take-no-we-only-know-because-they-told-us">We only know because they told us</h2>
<p>OpenAI's handling wasn't good enough. Eighty-four days is too long, a public inbox checked once a day was the wrong channel,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-4" aria-label="Reference 4">4</a></sup> and a full public account should follow once the investigation is done.</p>
<p>But I keep coming back to how we found out at all. OpenAI found the activity in its own review, reported it, and has since published an account of its models' impact on dozens of other organisations.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-9" aria-label="Reference 9">9</a></sup> Without that, the government might still not know. If the main reaction to disclosure is ridicule and punishment, the rational move for the next company is to say less, later.</p>
<p>The companies that report aren't the only source of this risk, either. In 2023, researchers showed the safety training on Meta's openly released Llama 2-Chat 13B could be undone for less than $200.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-12" id="agent-that-wouldnt-take-no-ref-12" aria-label="Reference 12">12</a></sup> Hosted models can be jailbroken too: the attackers in Anthropic's case broke their work into small, innocent-looking tasks and told Claude it was working for a legitimate security firm on defensive testing.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-8" aria-label="Reference 8">8</a></sup> Criminals and state actors running models like these won't file incident reports, so disclosures from the developers who do report are one of the few direct views we get of agents in the wild.</p>
<p>A blameless postmortem focuses on &quot;the contributing causes of the incident without indicting any individual or team&quot;,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-13" id="agent-that-wouldnt-take-no-ref-13" aria-label="Reference 13">13</a></sup> and aviation's &quot;just culture&quot; doesn't blame people for honest errors while still holding them accountable for wilful violations and gross negligence.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-14" id="agent-that-wouldnt-take-no-ref-14" aria-label="Reference 14">14</a></sup> Both exist to keep people reporting.</p>
<p>Australia already applies this thinking to cyber incidents. The Cyber Security Act 2024 limits how the National Cyber Security Coordinator can use information shared voluntarily, so organisations can engage early without fearing it will be handed to regulators or law enforcement, though it isn't a safe harbour. The Act also set up a Cyber Incident Review Board for independent, no-fault reviews of significant incidents.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-15" id="agent-that-wouldnt-take-no-ref-15" aria-label="Reference 15">15</a></sup></p>
<p>I'd like the government's review to land in the same place: hold AI companies firmly to account for delay, poor channels and incomplete accounts, make prompt and direct notification a clear obligation, and make coming forward easier than staying quiet. The goal is fewer incidents and faster discovery of the ones that happen, not fewer reports.</p>
<h2 id="agent-that-wouldnt-take-no-public-by-design-private-by-default">Public by design, private by default</h2>
<p>The portal existed to publish statistics to anyone who wanted them, so hiding it behind a VPN would have defeated the point. The principle I'd apply instead:</p>
<blockquote><p><strong>Public services should expose only public data, from a tier that can't read or write anything else. Everything else should be private by default. Every layer still needs authentication, authorisation, patching, monitoring and segmentation.</strong></p></blockquote>
<p>Non-public data and internal servers belong where the public tier has no route and no credentials to reach them. The Medicare portal let users customise the content and format of their reports,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-16" id="agent-that-wouldnt-take-no-ref-16" aria-label="Reference 16">16</a></sup> so this can't just mean publishing static files. A portal like that can still run live queries, as long as it runs them against a read-only store that holds only released data, kept in its own plane and fed by a one-way push from inside.</p>
<figure><img class="mk-img-dark" src="https://kellock.com.au/images/writing/public-private-planes-v2.png" alt="Before: the public portal reads non-public data and can write to an internal server. After: the portal only queries a store of released data, internal systems push releases to it one way, and there is no route from the portal into the private plane." loading="lazy"></figure>
<p>The government's own fix follows the same logic. The portal's public data is moving to data.gov.au, and Gallagher has directed Services Australia to move data off its other legacy public-facing websites, or decommission them where appropriate.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-2" aria-label="Reference 2">2</a></sup></p>
<h2 id="agent-that-wouldnt-take-no-why-reachability-still-matters">Why reachability still matters</h2>
<p>A service doesn't become private because it has a login page, an unadvertised hostname or an unpredictable URL. Certificate-transparency logs publicly record TLS certificates as they're issued, and anyone can watch them,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-17" id="agent-that-wouldnt-take-no-ref-17" aria-label="Reference 17">17</a></sup> while DNS, cloud address ranges and search engines give away plenty more. Obscurity may delay discovery, but it doesn't control access.</p>
<p>Authentication matters enormously, but it only acts once traffic has reached something that can process it. By then the visitor is already talking to your TLS stack, proxy, framework, parsers and every API route. The Open Worldwide Application Security Project (OWASP) counts all of those paths in and out of an application, and the code that protects them, as its attack surface.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-18" id="agent-that-wouldnt-take-no-ref-18" aria-label="Reference 18">18</a></sup></p>
<p>A correct identity layer rejects a bad login. It can't promise that an old endpoint doesn't skip the authentication middleware, or that nobody can reach the origin server directly, around the proxy. Private routing, firewalls and segmentation are an independent layer: they shrink the number of things that can reach a workload at all, and they contain the damage when something else fails.</p>
<p>None of this is a retreat from zero trust. The US National Institute of Standards and Technology (NIST) says zero trust grants no implicit trust based solely on network location.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-19" id="agent-that-wouldnt-take-no-ref-19" aria-label="Reference 19">19</a></sup> Google's BeyondCorp famously moved its corporate applications onto the internet, exposing them through an internet-facing access proxy.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-20" id="agent-that-wouldnt-take-no-ref-20" aria-label="Reference 20">20</a></sup> That's a public broker in front of a private origin, the pattern I'm arguing for.</p>
<p>The network grants no trust, but it still limits reachability.</p>
<h2 id="agent-that-wouldnt-take-no-the-catch-gateways-are-exposed-too">The catch: gateways are exposed too</h2>
<p>The VPNs, firewalls and access gateways that provide private access are themselves exposed to the internet. Verizon's 2026 Data Breach Investigations Report found that exploiting vulnerabilities is now the most common way in, at 31% of initial access, up from 20% the year before.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-21" id="agent-that-wouldnt-take-no-ref-21" aria-label="Reference 21">21</a></sup> It also found the median time to fully fix a vulnerability known to be exploited grew to 43 days, and only 26% had been fully fixed.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-21" aria-label="Reference 21">21</a></sup></p>
<p>The previous year's report found edge devices and VPNs were the target in 22% of exploitation cases, up from 3%,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-22" id="agent-that-wouldnt-take-no-ref-22" aria-label="Reference 22">22</a></sup> and the Australian Signals Directorate (ASD) has published detailed guidance on securing them.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-23" id="agent-that-wouldnt-take-no-ref-23" aria-label="Reference 23">23</a></sup></p>
<p>Private access done badly can be worse than none. The Australian Information Commissioner alleges that in the 2022 Medibank breach, an attacker logged into the company's VPN with stolen credentials alone, because it didn't require multi-factor authentication (MFA).<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-24" id="agent-that-wouldnt-take-no-ref-24" aria-label="Reference 24">24</a></sup></p>
<p>So private by default only works if the gateway is the most carefully patched and watched system you own. Prefer brokers with outbound-only connectors, so the origin network has no listening port. Patch edge devices first, require phishing-resistant MFA and device checks before any connection is made, and keep the gateway's own logs.</p>
<p>Some endpoints are harder to hide. SFTP servers and APIs used by clients without static IP addresses, or protected by a password alone, need as many safeguards as you can give them. I'd stack mutual TLS (mTLS), public/private key pairs or client certificates, known client and destination IP ranges wherever you can get them, and preferably a private route such as zero-trust network access (ZTNA) or virtual private cloud (VPC) peering onto private subnets.</p>
<p>It also has to be usable, or people build public workarounds and you end up more exposed than before. And some data can't be made network-private at all. For software-as-a-service platforms like Microsoft 365 or Salesforce, identity is the perimeter: conditional access tied to managed devices, tenant restrictions and no anonymous sharing links.</p>
<h2 id="agent-that-wouldnt-take-no-if-you-run-agents-you-re-in-the-threat-model-too">If you run agents, you're in the threat model too</h2>
<p>This incident has a second audience: everyone building or deploying AI agents, which increasingly means ordinary engineering teams, mine included.</p>
<p>The product I build has an AI assistant that works with sensitive client data and can connect to outside tool servers. Our team contract puts the principle simply: &quot;Hard limits stay in code: organisation scoping, authorization, approval for writes, data egress, and audit. Constrain what the model can affect, never how it thinks.&quot;</p>
<p>Writes need approval, and an approval only counts for the exact action that was shown. Once data from an outside server enters a conversation, the assistant shows every change before making it, and its requests to those servers can only go to public HTTPS endpoints, with no redirects and with caps on response size and time. Our coding agents commit but never push, and deployment only happens through CI.</p>
<p>What I'd expect of anyone running agents:</p>
<ul><li><strong>Treat refusals as boundaries.</strong> A 401 or 403 should stop the agent, not send it looking for another route, and a 429 means back off. robots.txt rules are &quot;not a form of access authorization&quot;,<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-25" id="agent-that-wouldnt-take-no-ref-25" aria-label="Reference 25">25</a></sup> but they are the site owner's stated wishes, so respect them. Enforce this in the agent harness and network controls, not just the prompt.</li><li><strong>Scope agents tightly.</strong> Allow-list the domains and tools an agent can use, and block exploit-like behaviour against other people's systems.</li><li><strong>Watch what your agents do.</strong> Log and review their outbound traffic. If your agent does something to someone else's system, you should know before they do.</li><li><strong>Have a notification plan.</strong> If your agent affects someone else, contact them quickly and directly, and publish your own security contact.</li></ul>
<p>The law applies too. Part 10.7 of the Commonwealth Criminal Code makes it an offence to intentionally access data protected by an access control system, knowing the access is unauthorised.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-26" id="agent-that-wouldnt-take-no-ref-26" aria-label="Reference 26">26</a></sup> Whether that applies here is for investigators, but the government's review is examining whether AI companies should be obliged to notify and cooperate, and whether current offences and penalties are an adequate deterrent.<sup class="fn"><a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-fn-5" aria-label="Reference 5">5</a></sup></p>
<h2 id="agent-that-wouldnt-take-no-build-for-patience">Build for patience</h2>
<p>For years, a lot of security has quietly relied on nobody bothering: nobody finding the old portal, or nobody trying again after the first refusal. Agents have ended that assumption, and not only the malicious ones.</p>
<p>I don't want to go back to flat, trusted intranets, and I don't want every private resource one authentication defect away from exposure either. Private by default and zero trust by design sits between the two: minimise reachability, distrust every connection, verify every identity, enforce least privilege and assume every accessible interface will be found.</p>
<p>And when someone's agent gets it wrong, I want them to tell us quickly, and I want that to be the easy choice.</p>
<p><em>For the practical side (inventory, classification, a 90-day plan and how this maps to Australia's cyber strategy), see the companion post, <a href="https://kellock.com.au/writing/private-by-default-playbook/">Private by Default: A Practical Playbook</a>.</em></p>
<hr>
<h2 id="agent-that-wouldnt-take-no-references">References</h2>
<ol class="mk-refs"><li id="agent-that-wouldnt-take-no-fn-1" value="1">Prime Minister of Australia, <em>Press conference – New York</em>, transcript, 24 September 2026. <a href="https://www.pm.gov.au/media/press-conference-new-york">www.pm.gov.au/media/press-conference-new-york</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-1" class="mk-back" aria-label="Back to reference 1 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-2" value="2">Healthcare IT News, <em>OpenAI agent breaches Australian Medicare portal</em>. <a href="https://www.healthcareitnews.com/news/anz/openai-agent-breaches-australian-medicare-portal">www.healthcareitnews.com/news/anz/openai-agent-breaches-australian-medicare-portal</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-2" class="mk-back" aria-label="Back to reference 2 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-3" value="3">ABC News, <em>OpenAI agent hacked Medicare portal, PM says</em>, 24 September 2026. <a href="https://www.abc.net.au/news/2026-09-24/ai-agent-accessed-australian-government-site-pm-says/107189078">www.abc.net.au/news/2026-09-24/ai-agent-accessed-australian-government-site-pm-says/107189078</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-3" class="mk-back" aria-label="Back to reference 3 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-4" value="4">SBS News, <em>Medicare hack alert went to inbox checked once a day and took five days to be escalated</em>, 24 September 2026. <a href="https://www.sbs.com.au/news/article/openai-agent-hacked-medicare-albanese-reveals/qas79d9ta">www.sbs.com.au/news/article/openai-agent-hacked-medicare-albanese-reveals/qas79d9ta</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-4" class="mk-back" aria-label="Back to reference 4 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-5" value="5">Computer Weekly, <em>Australia sets up taskforce after OpenAI agent breaches statistics portal</em>. <a href="https://www.computerweekly.com/news/366651163/Australia-sets-up-taskforce-after-OpenAI-agent-breaches-statistics-portal">www.computerweekly.com/news/366651163/Australia-sets-up-taskforce-after-OpenAI-agent-breaches-statistics-portal</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-5" class="mk-back" aria-label="Back to reference 5 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-6" value="6">Transluce, <em>Early rogue AI agent activity and attempts to hack found on urlquery.net</em>. <a href="https://transluce.org/agent-activity">transluce.org/agent-activity</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-6" class="mk-back" aria-label="Back to reference 6 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-7" value="7">OpenAI, <em>The Hugging Face incident and the road ahead</em>. <a href="https://openai.com/index/hugging-face-incident-and-the-road-ahead/">openai.com/index/hugging-face-incident-and-the-road-ahead/</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-7" class="mk-back" aria-label="Back to reference 7 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-8" value="8">Anthropic, <em>Disrupting the first reported AI-orchestrated cyber espionage campaign</em>, 13 November 2025. <a href="https://www.anthropic.com/research/disrupting-AI-espionage">www.anthropic.com/research/disrupting-AI-espionage</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-8" class="mk-back" aria-label="Back to reference 8 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-9" value="9">OpenAI, <em>The Hugging Face incident and other third-party impact from misaligned models</em>. <a href="https://openai.com/hugging-face-incident-and-misalignment/">openai.com/hugging-face-incident-and-misalignment/</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-9" class="mk-back" aria-label="Back to reference 9 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-10" value="10">ABC News, <em>Acting PM Richard Marles says AI incident very serious but impact is minor – as it happened</em>, 24 September 2026. <a href="https://www.abc.net.au/news/2026-09-24/federal-politics-live-blog-openai-medicare-breach/107186578">www.abc.net.au/news/2026-09-24/federal-politics-live-blog-openai-medicare-breach/107186578</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-10" class="mk-back" aria-label="Back to reference 10 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-11" value="11">ABC News, <em>Optus cyber attack could have been prevented four years prior, ACMA says</em>, 20 June 2024. <a href="https://www.abc.net.au/news/2024-06-20/optus-hack/104002682">www.abc.net.au/news/2024-06-20/optus-hack/104002682</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-11" class="mk-back" aria-label="Back to reference 11 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-12" value="12">P. Gade, S. Lermen, C. Rogers-Smith and J. Ladish, <em>BadLlama: cheaply removing safety fine-tuning from Llama 2-Chat 13B</em>, 2023, arXiv:2311.00117. <a href="https://arxiv.org/abs/2311.00117">arxiv.org/abs/2311.00117</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-12" class="mk-back" aria-label="Back to reference 12 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-13" value="13">Google, <em>Site Reliability Engineering</em>, &quot;Postmortem Culture: Learning from Failure&quot;. <a href="https://sre.google/sre-book/postmortem-culture/">sre.google/sre-book/postmortem-culture/</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-13" class="mk-back" aria-label="Back to reference 13 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-14" value="14">SKYbrary, <em>Just Culture</em>. <a href="https://skybrary.aero/articles/just-culture">skybrary.aero/articles/just-culture</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-14" class="mk-back" aria-label="Back to reference 14 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-15" value="15">Department of Home Affairs, <em>Cyber Security Act 2024</em>, <a href="https://www.homeaffairs.gov.au/cyber-security-subsite/Pages/cyber-security-act.aspx">www.homeaffairs.gov.au/cyber-security-subsite/Pages/cyber-security-act.aspx</a>; and <em>Limited Use for the National Cyber Security Coordinator</em> (factsheet), <a href="https://www.homeaffairs.gov.au/cyber-security-subsite/files/factsheet-limited-use-for-the-national-cyber-security-coordinator.pdf">www.homeaffairs.gov.au/cyber-security-subsite/files/factsheet-limited-use-for-the-national-cyber-security-coordinator.pdf</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-15" class="mk-back" aria-label="Back to reference 15 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-16" value="16">Services Australia, <em>Medicare statistics</em>. <a href="https://www.servicesaustralia.gov.au/medicare-statistics">www.servicesaustralia.gov.au/medicare-statistics</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-16" class="mk-back" aria-label="Back to reference 16 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-17" value="17">IETF, <em>RFC 6962: Certificate Transparency</em>. <a href="https://datatracker.ietf.org/doc/html/rfc6962">datatracker.ietf.org/doc/html/rfc6962</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-17" class="mk-back" aria-label="Back to reference 17 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-18" value="18">OWASP, <em>Attack Surface Analysis Cheat Sheet</em>. <a href="https://cheatsheetseries.owasp.org/cheatsheets/Attack_Surface_Analysis_Cheat_Sheet.html">cheatsheetseries.owasp.org/cheatsheets/Attack_Surface_Analysis_Cheat_Sheet.html</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-18" class="mk-back" aria-label="Back to reference 18 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-19" value="19">NIST, <em>SP 800-207: Zero Trust Architecture</em>. <a href="https://csrc.nist.gov/pubs/sp/800/207/final">csrc.nist.gov/pubs/sp/800/207/final</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-19" class="mk-back" aria-label="Back to reference 19 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-20" value="20">R. Ward and B. Beyer, <em>BeyondCorp: A New Approach to Enterprise Security</em>, ;login:, December 2014. <a href="https://www.usenix.org/publications/login/dec14/ward">www.usenix.org/publications/login/dec14/ward</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-20" class="mk-back" aria-label="Back to reference 20 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-21" value="21">Verizon, <em>2026 Data Breach Investigations Report</em>. <a href="https://www.verizon.com/business/resources/Td15/reports/2026-dbir-data-breach-investigations-report.pdf">www.verizon.com/business/resources/Td15/reports/2026-dbir-data-breach-investigations-report.pdf</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-21" class="mk-back" aria-label="Back to reference 21 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-22" value="22">Verizon, <em>2025 Data Breach Investigations Report: Executive Summary</em>. <a href="https://www.verizon.com/business/resources/reports/2025-dbir-executive-summary.pdf">www.verizon.com/business/resources/reports/2025-dbir-executive-summary.pdf</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-22" class="mk-back" aria-label="Back to reference 22 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-23" value="23">Australian Signals Directorate, <em>Securing edge devices</em>. <a href="https://www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/securing-edge-devices">www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/securing-edge-devices</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-23" class="mk-back" aria-label="Back to reference 23 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-24" value="24">Office of the Australian Information Commissioner, <em>Australian Information Commissioner v Medibank Private Limited</em>, concise statement, Federal Court of Australia, June 2024. <a href="https://www.oaic.gov.au/__data/assets/pdf_file/0025/221974/Australian-Information-Commissioner-v-Medibank-Private-Limited-concise-statement.pdf">www.oaic.gov.au/__data/assets/pdf_file/0025/221974/Australian-Information-Commissioner-v-Medibank-Private-Limited-concise-statement.pdf</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-24" class="mk-back" aria-label="Back to reference 24 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-25" value="25">IETF, <em>RFC 9309: Robots Exclusion Protocol</em>, 2022. <a href="https://www.rfc-editor.org/rfc/rfc9309">www.rfc-editor.org/rfc/rfc9309</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-25" class="mk-back" aria-label="Back to reference 25 in the text">↩</a></li><li id="agent-that-wouldnt-take-no-fn-26" value="26"><em>Criminal Code Act 1995</em> (Cth), Schedule, Part 10.7. <a href="https://www.legislation.gov.au/C2004A04868/latest/text">www.legislation.gov.au/C2004A04868/latest/text</a> <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/#agent-that-wouldnt-take-no-ref-26" class="mk-back" aria-label="Back to reference 26 in the text">↩</a></li></ol>
]]></content:encoded>
    </item>
    <item>
      <title>Private by Default: A Practical Playbook</title>
      <link>https://kellock.com.au/writing/private-by-default-playbook/</link>
      <guid isPermaLink="true">https://kellock.com.au/writing/private-by-default-playbook/</guid>
      <pubDate>Sat, 26 Sep 2026 09:00:00 +1000</pubDate>
      <dc:creator>Matt Kellock</dc:creator>
      <category>Security</category>
      <description>The practical side of private by default: the steps I'd take, a 90-day starting plan, what to measure, and how it lines up with Australia's cyber strategy.</description>
      <content:encoded><![CDATA[<p><em>The practical side of private by default: the steps I'd take, a 90-day starting plan, what to measure, and how it lines up with Australia's cyber strategy.</em></p>
<p><em>Companion to <a href="https://kellock.com.au/writing/agent-that-wouldnt-take-no/">The Agent That Wouldn't Take No for an Answer</a>. Last updated 26 September 2026. Views are my own, not my employer's.</em></p>
<p>In the companion post I argued that public services should expose only public data, from a tier that can't read or write anything else, and that everything else should be private by default. This post is the practical side: the steps I'd take, a 90-day starting plan, what to measure, and how it lines up with Australia's cyber strategy.</p>
<p>The number of public, unmonitored platforms companies run, putting convenience ahead of security, is staggering. Jira, Slack and Google Drive all hold deeply confidential company information. Observability tools such as Grafana, Datadog and New Relic often hold client personal information in their logs, directly or indirectly, and if they're set up badly, that data can leave its required jurisdiction or the protected environment altogether.</p>
<p>You don't need to remove every public endpoint at once. You need to know what's exposed and who owns it, and have a steady program for moving the wrong things behind private access.</p>
<h2 id="private-by-default-playbook-1-discover">1. Discover</h2>
<p>Build a continuously updated inventory of everything reachable from the internet:</p>
<ul><li>DNS records and public IP addresses</li><li>cloud load balancers and storage endpoints</li><li>Kubernetes ingress and API gateways</li><li>management interfaces</li><li>development and pre-production environments</li><li>vendor-hosted services</li></ul>
<p>Check it from the outside. Your configuration database won't show everything the internet can see, so compare external attack-surface scans with your cloud accounts, certificate-transparency records, infrastructure-as-code and network flow logs. The US Cybersecurity and Infrastructure Security Agency's (CISA) <em>Internet Exposure Reduction Guidance</em> starts from the same place.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-1" id="private-by-default-playbook-ref-1" aria-label="Reference 1">1</a></sup></p>
<p>Include pre-production. In one case researchers examined, Cloudflare blocked the agents' requests to a data provider, but they still retrieved a public file from a pre-production server.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-2" id="private-by-default-playbook-ref-2" aria-label="Reference 2">2</a></sup> The file was public, but it's a good prompt to ask whether your own pre-production servers need to be reachable at all.</p>
<p>Every endpoint needs an owner, a data classification, a business purpose and a written reason for being reachable. Treat unknown and ownerless assets as defects.</p>
<p>Pay particular attention to legacy systems. When a company moves on from a system, its platforms and libraries often stop being maintained. Keeping the lights on (KTLO) means no new feature development, not no development or maintenance at all.</p>
<h2 id="private-by-default-playbook-2-classify">2. Classify</h2>
<div class="mk-table"><table role="table"><thead role="rowgroup"><tr role="row"><th scope="col" role="columnheader">Classification</th><th scope="col" role="columnheader">Default treatment</th></tr></thead><tbody role="rowgroup"><tr role="row"><th scope="row" role="rowheader">Public service</th><td role="cell" data-label="Default treatment">Serve only released data, from an isolated tier behind a hardened edge (web application firewall, rate limiting, bot management, monitoring). No route or credentials to non-public stores, and no write access to internal systems.</td></tr><tr role="row"><th scope="row" role="rowheader">Workforce application</th><td role="cell" data-label="Default treatment">Behind zero-trust network access (ZTNA), an identity-aware proxy or a narrowly scoped VPN.</td></tr><tr role="row"><th scope="row" role="rowheader">Administrative interface</th><td role="cell" data-label="Default treatment">Private. Managed devices, phishing-resistant multi-factor authentication (MFA) and privileged access controls.</td></tr><tr role="row"><th scope="row" role="rowheader">Service-to-service endpoint</th><td role="cell" data-label="Default treatment">Private connectivity and workload identity. Never published for convenience.</td></tr><tr role="row"><th scope="row" role="rowheader">Software-as-a-service (SaaS) application</th><td role="cell" data-label="Default treatment">Identity is the perimeter: conditional access tied to managed devices, tenant restrictions, no anonymous sharing links, and IP or private-connectivity allow-lists where the vendor offers them.</td></tr></tbody></table></div>
<p>Public exposure should need a positive business decision. &quot;It was easier to deploy&quot; and &quot;nobody knows the URL&quot; aren't reasons.</p>
<h2 id="private-by-default-playbook-3-separate-the-planes">3. Separate the planes</h2>
<p>For each public service, trace every path from the public tier to anything else.</p>
<ul><li><strong>Push, don't pull.</strong> Get public data to the public tier by pushing it out to a dedicated publishing platform or read-only store, rather than letting the public tier reach into internal systems.</li><li><strong>Live queries are fine, against the right data.</strong> If users build their own reports, run those queries against a read-only store that holds only released data, in its own plane.</li><li><strong>Remove write paths.</strong> Take them out of public tiers entirely, or confine them to isolated, scanned and quarantined storage.</li><li><strong>Keep unreleased data out of reach.</strong> Store it where the public tier can't address it at all.</li></ul>
<h2 id="private-by-default-playbook-4-remove-exposure">4. Remove exposure</h2>
<p>Move internal workloads onto private subnets or private cloud endpoints, such as AWS PrivateLink, Azure Private Link or Google Cloud Private Service Connect. Then remove public IP addresses from origins, allow inbound traffic only from approved gateways, and retire obsolete DNS records, test systems and legacy routes.</p>
<p>For network design and zoning in Australia, the reference is the Australian Signals Directorate's (ASD) <em>Guidelines for networking</em>, part of its Information Security Manual.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-3" id="private-by-default-playbook-ref-3" aria-label="Reference 3">3</a></sup></p>
<h2 id="private-by-default-playbook-5-add-independent-well-maintained-access">5. Add independent, well-maintained access</h2>
<p>Don't make each legacy application its own perimeter.</p>
<ul><li><strong>For people:</strong> ZTNA, an identity-aware proxy or a per-application VPN, enforcing user identity, device health, phishing-resistant MFA and short sessions before any connection is made.</li><li><strong>For workloads:</strong> mutually authenticated service identities, private endpoints and explicit service-to-service policies.</li></ul>
<p>Keep authentication and role-based access control in the application too. The gateway decides whether a connection can be made; the application decides what the person or service can do.</p>
<p>Treat the gateway as the most important thing you patch. Verizon's 2026 report puts the median time to fully fix a known-exploited vulnerability at 43 days,<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-4" id="private-by-default-playbook-ref-4" aria-label="Reference 4">4</a></sup> which is far too long for the system that guards everything else. Prefer outbound-only connectors, follow ASD's edge-device guidance,<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-5" id="private-by-default-playbook-ref-5" aria-label="Reference 5">5</a></sup> and collect the gateway's own logs.</p>
<p>Make the private path the easy one. If it's slow or painful, people will route around it. Templated, pre-approved patterns (a &quot;paved road&quot;) help, and the number of exception requests is a useful measure of friction.</p>
<h2 id="private-by-default-playbook-6-implement-the-essential-eight">6. Implement the Essential Eight</h2>
<p>ASD's Essential Eight is the baseline:<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-6" id="private-by-default-playbook-ref-6" aria-label="Reference 6">6</a></sup> patch applications, patch operating systems, multi-factor authentication, restrict administrative privileges, application control, restrict Microsoft Office macros, user application hardening and regular backups.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-8" id="private-by-default-playbook-ref-8" aria-label="Reference 8">8</a></sup> The maturity model runs from Maturity Level Zero to Maturity Level Three,<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-7" id="private-by-default-playbook-ref-7" aria-label="Reference 7">7</a></sup> and ASD advises reaching the same level across all eight strategies before aiming higher.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-8" aria-label="Reference 8">8</a></sup></p>
<p>Even government is some way off. Non-corporate Commonwealth entities have been required to reach Maturity Level Two since July 2022. In ASD's 2025 survey, 22% of Commonwealth entities had reached it, counting compensating controls, and 59% said legacy technology had affected their ability to implement the Essential Eight.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-7" aria-label="Reference 7">7</a></sup> The Medicare portal was that kind of legacy system.</p>
<p>The Essential Eight is a baseline, not an architecture. It doesn't replace exposure management, segmentation, secure gateways or threat modelling, which is why ASD also maintains the much broader Information Security Manual.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-9" id="private-by-default-playbook-ref-9" aria-label="Reference 9">9</a></sup></p>
<h2 id="private-by-default-playbook-7-segment">7. Segment</h2>
<p>Assume prevention will sometimes fail. Separate user networks, production workloads, management planes, backups, security tooling, development systems and third-party connections, with deny-by-default rules and documented flows.</p>
<p>Segmentation is what stops an intruder who gets in from moving sideways. ASD's guide to implementing network segmentation and segregation is a good starting point.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-10" id="private-by-default-playbook-ref-10" aria-label="Reference 10">10</a></sup></p>
<h2 id="private-by-default-playbook-8-monitor-and-detect">8. Monitor and detect</h2>
<p>Detection is the gap the Medicare incident exposed. Centralise logs from gateways, identity providers, DNS, cloud control planes, web application firewalls, endpoints and applications, and alert on:</p>
<ul><li>repeated refusals followed by new approaches</li><li>enumeration of file names or routes</li><li>access to dormant endpoints</li><li>unexpected writes</li><li>attempts to reach origins directly</li></ul>
<p>Watch outbound traffic as well as inbound. A compromised workload shouldn't have open internet access or open paths to its neighbours. And make sure every alert reaches someone who will act on it.</p>
<p>Make it easy for outsiders to reach you, too. Publish a security.txt file,<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-11" id="private-by-default-playbook-ref-11" aria-label="Reference 11">11</a></sup> keep a monitored security contact, and give it a real triage process. Services Australia's disclosure inbox was checked once a day.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-12" id="private-by-default-playbook-ref-12" aria-label="Reference 12">12</a></sup></p>
<h2 id="private-by-default-playbook-9-test">9. Test</h2>
<p>Run external attack-surface reviews and internal segmentation tests. Confirm that private origins can't be reached directly, that authentication can't be bypassed through alternate routes, and that development deployments don't inherit public ingress.</p>
<p>The Australian Cyber Security Centre's alert on AI misalignment recommends testing &quot;controls and incident response procedures against AI-enabled threat scenarios&quot;.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-13" id="private-by-default-playbook-ref-13" aria-label="Reference 13">13</a></sup> Include AI-assisted reconnaissance in your testing. The point is to reproduce the persistence you should now expect from automated visitors, not to dramatise AI.</p>
<h2 id="private-by-default-playbook-a-90-day-start">A 90-day start</h2>
<p>Ninety days is enough for visibility and guardrails. Migrating legacy workloads will take longer.</p>
<p><strong>Days 1–30</strong></p>
<ul><li>Inventory internet-facing assets and assign owners.</li><li>Remove obviously abandoned endpoints.</li><li>Require an explicit exception for any new public deployment.</li><li>Baseline against the Essential Eight, starting with unsupported internet-facing software and edge devices.</li></ul>
<p><strong>Days 31–60</strong></p>
<ul><li>Classify exposed workloads.</li><li>For each public service, map its paths to non-public data and remove its write paths.</li><li>Deploy a standard private-access pattern and close direct access to origins.</li><li>Publish private-by-default infrastructure modules for cloud networks, load balancers, Kubernetes ingress and managed databases.</li></ul>
<p><strong>Days 61–90</strong></p>
<ul><li>Segment high-value environments.</li><li>Send gateway, identity and application logs to central monitoring, with alerts for refuse-then-retry patterns.</li><li>Test backups by actually restoring them.</li><li>Run an external validation exercise that includes AI-assisted reconnaissance.</li></ul>
<h2 id="private-by-default-playbook-what-to-measure">What to measure</h2>
<ul><li>internet-facing assets, and the trend over time</li><li>percentage with a named owner and an approved justification</li><li>administrative and non-public services directly exposed</li><li>public applications with any path to non-public data, or any write path to internal systems</li><li>percentage of workloads on the approved private-access pattern</li><li>Essential Eight maturity by strategy and environment</li><li>time to patch edge devices and other internet-facing systems</li><li>time to detect refuse-then-retry and enumeration patterns</li><li>time to detect and remove an unauthorised public endpoint</li><li>exception requests against the private-access standard</li></ul>
<h2 id="private-by-default-playbook-how-this-lines-up-with-australia-s-cyber-strategy">How this lines up with Australia's cyber strategy</h2>
<p>The 2023–2030 Australian Cyber Security Strategy sets out the government's vision of Australia becoming a world leader in cyber security by 2030. It's built on six &quot;cyber shields&quot;, each providing an additional layer of defence: strong businesses, communities and citizens; secure technology; world-class threat sharing and blocking; protected critical infrastructure; sovereign capabilities; and resilient region and global leadership.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-14" id="private-by-default-playbook-ref-14" aria-label="Reference 14">14</a></sup></p>
<p>Horizon 2 of the strategy runs from 2026 to the end of 2028. Its program of work was announced on 11 June 2026, a week before the Medicare incident, with 19 actions and 64 initiatives. They include strengthening logging and monitoring standards across government and critical infrastructure, and preparing both for emerging technology, including AI.<sup class="fn"><a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-fn-15" id="private-by-default-playbook-ref-15" aria-label="Reference 15">15</a></sup></p>
<p>Private by default is one way to turn that into engineering practice. It builds secure technology into platform templates, concentrates internet access through gateways where threats can be seen and blocked, and keeps critical systems and management planes in their own zones. The monitoring it depends on is what Horizon 2's logging standards are meant to drive.</p>
<hr>
<h2 id="private-by-default-playbook-references">References</h2>
<ol class="mk-refs"><li id="private-by-default-playbook-fn-1" value="1">CISA, <em>Internet Exposure Reduction Guidance</em>. <a href="https://www.cisa.gov/resources-tools/resources/exposure-reduction">www.cisa.gov/resources-tools/resources/exposure-reduction</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-1" class="mk-back" aria-label="Back to reference 1 in the text">↩</a></li><li id="private-by-default-playbook-fn-2" value="2">BleepingComputer, <em>OpenAI hacked Australian Medicare govt site, probed data providers</em>, 24 September 2026. <a href="https://www.bleepingcomputer.com/news/security/openai-hacked-australian-medicare-govt-site-probed-data-providers/">www.bleepingcomputer.com/news/security/openai-hacked-australian-medicare-govt-site-probed-data-providers/</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-2" class="mk-back" aria-label="Back to reference 2 in the text">↩</a></li><li id="private-by-default-playbook-fn-3" value="3">Australian Signals Directorate, <em>Guidelines for networking</em> (Information Security Manual). <a href="https://www.cyber.gov.au/business-government/asds-cyber-security-frameworks/ism/cyber-security-guidelines/guidelines-for-networking">www.cyber.gov.au/business-government/asds-cyber-security-frameworks/ism/cyber-security-guidelines/guidelines-for-networking</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-3" class="mk-back" aria-label="Back to reference 3 in the text">↩</a></li><li id="private-by-default-playbook-fn-4" value="4">Verizon, <em>2026 Data Breach Investigations Report</em>. <a href="https://www.verizon.com/business/resources/Td15/reports/2026-dbir-data-breach-investigations-report.pdf">www.verizon.com/business/resources/Td15/reports/2026-dbir-data-breach-investigations-report.pdf</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-4" class="mk-back" aria-label="Back to reference 4 in the text">↩</a></li><li id="private-by-default-playbook-fn-5" value="5">Australian Signals Directorate, <em>Securing edge devices</em>. <a href="https://www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/securing-edge-devices">www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/securing-edge-devices</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-5" class="mk-back" aria-label="Back to reference 5 in the text">↩</a></li><li id="private-by-default-playbook-fn-6" value="6">Australian Signals Directorate, <em>Essential Eight</em>. <a href="https://www.cyber.gov.au/business-government/asds-cyber-security-frameworks/essential-eight">www.cyber.gov.au/business-government/asds-cyber-security-frameworks/essential-eight</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-6" class="mk-back" aria-label="Back to reference 6 in the text">↩</a></li><li id="private-by-default-playbook-fn-7" value="7">Australian Signals Directorate, <em>The Commonwealth Cyber Security Posture in 2025</em>, <a href="https://www.cyber.gov.au/sites/default/files/2026-02/the_commonwealth_cyber_security_posture_in_2025.pdf">www.cyber.gov.au/sites/default/files/2026-02/the_commonwealth_cyber_security_posture_in_2025.pdf</a>; and <em>Progress ongoing to improve the Australian Government's cyber resilience</em>, 12 February 2026, <a href="https://www.cyber.gov.au/about-us/view-all-content/news/progress-ongoing-to-improve-the-australian-governments-cyber-resilience">www.cyber.gov.au/about-us/view-all-content/news/progress-ongoing-to-improve-the-australian-governments-cyber-resilience</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-7" class="mk-back" aria-label="Back to reference 7 in the text">↩</a></li><li id="private-by-default-playbook-fn-8" value="8">Australian Signals Directorate, <em>Essential Eight maturity model</em>. <a href="https://www.cyber.gov.au/business-government/asds-cyber-security-frameworks/essential-eight/essential-eight-maturity-model">www.cyber.gov.au/business-government/asds-cyber-security-frameworks/essential-eight/essential-eight-maturity-model</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-8" class="mk-back" aria-label="Back to reference 8 in the text">↩</a></li><li id="private-by-default-playbook-fn-9" value="9">Australian Signals Directorate, <em>Information Security Manual</em>. <a href="https://www.cyber.gov.au/business-government/asds-cyber-security-frameworks/ism">www.cyber.gov.au/business-government/asds-cyber-security-frameworks/ism</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-9" class="mk-back" aria-label="Back to reference 9 in the text">↩</a></li><li id="private-by-default-playbook-fn-10" value="10">Australian Signals Directorate, <em>Implementing network segmentation and segregation</em>. <a href="https://www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/implementing-network-segmentation-and-segregation">www.cyber.gov.au/business-government/protecting-devices-systems/hardening-systems-applications/network-hardening/implementing-network-segmentation-and-segregation</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-10" class="mk-back" aria-label="Back to reference 10 in the text">↩</a></li><li id="private-by-default-playbook-fn-11" value="11">IETF, <em>RFC 9116: A File Format to Aid in Security Vulnerability Disclosure</em>, 2022. <a href="https://www.rfc-editor.org/rfc/rfc9116">www.rfc-editor.org/rfc/rfc9116</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-11" class="mk-back" aria-label="Back to reference 11 in the text">↩</a></li><li id="private-by-default-playbook-fn-12" value="12">SBS News, <em>Medicare hack alert went to inbox checked once a day and took five days to be escalated</em>, 24 September 2026. <a href="https://www.sbs.com.au/news/article/openai-agent-hacked-medicare-albanese-reveals/qas79d9ta">www.sbs.com.au/news/article/openai-agent-hacked-medicare-albanese-reveals/qas79d9ta</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-12" class="mk-back" aria-label="Back to reference 12 in the text">↩</a></li><li id="private-by-default-playbook-fn-13" value="13">Australian Cyber Security Centre, <em>Risks of AI misalignment to Australian organisations</em>, 24 September 2026, <a href="https://www.cyber.gov.au/about-us/view-all-content/alerts-and-advisories/risks-of-ai-misalignment-to-australian-organisations">www.cyber.gov.au/about-us/view-all-content/alerts-and-advisories/risks-of-ai-misalignment-to-australian-organisations</a>; wording as quoted by Cyber Daily, <a href="https://www.cyberdaily.au/security/14225-alert-australian-cyber-security-centre-issues-warning-over-ai-misalignment-risks">www.cyberdaily.au/security/14225-alert-australian-cyber-security-centre-issues-warning-over-ai-misalignment-risks</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-13" class="mk-back" aria-label="Back to reference 13 in the text">↩</a></li><li id="private-by-default-playbook-fn-14" value="14">Department of Home Affairs, <em>2023–2030 Australian Cyber Security Strategy</em>. <a href="https://www.homeaffairs.gov.au/about-us/our-portfolios/cyber-security/strategy/2023-2030-australian-cyber-security-strategy">www.homeaffairs.gov.au/about-us/our-portfolios/cyber-security/strategy/2023-2030-australian-cyber-security-strategy</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-14" class="mk-back" aria-label="Back to reference 14 in the text">↩</a></li><li id="private-by-default-playbook-fn-15" value="15">Department of Home Affairs, <em>Horizon 2: Expanding our reach (2026–2028)</em>. <a href="https://www.homeaffairs.gov.au/about-us/our-portfolios/cyber-security/strategy/horizon-2">www.homeaffairs.gov.au/about-us/our-portfolios/cyber-security/strategy/horizon-2</a> <a href="https://kellock.com.au/writing/private-by-default-playbook/#private-by-default-playbook-ref-15" class="mk-back" aria-label="Back to reference 15 in the text">↩</a></li></ol>
]]></content:encoded>
    </item>
    <item>
      <title>Shift Left vs AI: Who Owns the Future of AppSec?</title>
      <link>https://kellock.com.au/writing/shift-left-vs-ai/</link>
      <guid isPermaLink="true">https://kellock.com.au/writing/shift-left-vs-ai/</guid>
      <pubDate>Wed, 15 Jul 2026 09:00:00 +1000</pubDate>
      <dc:creator>Matt Kellock</dc:creator>
      <category>Security</category>
      <description>Opened the conference in a formal debate, arguing the negative: shift-left security remains foundational, and AI strengthens it rather than replaces it.</description>
      <content:encoded><![CDATA[<p><em>Opened the conference in a formal debate, arguing the negative: shift-left security remains foundational, and AI strengthens it rather than replaces it.</em></p>
<p>AppSec and DevSecOps Melbourne 2026, run by Corinium at Crown Promenade, opened with a formal debate, &quot;Shift Left vs AI: Who Owns the Future of AppSec?&quot;, on the motion that shift-left security will no longer be the primary control model in enterprise SDLCs. Ibrahim Mohammed and I drew the negative, which meant arguing that shifting security left remains foundational and that AI strengthens it rather than replaces it.</p>
<h2>The case</h2>
<p>AI has made detection dramatically better. Model-assisted triage and reachability analysis cut through the noise that made developers resent security tooling, and that deserves to be conceded properly rather than argued around.</p>
<p>But detection and prevention are different instruments. A runtime control raises a finding for a person to act on, under time pressure, in a live system, usually by someone who did not write the code. A pipeline control makes the decision once, in advance, at the moment of change, when the cost of being wrong is a failed build rather than an exposure window.</p>
<blockquote>Runtime can alarm. Only the pipeline can refuse.</blockquote>
<p>Current exploitation and remediation data point the same way: exploitation is getting faster while patching is getting slower, so a posture built on finding things and then fixing them is structurally behind. Regulators are also starting to price the security posture an organisation held before an incident, separately from how well it responded afterwards.</p>
<h2>Where AI belongs</h2>
<p>The pattern I argued for is short enough to fit on a slide: AI proposes, the gate disposes. Put models where a person was already reading output and they are transformative. Keep the refusal deterministic and legible, so it can be explained to an auditor and a developer in the same sentence.</p>
<h2>The session</h2>
<p>A headliner debate at 09:15 on Wednesday 15 July 2026, facilitated by Angelina Liu of Aikido. Kalpana Venkatesan of Kmart Australia and Dilip Konar, formerly of Australia Post, argued for the motion; Ibrahim Mohammed of Insignia Financial and I argued against it.</p>
<p>Five-minute opening statements, a moderated exchange, audience questions and a before-and-after audience poll. Preparation drew on a source-verified research brief covering the EU Cyber Resilience Act impact assessment, current exploitation and remediation data, and Australian privacy enforcement.</p>
<h2>Elsewhere</h2>
<ul>
<li><a href="https://appsec-devsecops-mel.coriniumintelligence.com/agenda">Session listing on the event agenda</a> (Corinium)</li>
<li><a href="https://www.linkedin.com/posts/angelinaxl_appsec-devsecops-cybersecurity-ugcPost-7483510716008800257-QKXX/">Photos and a wrap-up from the facilitator, Angelina Liu</a> (LinkedIn)</li>
<li><a href="https://www.linkedin.com/posts/rhys-ghorashi-0bb01b32_devsecops-appsec-devsecops-ugcPost-7482946446716006400-RHbp/">From the room as the debate opened, Rhys Ghorashi of Corinium</a> (LinkedIn)</li>
</ul>]]></content:encoded>
    </item>
  </channel>
</rss>