<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom">
  <channel>
    <title>Techhack — Developing the Future — Blog</title>
    <link>http://localhost:3000/blog</link>
    <atom:link href="http://localhost:3000/blog/rss.xml" rel="self" type="application/rss+xml" />
    <description>Techhack builds and maintains its own software products, from security tooling to consumer apps.</description>
    <language>en</language>
    <item>
      <title>VulnScan AI v0.4.10</title>
      <link>http://localhost:3000/blog/vulnscan-ai-v0-4-10</link>
      <guid isPermaLink="true">http://localhost:3000/blog/vulnscan-ai-v0-4-10</guid>
      <pubDate>Sun, 26 Jul 2026 16:46:22 GMT</pubDate>
      <description>The interactive menu&apos;s &quot;Network scan&quot; entry (option 3) silently returned to the menu when networktargets wasn&apos;t configured yet. It printed an explanatory hint but never paused before the next screen redraw, so on curses terminals the hint was wiped before it could be read.</description>
      <content:encoded><![CDATA[<h2>Fix</h2><ul><li><p>The interactive menu's "Network scan" entry (option 3) silently returned to the menu when <code>network_targets</code> wasn't configured yet. It printed an explanatory hint but never paused before the next screen redraw, so on curses terminals the hint was wiped before it could be read.</p></li></ul><h2>Docs</h2><ul><li><p>The <code>menu</code> command reference was missing <code>compliance</code>, <code>network</code> and <code>audit</code> from its list of covered commands.</p></li><li><p>The website's command table gained a dedicated row for <code>scan --scanner network</code> (it previously only appeared as a scanner chip, unlike every other first-class command).</p></li></ul><p>331 tests, bandit clean.</p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/vulnscan-ai/releases/tag/v0.4.10">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>VulnScan AI v0.4.9</title>
      <link>http://localhost:3000/blog/vulnscan-ai-v0-4-9</link>
      <guid isPermaLink="true">http://localhost:3000/blog/vulnscan-ai-v0-4-9</guid>
      <pubDate>Fri, 24 Jul 2026 16:38:51 GMT</pubDate>
      <description>Recommends: weak dependencies (like nmap for the network scanner) only</description>
      <content:encoded><![CDATA[<h2><code>info</code> offers to install nmap for the network scanner</h2><p><code>Recommends:</code> weak dependencies (like nmap for the <code>network</code> scanner) only<br />auto-install on a fresh <code>dnf install</code> — an upgrade of an already-installed<br />vulnscan-ai does not retroactively pull in a newly added weak dependency.</p><p><code>vulnscan-ai info</code> now explains exactly why the <code>network</code> scanner is<br />unavailable (missing <code>network_targets</code> config, missing nmap, or both)<br />instead of just printing "unavailable", and when nmap is the only thing<br />missing it offers to install it right there via <code>dnf install -y nmap</code><br />(interactively, TTY only) or prints the command to run yourself otherwise.</p><p>328 tests, bandit clean.</p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/vulnscan-ai/releases/tag/v0.4.9">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>VulnScan AI v0.4.8</title>
      <link>http://localhost:3000/blog/vulnscan-ai-v0-4-8</link>
      <guid isPermaLink="true">http://localhost:3000/blog/vulnscan-ai-v0-4-8</guid>
      <pubDate>Fri, 24 Jul 2026 16:38:42 GMT</pubDate>
      <description>New network scanner:</description>
      <content:encoded><![CDATA[<h2>Network exposure scanner (10th scanner)</h2><p>New <code>network</code> scanner: the first scanner that inspects hosts OTHER than the<br />one it runs on. Shells out to <code>nmap -sV</code> for host discovery, a scoped port<br />scan and service/version detection, then flags the same plaintext/legacy-<br />protocol and sensitive-service exposures as the <code>ports</code> scanner (shared risk<br />taxonomy, extracted into <code>net_classify.py</code>) — the same risk model, observed<br />remotely instead of via local <code>ss</code>. No CVE/CPE matching on detected service<br />versions yet (parked for a later phase).</p><p><strong>Safety:</strong> gated on an explicit, config-only <code>network_targets</code> allow-list<br />(hosts/CIDRs you are authorized to test) — never a CLI flag, no env<br />override. The scanner stays genuinely unavailable until configured, and<br />prints an authorization reminder on every real invocation. Findings for a<br />target-bearing host are detection-only: <code>remediation.py</code> hard-refuses to<br />propose or execute commands against them, since a fix for a remote host<br />cannot run on this one.</p><p>New "Network scan" menu entry. Optional <code>Recommends: nmap</code> (degrades<br />gracefully if absent). 323 tests, bandit clean.</p><p>Install: see <a target="_blank" rel="noopener noreferrer" href="https://repo.techhack.nl">https://repo.techhack.nl</a></p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/vulnscan-ai/releases/tag/v0.4.8">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Chameleon-PQ v0.8.5 UPDATE</title>
      <link>http://localhost:3000/blog/chameleon-pq-v0-8-5</link>
      <guid isPermaLink="true">http://localhost:3000/blog/chameleon-pq-v0-8-5</guid>
      <pubDate>Wed, 22 Jul 2026 18:20:26 GMT</pubDate>
      <description>Rekey traffic now rides the outbound pacer under a traffic-shaping
profile instead of bypassing it</description>
      <content:encoded><![CDATA[<p>Rekey traffic now rides the outbound pacer under a traffic-shaping<br />profile instead of bypassing it (see <a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/chameleon-pq/commit/664115f101e95d2b01f34516082fcfed28495104"><u>664115f</u></a>): no more out-of-schedule<br />burst, and the tick loop no longer stalls (silencing the cover stream)<br />while a rekey is in flight.</p><p></p><p><strong>Full Changelog</strong>: <a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/chameleon-pq/compare/v0.8.4...v0.8.5">https://github.com/btdt1983/chameleon-pq/compare/v0.8.4...v0.8.5</a></p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/chameleon-pq/releases/tag/v0.8.5">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>abyss-top v1.1.0</title>
      <link>http://localhost:3000/blog/abyss-top-v1-1-0</link>
      <guid isPermaLink="true">http://localhost:3000/blog/abyss-top-v1-1-0</guid>
      <pubDate>Tue, 21 Jul 2026 15:05:02 GMT</pubDate>
      <description>Guest table gains three additions, all pure /proc + /sys with no new
dependencies:</description>
      <content:encoded><![CDATA[<p>Guest table gains three additions, all pure /proc + /sys with no new<br />dependencies:<br /><br />- STATE column: the QEMU process state (from /proc/&lt;pid&gt;/stat via sysinfo)<br />  reduced to up / io / stop / dead, so a hung, SIGSTOP'd or defunct guest<br />  stands out. This is the OS process state, not the libvirt domain state,<br />  so a libvirt-"paused" guest still reads "up".<br />- UPTIME column: process run time, formatted compactly (e.g. 4d2h, 18h30m).<br />- TOTAL row: sums CPU / memory / disk / net across all guests.<br /><br /></p><p></p><p><strong>Full Changelog</strong>: <a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/abyss-top/commits/v1.1.0">https://github.com/btdt1983/abyss-top/commits/v1.1.0</a></p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/abyss-top/releases/tag/v1.1.0">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>Chameleon-PQ v0.8.4</title>
      <link>http://localhost:3000/blog/chameleon-pq-v0-8-4</link>
      <guid isPermaLink="true">http://localhost:3000/blog/chameleon-pq-v0-8-4</guid>
      <pubDate>Mon, 20 Jul 2026 19:38:43 GMT</pubDate>
      <description>fix(tunnel): restore small-batch inline fast path (regression fix)</description>
      <content:encoded><![CDATA[<h2>What's Changed</h2><ul><li><p>fix(tunnel): restore small-batch inline fast path (regression fix) </p></li><li><p>fix(tunnel): fix outbound seal ordering race (correctness bug) </p></li><li><p>fix(tunnel): raise INLINE_THRESHOLD to the proven 128 value </p></li><li><p>refactor(engine): reserve-then-parallel-seal crypto pipeline, wireguard-go style </p></li><li><p></p></li></ul><p><strong>Full Changelog</strong>: <a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/chameleon-pq/compare/v0.8.3...v0.8.4">https://github.com/btdt1983/chameleon-pq/compare/v0.8.3...v0.8.4</a></p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/chameleon-pq/releases/tag/v0.8.4">View this release on GitHub</a></p>]]></content:encoded>
    </item>
    <item>
      <title>VulnScan AI v0.4.7</title>
      <link>http://localhost:3000/blog/vulnscan-ai-v0-4-7</link>
      <guid isPermaLink="true">http://localhost:3000/blog/vulnscan-ai-v0-4-7</guid>
      <pubDate>Mon, 20 Jul 2026 19:38:03 GMT</pubDate>
      <description>A adversarial review of the whole codebase; every real defect it surfaced is fixed. No user-facing surface change (no new commands, flags, or config keys).</description>
      <content:encoded><![CDATA[<h2>0.4.7 — audit-driven correctness &amp; security hardening</h2><p>A adversarial review of the whole codebase; every real defect it surfaced is fixed. <strong>No user-facing surface change</strong> (no new commands, flags, or config keys).</p><h3>Truthfulness (remediation engine)</h3><ul><li><p><strong>Auto-rollback now reports honestly.</strong> A rollback whose file restore <em>or</em> service revert failed no longer stamps a clean rollback — the CLI and the audit log were reporting "reverted, service left healthy" on a half-reverted host.</p></li><li><p><strong>Empty plans are no longer "applied".</strong> A prose-only fix plan (no commands) is no longer reported as applied; the dashboard apply path was writing a false <code>applied</code> audit entry for a no-op.</p></li></ul><h3>Security</h3><ul><li><p><strong>Exported-script heredoc break-out closed.</strong> <code>fix --export-script</code> now uses a unique heredoc delimiter, so crafted/hallucinated file content can't terminate the heredoc early and inject commands the operator runs as root.</p></li><li><p><strong>OVAL decompression-bomb guard.</strong> The OVAL feed is now decompressed with a size cap (it runs as root during <code>update-oval</code> / auto-refresh) and refuses a DOCTYPE.</p></li></ul><h3>Robustness — never abort the scan</h3><ul><li><p>Malformed CVE-feed JSON (NVD / EPSS / CISA-KEV) can no longer crash a whole scan; enrichment fails per-finding.</p></li><li><p>A package-less oscap advisory is no longer dropped on an empty-but-successful <code>updateinfo</code> set — that was silently hiding real, unpatched advisories.</p></li></ul><h3>Lower-severity</h3><p>Null-tolerant report/dashboard rendering, version-ordered (not install-ordered) kernel-currency check, corrupt-config tolerance, string-aware model-JSON extraction, a capped dashboard request body, and more.</p><p><strong>305 tests</strong> (+12 regressions), bandit medium+ clean.</p><h3>Install / upgrade</h3><p>Existing techhack-repo users: <code>sudo dnf upgrade vulnscan-ai</code><br />Fresh install: <a target="_blank" rel="noopener noreferrer" href="https://vulnscan-ai.techhack.nl">https://vulnscan-ai.techhack.nl</a></p><hr /><p><a target="_blank" rel="noopener noreferrer" href="https://github.com/btdt1983/vulnscan-ai/releases/tag/v0.4.7">View this release on GitHub</a></p>]]></content:encoded>
    </item>
  </channel>
</rss>