<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/">
  <channel>
    <title>Offensive Security on Zero-Entry</title>
    <link>https://zero-entry.co.za/categories/offensive-security/</link>
    <description>Recent content in Offensive Security on Zero-Entry</description>
    <image>
      <title>Zero-Entry</title>
      <url>https://zero-entry.co.za/images/about.jpg</url>
      <link>https://zero-entry.co.za/images/about.jpg</link>
    </image>
    <generator>Hugo -- 0.147.7</generator>
    <language>en-us</language>
    <lastBuildDate>Fri, 12 Jun 2026 07:25:21 +0200</lastBuildDate>
    <atom:link href="https://zero-entry.co.za/categories/offensive-security/index.xml" rel="self" type="application/rss+xml" />
    <item>
      <title>The Rise of Synthetic Passwords in Botnet and Attack Operations</title>
      <link>https://zero-entry.co.za/posts/synthetic-passwords-botnet-talk/</link>
      <pubDate>Fri, 12 Jun 2026 00:00:00 +0200</pubDate>
      <guid>https://zero-entry.co.za/posts/synthetic-passwords-botnet-talk/</guid>
      <description>Write-up of my PasswordsCon talk at BSides Las Vegas: synthetic passwords, credentials that were never meant to log in, and how they quietly break breach correlation, honeywords, and SOC triage. With the data and the generator.</description>
      <content:encoded><![CDATA[<p>This is the write-up of a talk I gave at PasswordsCon, which runs as a track inside BSides Las Vegas. It was my first time in Vegas and my first talk at a conference that size, so if the recording has me talking slightly too fast, that is why.</p>
<div style="position: relative; padding-bottom: 56.25%; height: 0; overflow: hidden;">
      <iframe allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share; fullscreen" loading="eager" referrerpolicy="strict-origin-when-cross-origin" src="https://www.youtube.com/embed/TgraR-1Q8Tc?autoplay=0&amp;controls=1&amp;end=0&amp;loop=0&amp;mute=0&amp;start=0" style="position: absolute; top: 0; left: 0; width: 100%; height: 100%; border:0;" title="YouTube video"></iframe>
    </div>

<p>The short version: attackers are starting to throw passwords at login systems that were never meant to work, and that breaks an assumption a lot of defensive tooling is quietly built on.</p>
<h2 id="what-a-synthetic-password-is">What a synthetic password is</h2>
<p>A synthetic password is a credential that was generated, not leaked and not guessed. It has never appeared in a breach because nobody ever used it. You make it at scale with a script or a model, shaped to look like the kind of password a person would actually choose.</p>
<p>That last part is the point. These are not the 25 character blobs a password manager spits out that look like a bomb went off in the alphabet. They look human. Something like:</p>
<div class="highlight"><pre tabindex="0" class="chroma"><code class="language-text" data-lang="text"><span class="line"><span class="cl">Blaire#3863
</span></span><span class="line"><span class="cl">Elle@2265
</span></span><span class="line"><span class="cl">jazz!light116
</span></span><span class="line"><span class="cl">chess&amp;flint152
</span></span></code></pre></div><p>None of those have ever been typed into anything. They look real enough, and &ldquo;real enough&rdquo; is the whole problem.</p>
<h2 id="they-are-not-trying-to-log-in">They are not trying to log in</h2>
<p>The instinct is to treat a flood of login attempts as brute force, where the attacker is hoping one of the guesses lands. Synthetic passwords are not really that. The odds of any single generated string matching a real account are tiny, and the attacker knows it. Logging in is not the goal.</p>
<p>The goal is everything that happens around the login attempt:</p>
<ul>
<li>Flood the SOC and the SIEM so real credential stuffing hides in the noise.</li>
<li>Defeat breach matching, because none of these passwords are in any breach corpus.</li>
<li>Burn analyst time on high volume, high entropy inputs that go nowhere.</li>
</ul>
<p>In the operational cases that started me down this path, defenders were seeing login traffic that looked like the entire world was trying to get in at once, with passwords that all looked plausible and none of which were known-bad. That is the tell, and it is also the trap.</p>
<h2 id="making-them-is-trivial">Making them is trivial</h2>
<p>I want to be honest about how low the barrier is. The first generator I wrote was a pile of if-statements I put together quickly with help from ChatGPT. It is a proof of concept, not clever, and I could clearly do better with real effort. It did not matter. You feed it words and numbers, pets, names, drinks, whatever, and it recombines them with separators and digits into human-shaped strings.</p>
<p>I generated 10 million of them and not one was a repeat. The full generator and the analysis scripts are here:</p>
<p><a href="https://github.com/taffy210/synthetic-passwords-botnet">github.com/taffy210/synthetic-passwords-botnet</a></p>
<h2 id="the-experiment">The experiment</h2>
<p>I wanted to put numbers behind the idea rather than just assert it. So I took two corpora and scored both against a breach set of about 10 million known passwords.</p>
<ul>
<li>A real corpus: roughly 1 million passwords pulled from recent stealer logs.</li>
<li>A synthetic corpus: 10 million passwords from my generator.</li>
</ul>
<p>For each password I computed a per-character Shannon entropy, bucketed it by length and rough pattern, and checked whether it appeared in the breach set. The results are the part worth keeping.</p>
<table>
  <thead>
      <tr>
          <th></th>
          <th>Real (stealer logs)</th>
          <th>Synthetic</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Passwords analysed</td>
          <td>1,011,844</td>
          <td>10,000,000</td>
      </tr>
      <tr>
          <td>Found in breach corpus</td>
          <td>98.66%</td>
          <td>0.0002% (18 total)</td>
      </tr>
      <tr>
          <td>Average entropy (per char)</td>
          <td>2.91</td>
          <td>3.27</td>
      </tr>
  </tbody>
</table>
<p>98.66% of the real passwords were already in the breach set. People reuse, and they reuse heavily, which is depressing but not surprising. Out of 10 million synthetic passwords, 18 collided with the breach set. Effectively zero, and the 18 are just birthday-paradox coincidences on common formats.</p>
<p>Someone in the room pushed on exactly this, asking whether it is statistically possible for almost none of 10 million to show up. It is, and that is the finding. The breach corpus is a list of passwords humans have actually used. Synthetic passwords are novel by construction, so they sail straight past it.</p>
<h2 id="they-even-look-right-by-length">They even look right by length</h2>
<p>If length were a giveaway, this would be easy. It is not. Real passwords cluster around 8 to 10 characters; the synthetic set sits a little longer, around 9 to 14, well inside the range a human password lives in.</p>
<p><img alt="Length distribution of real versus synthetic passwords" loading="lazy" src="/images/synthetic-vs-real-length.png"></p>
<p>The shapes are not identical, but a synthetic password is not going to stand out in a login stream because it was 41 characters long. It looks like something a person would pick.</p>
<h2 id="why-this-breaks-defenses">Why this breaks defenses</h2>
<p>The reason this matters is that a lot of controls lean on the same assumption: if a password has never been seen in a breach, it is probably not part of an attack. Synthetic passwords turn that assumption into an exploit.</p>
<ul>
<li><strong>Breach correlation goes blind.</strong> Tools that gate on &ldquo;have I seen this password leak before&rdquo;, whether that is Have I Been Pwned, a stealer-log feed, or a commercial repository, return a clean result for every synthetic input. Zero match gets read as low threat, and the attempts get waved through.</li>
<li><strong>Honeywords get harder to trigger.</strong> If every attempt is unique and high entropy, decoy credentials and honey accounts are less likely to be tripped, because nothing looks like a targeted guess.</li>
<li><strong>Behavioral signal gets diluted.</strong> When each attempt comes from a different session or IP, with a different plausible password, there is no obvious anchor to pivot on. Not the password, not the source, not the format.</li>
</ul>
<p>None of these tools are broken. They are answering the question they were designed to answer. The attacker just changed the question.</p>
<h2 id="a-detection-angle-the-data-handed-me">A detection angle the data handed me</h2>
<p>One thing jumped out of the numbers that I did not expect. The synthetic passwords had a tight entropy band, roughly 2.0 to 3.9 per character, while the real corpus ranged from basically 0 up past 6. Human password sets are messy and wide. A generator, unless you work at it, produces something suspiciously uniform.</p>
<p>That uniformity is itself a signal. Real traffic is lumpy. A stream of login attempts whose entropy and format variance are too consistent, too clean, is worth a second look precisely because real users are not that tidy.</p>
<h2 id="what-i-think-defenders-should-do">What I think defenders should do</h2>
<p>Most of this is not exotic. The frustrating part is how often only one method is in place, usually breach correlation on its own.</p>
<ul>
<li>Stop treating &ldquo;not in a breach&rdquo; as &ldquo;safe&rdquo;. It is one weak signal, not a verdict.</li>
<li>Add entropy scoring and format-variance monitoring, and watch for sudden surges of high-variance inputs.</li>
<li>Use session and device fingerprinting so the password is not the only thing you are judging.</li>
<li>Watch for attempts that fail too cleanly. A real person who gets it wrong tries something close to the original next, <code>password</code> then <code>password1</code>. A jump to something completely unrelated every time looks more like a machine.</li>
</ul>
<p>The bigger shift is from identity-based detection to intent-based detection. Instead of asking only &ldquo;is this credential known-bad&rdquo;, ask &ldquo;does this attempt behave like a human trying to get into their own account&rdquo;. That is a question a model could reasonably be trained to help with, flagging sessions whose patterns are not human in the same way a CAPTCHA tries to.</p>
<h2 id="honest-caveats">Honest caveats</h2>
<p>I would rather state the limits than have someone find them for me. The generator is a first pass. Per-character Shannon entropy is a crude measure and not the same as guessing resistance. The breach corpus and the stealer-log corpus overlap by their nature, which is part of why the real match rate is so high. And yes, my conference graph was lopsided enough that the room thought I had lost a fight with PowerPoint. The cleaned-up version is above.</p>
<p>None of that changes the core point. Synthetic passwords are cheap, scalable, and invisible to controls that assume novelty equals safety.</p>
<h2 id="closing">Closing</h2>
<p>Synthetic passwords are not on the fringe. Botnets generate them, attack scripts ship them, and they cost almost nothing to produce. The attacker does not care whether the password works, and often does not want it to. The job it is doing is masking and distracting, and it does that job well.</p>
<p>The talk was mostly an awareness piece, because most of the fixes are things this audience already considers obvious. The gap is that obvious and implemented are not the same thing.</p>
<p>Recording is above. Code and data are on <a href="https://github.com/taffy210/synthetic-passwords-botnet">GitHub</a>.</p>
]]></content:encoded>
    </item>
    <item>
      <title>Security Theatre in Enterprise Networks</title>
      <link>https://zero-entry.co.za/posts/security-theatre-in-enterprise-networks/</link>
      <pubDate>Thu, 19 Feb 2026 19:00:00 +0200</pubDate>
      <guid>https://zero-entry.co.za/posts/security-theatre-in-enterprise-networks/</guid>
      <description>Why security controls that look good on paper often fail under basic adversarial pressure: field notes from real assessments.</description>
      <content:encoded><![CDATA[<blockquote>
<p>Disclaimer: The examples below are anonymised and aggregated across multiple engagements. The goal is to highlight recurring patterns, not embarrass any specific organisation.</p></blockquote>
<p><img loading="lazy" src="/images/Pasted%20image%2020260219201318.png"></p>
<h1 id="security-theatre-field-notes-from-the-inside">Security Theatre: Field Notes from the Inside</h1>
<h2 id="the-scene">The Scene</h2>
<p>Most environments I assess are not wide open. They have firewalls, policies, and controls that look sensible on a slide deck.</p>
<p>The same weaknesses keep showing up anyway. Security gets implemented as a compliance checklist rather than an adversarial system.</p>
<p>That is security theatre: controls that exist, but fail under pressure.</p>
<p>It shows up in small things (a forgotten hyperlink), legacy things (Telnet still running), and complex things (multi-tenant routing edge cases that quietly break the idea of &ldquo;internal&rdquo;).</p>
<p>Most incidents do not start with a zero-day. They start with an assumption.</p>
<h2 id="the-meaning">The Meaning</h2>
<p>Security theatre is security that only works from one angle.</p>
<ul>
<li>It satisfies an audit requirement</li>
<li>It meets a policy statement</li>
<li>It was set up once and never re-validated</li>
<li>It relies on &ldquo;internal trust&rdquo; as a boundary</li>
</ul>
<p>It fails the moment an attacker does basic due diligence.</p>
<h3 id="real-security-vs-theatre">Real Security vs Theatre</h3>
<table>
  <thead>
      <tr>
          <th>Real security</th>
          <th>Security theatre</th>
      </tr>
  </thead>
  <tbody>
      <tr>
          <td>Tested adversarially</td>
          <td>Signed off administratively</td>
      </tr>
      <tr>
          <td>Assumes compromise is possible</td>
          <td>Assumes trust is default</td>
      </tr>
      <tr>
          <td>Measured continuously</td>
          <td>Configured once</td>
      </tr>
      <tr>
          <td>Has clear ownership</td>
          <td>&ldquo;Someone&rdquo; owns it</td>
      </tr>
      <tr>
          <td>Breaks safely</td>
          <td>Breaks silently</td>
      </tr>
  </tbody>
</table>
<h2 id="a-simple-test">A Simple Test</h2>
<p>Rate each control against three questions:</p>
<ol>
<li>Is it verified? Not configured, but tested.</li>
<li>Is it monitored? Will you know when it fails?</li>
<li>Is it owned? Is someone accountable for its health?</li>
</ol>
<p>Two &ldquo;no&rdquo; answers means you do not have a control.</p>
<h2 id="field-notes">Field Notes</h2>
<h3 id="1-internal-rfc1918-space-leaking-other-peoples-infrastructure">1. &ldquo;Internal&rdquo; RFC1918 Space Leaking Other People&rsquo;s Infrastructure</h3>
<p>On one client network, we found a large number of devices in the <code>172.30.x.x</code> and <code>172.31.x.x</code> ranges. Normal enough.</p>
<p>The exposed services were not normal:</p>
<ul>
<li>Cisco IOS devices presenting known vulnerabilities</li>
<li>OpenSSH issues flagged, including severe exposure classes</li>
<li>SNMP responding with default community strings (<code>public</code>)</li>
<li>Telnet open in cleartext</li>
</ul>
<p>When we pulled device information over SNMP, the fingerprints did not match the client&rsquo;s environment. The devices looked like other organisations&rsquo; routers, visible from within this client&rsquo;s own network.</p>
<p>Whether it was a provider-side forwarding mistake, a multi-tenant routing bleed, or a design choice nobody fully understood, the problem is the same:</p>
<blockquote>
<p>&ldquo;Internal&rdquo; is a routing decision, not a security boundary.</p></blockquote>
<p>A network can be &ldquo;private&rdquo; on paper while being multi-tenant in practice. Technically not the client&rsquo;s fault. Still their problem.</p>
<p>The pessimistic outlook: unintended trust paths, lateral movement opportunities, messy incident response (&ldquo;is that ours?&rdquo; becomes a real question), and reputational fallout if the client network becomes a stepping stone into someone else&rsquo;s infrastructure.</p>
<h3 id="2-monitoring-interfaces-that-become-management-interfaces">2. Monitoring Interfaces That Become Management Interfaces</h3>
<p>SNMP is often justified as &ldquo;monitoring only.&rdquo;</p>
<p>In practice it provides device names, interfaces, routing hints, OS and platform fingerprinting, uptime, load, and depending on configuration, more. When SNMPv2c is exposed with default communities, &ldquo;monitoring&rdquo; becomes enumeration on demand.</p>
<p>The control exists (&ldquo;we have monitoring&rdquo;), but the threat model is absent (&ldquo;monitoring endpoints are high-value targets&rdquo;).</p>
<p>What to do instead:</p>
<ul>
<li>SNMPv3 with auth and privacy where possible</li>
<li>Strict ACLs so only the monitoring system can reach SNMP</li>
<li>Remove default communities, remove write communities unless there is a hard requirement</li>
<li>Continuous checks for <code>public</code>/<code>private</code> drift</li>
</ul>
<h3 id="3-telnet-in-2026">3. Telnet in 2026</h3>
<p>Telnet still appears internally more often than people admit. Rarely a deliberate decision. More often a leftover: legacy device, a &ldquo;temporary&rdquo; troubleshooting session, vendor defaults, a project that ended but the port stayed open.</p>
<p>What to do:</p>
<ul>
<li>Disable Telnet everywhere, policy plus validation</li>
<li>If legacy hardware makes that impossible, isolate it and treat it as hostile</li>
<li>Enforce SSH and modern cipher suites for all management</li>
<li>Log and alert on any Telnet session as a high-signal event</li>
</ul>
<h3 id="4-the-easiest-brand-hijack-is-a-broken-hyperlink">4. The Easiest Brand Hijack Is a Broken Hyperlink</h3>
<p>One of the more sobering findings I have seen had no CVE attached.</p>
<p>A client website linked to their social media profiles. The X and Instagram links pointed to accounts that did not exist. We registered the usernames the website was implicitly endorsing.</p>
<p>Any visitor clicking those links landed on an attacker-controlled profile that looked official by association. I was, briefly, the client&rsquo;s new social media manager.</p>
<p>The organisation likely had solid perimeter controls. Their public brand identity had an unguarded back door.</p>
<p>What to do:</p>
<ul>
<li>Treat web presence as an asset inventory: domains, handles, app store listings</li>
<li>Reserve key usernames even on platforms you do not actively use</li>
<li>Run a quarterly external exposure review with marketing and security together</li>
<li>Add a brand protection checklist to release processes</li>
</ul>
<h3 id="5-hidden-ssids-and-other-comforting-myths">5. Hidden SSIDs and Other Comforting Myths</h3>
<p>I have assessed environments where the guest Wi-Fi was modern and well-configured (WPA3), additional SSIDs existed as &ldquo;hidden,&rdquo; and those SSIDs still covered public areas: roads, car parks, the perimeter.</p>
<p>Hidden SSIDs do not stop discovery. The tooling is trivial and takes minutes. They stop casual users from seeing the network in a dropdown list.</p>
<p>What to do:</p>
<ul>
<li>Remove unused SSIDs entirely</li>
<li>Prefer WPA3-Enterprise (EAP) where feasible</li>
<li>Segment wireless properly: guest is not corporate, corporate is not infrastructure</li>
<li>Validate coverage from outside the perimeter</li>
</ul>
<h3 id="6-medium-findings-that-do-not-feel-medium">6. &ldquo;Medium&rdquo; Findings That Do Not Feel Medium</h3>
<p>Scanner outputs create a predictable behaviour pattern. Critical gets attention, high gets scheduled, medium gets ignored, info gets laughed off.</p>
<p>Some medium findings describe classes of weakness that become severe with real-world conditions: SSH weaknesses that matter under MITM conditions, management interfaces with brute-force exposure, patch states that are &ldquo;mostly fine&rdquo; but leave a few critical paths open.</p>
<p>Severity is a starting hypothesis, not a verdict. Two mediums can combine into a critical.</p>
<p>Prioritise weaknesses that enable credential capture, management access, or trust boundary crossing regardless of how the scanner scored them.</p>
<h3 id="7-logs-exist-but-meaning-does-not">7. Logs Exist, but Meaning Does Not</h3>
<p>On the blue side, I often see logging enabled but not operationally useful.</p>
<p>Suricata is a good example. It can generate excellent visibility, but without a workflow it becomes noise. The questions that matter are: what are our top external destinations, which internal hosts talk to unusual places, and what changed since last week.</p>
<p>&ldquo;We have monitoring&rdquo; becomes a checkbox, and the logs do not get reviewed.</p>
<p>What to do:</p>
<ul>
<li>Build simple, repeatable queries that surface top talkers, new domains, and rare destinations</li>
<li>Baseline normal behaviour and alert on deviations</li>
<li>Assign ownership: someone reviews signals and acts on them</li>
</ul>
<h2 id="the-patterns-underneath">The Patterns Underneath</h2>
<p>The field notes above are specific. Step back and the same three shapes keep appearing across otherwise unrelated environments. A control is present, it satisfies a diagram or an audit line, and it quietly does nothing under pressure. These are the patterns worth recognising before you find them.</p>
<h3 id="detection-without-response">Detection without response</h3>
<p>Detection promises visibility. Alerts come in, someone investigates, action is taken. It works for a while. Dashboards get checked, alerts get acknowledged, then the noise builds. False positives pile up. A day goes by without anyone looking, then two, and eventually nobody is sure who owns the dashboard.</p>
<p>At that point the alert that fires and the alert that does not fire produce the same outcome: nothing. An alert nobody investigates is a log entry, not a control. I have watched a Cowrie session persist for minutes on a box that was generating events the whole time, with the events landing in an index nobody queried. The data was perfect. The response was absent.</p>
<p>If you want to test this in your own environment, trigger something that should alert and time how long until a human acts. If the answer is &ldquo;never,&rdquo; the detection is theatre.</p>
<h3 id="authentication-with-escape-hatches">Authentication with escape hatches</h3>
<p>Strong authentication gets undermined at the exceptions, not the front door. Legacy devices that &ldquo;don&rsquo;t support it.&rdquo; Applications that need a compatibility mode. A temporary workaround that quietly becomes permanent. Then the choice problem: several authentication methods enabled at once for convenience, some far weaker than others, with the intention of resilience and the effect of dilution.</p>
<p>Attackers do not attack the strong path. They enumerate the methods on offer and use the weakest one you left enabled &ldquo;just in case.&rdquo; A tenant with phishing-resistant MFA on the primary flow and a legacy protocol still accepting a username and password is a tenant with no MFA, for anyone who bothers to ask the right endpoint which methods it supports.</p>
<p>The test: list every way to authenticate to a system, then rate the weakest one. That is your real authentication strength. The strongest path is irrelevant if a weaker one is still reachable.</p>
<h3 id="segmentation-without-isolation">Segmentation without isolation</h3>
<p>Segmentation looks clean in a diagram. Separate zones, tidy rulesets, clear boundaries. In practice the boundaries collapse at shared services. DNS, authentication, file shares, jump hosts, and management interfaces punch holes through supposedly isolated segments because something on one side needs something on the other. Rules get added to make a thing work, the isolation erodes a rule at a time, and nobody re-tests the boundary as a whole.</p>
<p>The network looks compartmentalised. When it matters, it routes like a flat one. This is the same failure as the multi-tenant routing in field note one, seen from the inside: &ldquo;internal&rdquo; and &ldquo;isolated&rdquo; are both routing decisions wearing a security costume.</p>
<p>The test: from a low-trust segment, see what you can actually reach. Not what the diagram says you should reach. What answers.</p>
<h2 id="why-this-happens">Why This Happens</h2>
<p>Most security theatre comes from normal organisational pressure:</p>
<ul>
<li>Compliance is measurable; security is contextual</li>
<li>Change control is painful, so legacy stays</li>
<li>Ownership is fragmented, so controls drift</li>
<li>Teams are stretched, so verification falls away</li>
<li>Perimeters look strong, so internal trust grows by default</li>
</ul>
<p>More tools will not fix this. Verification, ownership, and feedback loops will.</p>
<h2 id="breaking-the-cycle">Breaking the Cycle</h2>
<p><strong>This week:</strong></p>
<ul>
<li>Kill Telnet wherever it exists</li>
<li>Remove default SNMP communities, lock SNMP behind ACLs</li>
<li>Inventory and reserve public brand assets</li>
<li>Delete unused SSIDs, validate coverage beyond the perimeter</li>
<li>Review private ranges for routing weirdness and unintended reachability</li>
</ul>
<p><strong>The structural fix:</strong> a control is not done when it is configured. It is done when it is verified with adversarial thinking, monitored for failure, and owned with accountability.</p>
<p>If you cannot answer &ldquo;who owns this control,&rdquo; it is theatre waiting to fail.</p>
<h2 id="the-end">The End</h2>
<p>Security is not the number of controls you can list. It is the number that survive contact with an adversary.</p>
<p>If your &ldquo;internal&rdquo; network is only secure because everyone agrees to behave, that is not a network. It is a trust exercise.</p>
<h2 id="appendix-how-screwed-am-i">Appendix: How Screwed Am I?</h2>
<p>If any of these are true, you are looking at theatre:</p>
<ul>
<li>&ldquo;It&rsquo;s fine because it&rsquo;s internal&rdquo;</li>
<li>&ldquo;We enabled logging&rdquo; (but nobody reviews it)</li>
<li>&ldquo;We use SNMP for monitoring&rdquo; (but it&rsquo;s v2c and broadly reachable)</li>
<li>&ldquo;It&rsquo;s hidden&rdquo; (SSIDs, panels, directories)</li>
<li>&ldquo;We patched most of it&rdquo;</li>
<li>&ldquo;That&rsquo;s only a medium&rdquo;</li>
<li>&ldquo;We don&rsquo;t know who owns it&rdquo;</li>
</ul>
<p>Hunt the assumptions, not just the CVEs.</p>
]]></content:encoded>
    </item>
  </channel>
</rss>
