<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>Forem: Shresth Paul</title>
    <description>The latest articles on Forem by Shresth Paul (@secbyshresth).</description>
    <link>https://forem.com/secbyshresth</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3437758%2F8565207a-ade6-4aaa-941b-e9435726b95f.png</url>
      <title>Forem: Shresth Paul</title>
      <link>https://forem.com/secbyshresth</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/secbyshresth"/>
    <language>en</language>
    <item>
      <title>Building a High-Density "OS Terminal" for Windows Forensics in Pure C</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Sat, 21 Mar 2026 19:45:04 +0000</pubDate>
      <link>https://forem.com/secbyshresth/building-a-high-density-os-terminal-for-windows-forensics-in-pure-c-122j</link>
      <guid>https://forem.com/secbyshresth/building-a-high-density-os-terminal-for-windows-forensics-in-pure-c-122j</guid>
      <description>&lt;p&gt;What happens when you combine low-level Windows C-programming with a Zero-Dependency WebSocket dashboard? You get OS Terminal—a hyper-lean alternative to bloated modern monitoring tools.&lt;/p&gt;

&lt;p&gt;The Objective: Zero Bloat, Total Visibility&lt;br&gt;
Most monitoring tools today are Electron-based or rely on heavy WMI queries that spike your CPU. I wanted to see how far I could push the Win32 API to create a forensic tool that uses less than 30MB of RAM while providing "Extreme Observability."&lt;/p&gt;

&lt;p&gt;The Tech Stack&lt;br&gt;
Native C-Engine: Directly hooks into ntdll.dll and advapi32.dll.&lt;br&gt;
Node.js Bridge: Acting as a high-speed asynchronous relay.&lt;br&gt;
Vanilla CSS/JS Dashboard: 100% dependency-free. No React. No Vite. No 150MB node_modules folder.&lt;br&gt;
Key Technical Challenges Overcome&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Ripping Process Strings from the PEB&lt;br&gt;
Standard APIs often mask command-line arguments for protected processes. OS Terminal uses NtQueryInformationProcess with ProcessCommandLineInformation (Class 60). By elevating the process to SeDebugPrivilege, we can reach into the remote Process Environment Block (PEB) of any binary and extract the raw execution parameters before they are obfuscated.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Shannon Entropy Analysis in C&lt;br&gt;
Detecting malware often comes down to unpredictability. I implemented a Shannon Entropy formula in the polling loop. If a process starts running a Base64-encoded script, its entropy score spikes (usually &amp;gt; 5.0). The UI detects this delta and red-flags it instantly.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Async Kernel Registry Traps&lt;br&gt;
Polling the Registry is slow. Instead, I built an asynchronous C-thread that "crashes" into a Kernel wait state using RegNotifyChangeKeyValue. It sits silently at 0% CPU usage until a Persistence Key (like HKLM\Run) is touched, at which point it drains a thread-safe Ring Buffer straight to the dashboard.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Check out the source code and the architecture here: 👉 GitHub Repository [&lt;a href="https://github.com/SecByShresth/OS-Terminal.git" rel="noopener noreferrer"&gt;https://github.com/SecByShresth/OS-Terminal.git&lt;/a&gt;]&lt;/p&gt;

</description>
      <category>c</category>
      <category>security</category>
      <category>performance</category>
    </item>
    <item>
      <title>VulnFeed 2.0: Building a Zero-Server Vulnerability Dashboard (Level 2 Release)</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Sat, 06 Dec 2025 20:02:47 +0000</pubDate>
      <link>https://forem.com/secbyshresth/vulnfeed-20-building-a-zero-server-vulnerability-dashboard-level-2-release-pfp</link>
      <guid>https://forem.com/secbyshresth/vulnfeed-20-building-a-zero-server-vulnerability-dashboard-level-2-release-pfp</guid>
      <description>&lt;h1&gt;
  
  
  DEV.TO ARTICLE
&lt;/h1&gt;

&lt;p&gt;Hey dev community! 👋&lt;/p&gt;

&lt;p&gt;We just shipped &lt;strong&gt;Level 2 of our vulnerability intelligence project&lt;/strong&gt;, and I'm excited to share what we built and how it works technically.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Problem&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;Most vulnerability dashboards are either:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too expensive - Enterprise SaaS tools with high price tags&lt;/li&gt;
&lt;li&gt;Too limited - Focused on one ecosystem or distribution&lt;/li&gt;
&lt;li&gt;Privacy nightmares - Track your data, your queries, your team&lt;/li&gt;
&lt;li&gt;Too complex - Require backend infrastructure to maintain&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We wanted something radically different.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Enter Onyx Intelligence&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Onyx&lt;/strong&gt; is a completely static, zero-server vulnerability dashboard that aggregates data from &lt;strong&gt;25+ sources&lt;/strong&gt; (CISA, Red Hat, all major Linux distros, npm, PyPI, Maven, RubyGems, Cargo, Composer, etc.) into one beautiful, interactive interface.&lt;/p&gt;

&lt;p&gt;Think of it as the &lt;strong&gt;Level 2 evolution of VulnFeed&lt;/strong&gt; — everything you loved, but supercharged.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Key Stats:&lt;/strong&gt;
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;📊 25+ vulnerability data sources&lt;/li&gt;
&lt;li&gt;🔄 Auto-updates every 6 hours via GitHub Actions&lt;/li&gt;
&lt;li&gt;🏗️ Zero backend required (GitHub Pages deployment)&lt;/li&gt;
&lt;li&gt;🔒 Zero tracking, zero data collection&lt;/li&gt;
&lt;li&gt;🎨 Beautiful glassmorphism UI with light/dark themes&lt;/li&gt;
&lt;li&gt;📱 Fully responsive (mobile, tablet, desktop)&lt;/li&gt;
&lt;li&gt;🧠 Asset exposure scanning (optional)&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;How It Works (The Tech)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;The Data Collection Pipeline&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Everything starts with a scheduled GitHub Actions workflow that runs every 6 hours:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/osv-feed-update.yml&lt;/span&gt;
&lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*/6&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;  &lt;span class="c1"&gt;# Every 6 hours&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Here's what happens behind the scenes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# scripts/fetch_osv_data.py
&lt;/span&gt;&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;
&lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;json&lt;/span&gt;
&lt;span class="kn"&gt;from&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt; &lt;span class="kn"&gt;import&lt;/span&gt; &lt;span class="n"&gt;datetime&lt;/span&gt;

&lt;span class="c1"&gt;# Fetch from OSV.dev for all ecosystems
&lt;/span&gt;&lt;span class="n"&gt;ecosystems&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;npm&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;PyPI&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Maven&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Cargo&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Go&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;NuGet&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Composer&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;RubyGems&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;

&lt;span class="k"&gt;for&lt;/span&gt; &lt;span class="n"&gt;ecosystem&lt;/span&gt; &lt;span class="ow"&gt;in&lt;/span&gt; &lt;span class="n"&gt;ecosystems&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
    &lt;span class="n"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;requests&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;get&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;https://api.osv.dev/v1/query&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; 
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;package&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;ecosystem&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;ecosystem&lt;/span&gt;&lt;span class="p"&gt;}})&lt;/span&gt;

    &lt;span class="c1"&gt;# Validate and deduplicate
&lt;/span&gt;    &lt;span class="n"&gt;vulnerabilities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="n"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;

    &lt;span class="c1"&gt;# Store as clean JSON
&lt;/span&gt;    &lt;span class="k"&gt;with&lt;/span&gt; &lt;span class="nf"&gt;open&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="sa"&gt;f&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;data/&lt;/span&gt;&lt;span class="si"&gt;{&lt;/span&gt;&lt;span class="n"&gt;ecosystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;lower&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;&lt;span class="si"&gt;}&lt;/span&gt;&lt;span class="s"&gt;.json&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;w&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="k"&gt;as&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;
        &lt;span class="n"&gt;json&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;dump&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="n"&gt;f&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;

&lt;span class="c1"&gt;# Also fetch CISA KEV, Red Hat, Linux distros
# Everything gets merged, validated, and deployed
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The output? Clean, structured JSON files ready for your frontend to consume.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Frontend Rendering&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;On the client side, it's pure vanilla JavaScript with no frameworks or bloat:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Load vulnerability data from static JSON files&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;loadVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;/data/vulnerabilities.json&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;response&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;();&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Build interactive visualizations with Chart.js&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;renderSeverityChart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;severityData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;labels&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Critical&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;High&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Medium&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Low&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;],&lt;/span&gt;
        &lt;span class="na"&gt;datasets&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[{&lt;/span&gt;
            &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
                &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CRITICAL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HIGH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;MEDIUM&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
                &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;LOW&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;).&lt;/span&gt;&lt;span class="nx"&gt;length&lt;/span&gt;
            &lt;span class="p"&gt;]&lt;/span&gt;
        &lt;span class="p"&gt;}]&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;

    &lt;span class="k"&gt;new&lt;/span&gt; &lt;span class="nc"&gt;Chart&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ctx&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;type&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;doughnut&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;data&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="nx"&gt;severityData&lt;/span&gt; &lt;span class="p"&gt;});&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c1"&gt;// Real-time filtering and search (no backend calls!)&lt;/span&gt;
&lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;searchVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;days&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;description&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;().&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;toLowerCase&lt;/span&gt;&lt;span class="p"&gt;())&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
         &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;query&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;ALL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="nx"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
        &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nf"&gt;isWithinDays&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;published&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="nx"&gt;days&lt;/span&gt;&lt;span class="p"&gt;))&lt;/span&gt;
    &lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;No API calls. No server requests. Just static assets and client-side logic doing the heavy lifting.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Deployment Magic&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;The deployment is almost magical in its simplicity:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Commit changes to your fork&lt;/li&gt;
&lt;li&gt;GitHub Actions workflow triggers automatically&lt;/li&gt;
&lt;li&gt;Python scripts fetch fresh data&lt;/li&gt;
&lt;li&gt;Static HTML/CSS/JS gets generated&lt;/li&gt;
&lt;li&gt;Deployed to GitHub Pages automatically&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Your dashboard is live at: &lt;code&gt;yourusername.github.io/Onyx-Intelligence/&lt;/code&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Key Features We Built&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ Multi-Source Aggregation&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Instead of maintaining 25 browser tabs for different vulnerability sources, everything lives in one place:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Single search across CISA, Red Hat, npm, PyPI, Maven, etc.&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;allVulnerabilities&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;cisaKEV&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;redHatAdvisories&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;npmVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;pypiVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="p"&gt;...&lt;/span&gt;&lt;span class="nx"&gt;mavenVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="c1"&gt;// ... 20+ more sources&lt;/span&gt;
&lt;span class="p"&gt;];&lt;/span&gt;

&lt;span class="c1"&gt;// Now search once and get results from everywhere&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;allVulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;id&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CVE-2024-&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; 
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;packages&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lodash&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt;
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;source&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CISA&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;✅ Smart Filtering&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Advanced filters without the backend complexity:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Critical vulnerabilities from the last 30 days&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;criticalRecent&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;cvss&lt;/span&gt; &lt;span class="o"&gt;&amp;gt;=&lt;/span&gt; &lt;span class="mf"&gt;7.0&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt; 
    &lt;span class="nf"&gt;daysOld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;published&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;status&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;EXPLOITED&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Filter by ecosystem&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;npmVulns&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt; 
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ecosystem&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;npm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Combine filters&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;targetedResults&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="nx"&gt;vulnerabilities&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;filter&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt; &lt;span class="o"&gt;=&amp;gt;&lt;/span&gt;
    &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;CRITICAL&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt; &lt;span class="o"&gt;||&lt;/span&gt; &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;severity&lt;/span&gt; &lt;span class="o"&gt;===&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HIGH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;ecosystem&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;includes&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;Linux&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;amp;&amp;amp;&lt;/span&gt;
    &lt;span class="nf"&gt;daysOld&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;v&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nx"&gt;published&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="o"&gt;&amp;lt;=&lt;/span&gt; &lt;span class="mi"&gt;7&lt;/span&gt;
&lt;span class="p"&gt;);&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;✅ Asset Exposure Scanner&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Optional feature that scans IPs and domains against multiple intelligence sources:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Scan an IP against Censys, Shodan, AbuseIPDB, VirusTotal&lt;/span&gt;
&lt;span class="k"&gt;async&lt;/span&gt; &lt;span class="kd"&gt;function&lt;/span&gt; &lt;span class="nf"&gt;scanAsset&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="nx"&gt;ipOrDomain&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nb"&gt;Promise&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;all&lt;/span&gt;&lt;span class="p"&gt;([&lt;/span&gt;
        &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/scan?ip=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ipOrDomain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;provider=censys`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/scan?ip=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ipOrDomain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;provider=shodan`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/scan?ip=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ipOrDomain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;provider=abuseipdb`&lt;/span&gt;&lt;span class="p"&gt;),&lt;/span&gt;
        &lt;span class="nf"&gt;fetch&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="s2"&gt;`/api/scan?ip=&lt;/span&gt;&lt;span class="p"&gt;${&lt;/span&gt;&lt;span class="nx"&gt;ipOrDomain&lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="s2"&gt;&amp;amp;provider=virustotal`&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt;
    &lt;span class="p"&gt;]);&lt;/span&gt;

    &lt;span class="k"&gt;return&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="na"&gt;censys&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;0&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="na"&gt;shodan&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;1&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="na"&gt;abuseipdb&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;2&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;(),&lt;/span&gt;
        &lt;span class="na"&gt;virustotal&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="k"&gt;await&lt;/span&gt; &lt;span class="nx"&gt;results&lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="mi"&gt;3&lt;/span&gt;&lt;span class="p"&gt;].&lt;/span&gt;&lt;span class="nf"&gt;json&lt;/span&gt;&lt;span class="p"&gt;()&lt;/span&gt;
    &lt;span class="p"&gt;};&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;API keys? Stored safely in &lt;strong&gt;GitHub Secrets&lt;/strong&gt; - never exposed in frontend code.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;✅ Privacy by Design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Zero tracking. Zero data collection. Just pure, honest software:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight javascript"&gt;&lt;code&gt;&lt;span class="c1"&gt;// Only localStorage for theme preference&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;theme&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;dark&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="nx"&gt;localStorage&lt;/span&gt;&lt;span class="p"&gt;.&lt;/span&gt;&lt;span class="nf"&gt;setItem&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;lastViewed&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;npm&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;

&lt;span class="c1"&gt;// Everything else is session-only, in-memory&lt;/span&gt;
&lt;span class="kd"&gt;const&lt;/span&gt; &lt;span class="nx"&gt;sessionData&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="na"&gt;currentFilters&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt; &lt;span class="na"&gt;severity&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="s1"&gt;HIGH&lt;/span&gt;&lt;span class="dl"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="na"&gt;days&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="mi"&gt;30&lt;/span&gt; &lt;span class="p"&gt;},&lt;/span&gt;
    &lt;span class="na"&gt;selectedVulnerability&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="kc"&gt;null&lt;/span&gt;
&lt;span class="p"&gt;};&lt;/span&gt;

&lt;span class="c1"&gt;// No Google Analytics&lt;/span&gt;
&lt;span class="c1"&gt;// No Mixpanel&lt;/span&gt;
&lt;span class="c1"&gt;// No Segment&lt;/span&gt;
&lt;span class="c1"&gt;// No data collection whatsoever&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;✅ Beautiful UI&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;We didn't just build a tool — we built something that looks premium:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="c"&gt;/* Glassmorphism cards */&lt;/span&gt;
&lt;span class="nc"&gt;.vulnerability-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="py"&gt;backdrop-filter&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;blur&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;10px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;border&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1px&lt;/span&gt; &lt;span class="nb"&gt;solid&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;border-radius&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;12px&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;padding&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1.5rem&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="nl"&gt;transition&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;all&lt;/span&gt; &lt;span class="m"&gt;0.3s&lt;/span&gt; &lt;span class="n"&gt;ease&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nc"&gt;.vulnerability-card&lt;/span&gt;&lt;span class="nd"&gt;:hover&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.15&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;transform&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;translateY&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;-2px&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="nl"&gt;box-shadow&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt; &lt;span class="m"&gt;8px&lt;/span&gt; &lt;span class="m"&gt;32px&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Dark mode support */&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;prefers-color-scheme&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;dark&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.vulnerability-card&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="nl"&gt;background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;30&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;27&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;75&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.2&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
        &lt;span class="nl"&gt;border-color&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="n"&gt;rgba&lt;/span&gt;&lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;255&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt; &lt;span class="m"&gt;0.1&lt;/span&gt;&lt;span class="p"&gt;);&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="c"&gt;/* Responsive grid */&lt;/span&gt;
&lt;span class="k"&gt;@media&lt;/span&gt; &lt;span class="p"&gt;(&lt;/span&gt;&lt;span class="n"&gt;max-width&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;768px&lt;/span&gt;&lt;span class="p"&gt;)&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="nc"&gt;.grid&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
        &lt;span class="py"&gt;grid-template-columns&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;1&lt;/span&gt;&lt;span class="n"&gt;fr&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="p"&gt;}&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Smooth animations. Light and dark themes. Fully responsive.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Getting Started (Seriously, 5 Minutes)&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 1: Fork the Repository&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Just hit that fork button on GitHub. We'll wait.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 2: Enable GitHub Actions&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Actions → General
→ Set workflow permissions to "Read and write"
→ Check "Allow GitHub Actions to create pull requests"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 3: Enable GitHub Pages&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Pages
→ Source: GitHub Actions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Step 4: Trigger the Workflow&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Actions → "🔄 Onyx OSV Intelligence Feed"
→ Run workflow
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Watch it fetch 25+ data sources and build your dashboard.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Step 5: Visit Your Dashboard&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;https://yourusername.github.io/Onyx-Intelligence/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done. Your enterprise-grade vulnerability dashboard is live.&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Bonus: Enable Asset Scanning&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Add your API keys (optional):&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Settings → Secrets and variables → Actions
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Add these secrets:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;code&gt;CENSYS_API_ID&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;CENSYS_API_SECRET&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;SHODAN_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;ABUSEIPDB_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;li&gt;&lt;code&gt;VIRUSTOTAL_API_KEY&lt;/code&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Now you have advanced asset exposure scanning too.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Tech Stack Breakdown&lt;/strong&gt;
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; Vanilla JavaScript (no React, Vue, Svelte — just pure JS)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Styling:&lt;/strong&gt; CSS3 with glassmorphism effects&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Charts:&lt;/strong&gt; Chart.js for visualizations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Automation:&lt;/strong&gt; GitHub Actions&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Data Processing:&lt;/strong&gt; Python 3.11&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Hosting:&lt;/strong&gt; GitHub Pages (free, reliable, zero maintenance)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Intentionally simple. Intentionally dependency-light.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Customization is Easy&lt;/strong&gt;
&lt;/h2&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;Change Update Frequency&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;Want updates every 12 hours instead of 6?&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="c1"&gt;# .github/workflows/osv-feed-update.yml&lt;/span&gt;
&lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*/12&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;  &lt;span class="c1"&gt;# Every 12 hours&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Or daily:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;schedule&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="na"&gt;cron&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s1"&gt;'&lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;0&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*&lt;/span&gt;&lt;span class="nv"&gt; &lt;/span&gt;&lt;span class="s"&gt;*'&lt;/span&gt;  &lt;span class="c1"&gt;# Daily at midnight&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Add a New Ecosystem&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight python"&gt;&lt;code&gt;&lt;span class="c1"&gt;# scripts/fetch_osv_data.py
&lt;/span&gt;&lt;span class="n"&gt;OSV_ECOSYSTEMS&lt;/span&gt; &lt;span class="o"&gt;=&lt;/span&gt; &lt;span class="p"&gt;[&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;AlmaLinux&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Debian&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;Ubuntu&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;
    &lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="s"&gt;YourCustomEcosystem&lt;/span&gt;&lt;span class="sh"&gt;'&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;  &lt;span class="c1"&gt;# Add it here
&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  &lt;strong&gt;Customize Colors&lt;/strong&gt;
&lt;/h3&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight css"&gt;&lt;code&gt;&lt;span class="nd"&gt;:root&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"light"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6366f1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--accent-hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#4f46e5&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#ffffff&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#1f2937&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;

&lt;span class="nd"&gt;:root&lt;/span&gt;&lt;span class="o"&gt;[&lt;/span&gt;&lt;span class="nt"&gt;data-theme&lt;/span&gt;&lt;span class="o"&gt;=&lt;/span&gt;&lt;span class="s1"&gt;"dark"&lt;/span&gt;&lt;span class="o"&gt;]&lt;/span&gt; &lt;span class="p"&gt;{&lt;/span&gt;
    &lt;span class="py"&gt;--accent&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#818cf8&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--accent-hover&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#6366f1&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--background&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#0f172a&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
    &lt;span class="py"&gt;--text&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt; &lt;span class="m"&gt;#f1f5f9&lt;/span&gt;&lt;span class="p"&gt;;&lt;/span&gt;
&lt;span class="p"&gt;}&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Everything is designed for customization without complexity.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Real-World Use Cases&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Security Teams:&lt;/strong&gt; Centralized threat tracking, CISA BOD 22-01 compliance, patch prioritization workflows&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;DevOps Engineers:&lt;/strong&gt; Monitor vulnerabilities in your infrastructure and dependencies, automated alerts&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;System Admins:&lt;/strong&gt; Track patches across heterogeneous Linux environments, prioritize updates&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Security Researchers:&lt;/strong&gt; Analyze vulnerability trends, track exploits, cross-ecosystem correlation&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Solo Developers:&lt;/strong&gt; Stay updated on vulnerabilities in your tech stack without SaaS costs&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;CTOs/Leadership:&lt;/strong&gt; Executive dashboard showing your security posture in real-time&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Roadmap (Level 2.x)&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We're actively developing:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;[ ] SBOM (Software Bill of Materials) upload and analysis&lt;/li&gt;
&lt;li&gt;[ ] MITRE ATT&amp;amp;CK mapping - link CVEs to attack techniques&lt;/li&gt;
&lt;li&gt;[ ] Email and Webhook notifications for critical vulnerabilities&lt;/li&gt;
&lt;li&gt;[ ] Custom dashboard configurations per team&lt;/li&gt;
&lt;li&gt;[ ] Historical vulnerability timeline analysis&lt;/li&gt;
&lt;li&gt;[ ] REST API for integration with your tools&lt;/li&gt;
&lt;li&gt;[ ] Browser extension for quick CVE lookups&lt;/li&gt;
&lt;li&gt;[ ] Local agent for air-gapped environments&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;The Philosophy Behind Onyx&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;We believe vulnerability management should be:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Free&lt;/strong&gt; - No SaaS costs, no licensing fees&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Private&lt;/strong&gt; - No data collection, no tracking, no surveillance&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Simple&lt;/strong&gt; - No complex infrastructure to maintain&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Powerful&lt;/strong&gt; - Enterprise features without enterprise complexity&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Open&lt;/strong&gt; - Fully auditable code, complete transparency&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Onyx proves you don't have to sacrifice any of these.&lt;/strong&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;What Sets This Apart from VulnFeed&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;VulnFeed was good. Onyx is great because:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Multi-ecosystem&lt;/strong&gt; - 25+ data sources vs limited scope&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Beautiful UI&lt;/strong&gt; - Modern glassmorphism design&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Asset scanning&lt;/strong&gt; - IP/domain intelligence built-in&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better automation&lt;/strong&gt; - More frequent updates, easier customization&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;More sources&lt;/strong&gt; - CISA, Red Hat, all major Linux distros, package managers&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Advanced analytics&lt;/strong&gt; - Interactive charts and visualizations&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Better search&lt;/strong&gt; - Across all sources simultaneously&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It's a complete evolution.&lt;/p&gt;

&lt;h2&gt;
  
  
  &lt;strong&gt;Get Involved&lt;/strong&gt;
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Try the live demo:&lt;/strong&gt; No installation needed, just visit and explore&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Fork the repository:&lt;/strong&gt; Run your own instance in minutes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Open an issue:&lt;/strong&gt; Found a bug? Have an idea? Let us know&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Contribute:&lt;/strong&gt; Help us expand features, improve UI, add data sources&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Spread the word:&lt;/strong&gt; Share with your team, write about your experience, give us a ⭐&lt;/p&gt;




&lt;p&gt;This is what enterprise vulnerability management should look like: simple, beautiful, private, and free.&lt;/p&gt;

&lt;p&gt;No compromises. No bullshit.&lt;/p&gt;

&lt;p&gt;Just pure, powerful vulnerability intelligence built for the security community.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Ready to level up?&lt;/strong&gt; Fork the repo and deploy your dashboard today.&lt;/p&gt;

</description>
      <category>security</category>
      <category>vulnerabilities</category>
      <category>opensource</category>
      <category>devops</category>
    </item>
    <item>
      <title>🔐 The Linux Security Architecture - PAM, Capabilities, MAC &amp; Beyond</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Fri, 28 Nov 2025 04:23:54 +0000</pubDate>
      <link>https://forem.com/secbyshresth/the-linux-security-architecture-pam-capabilities-mac-beyond-8d9</link>
      <guid>https://forem.com/secbyshresth/the-linux-security-architecture-pam-capabilities-mac-beyond-8d9</guid>
      <description>&lt;p&gt;Linux powers everything from cloud servers to Android smartphones - trusted not just because it's open-source, but because its &lt;strong&gt;security architecture is layered, modular, and resilient.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Instead of depending on a single control, Linux enforces &lt;strong&gt;defense-in-depth&lt;/strong&gt; through authentication frameworks, access controls, kernel-level enforcement, and isolation.&lt;/p&gt;

&lt;p&gt;Here's a breakdown of the &lt;strong&gt;7 key layers&lt;/strong&gt; that make Linux secure:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1️⃣ Discretionary Access Control (DAC) - The Classic Unix Model&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;DAC is the &lt;strong&gt;foundation&lt;/strong&gt; of Linux security. Every file and process has:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;An &lt;strong&gt;owner&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;strong&gt;group&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Permissions for &lt;strong&gt;user *&lt;em&gt;/ **group *&lt;/em&gt;/ **others&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;-rwxr-xr--  root  admin  script.sh
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;👉 Fast and simple&lt;br&gt;
❌ But compromise the owner → attacker inherits full access&lt;br&gt;
This is why Linux security evolved beyond just DAC.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;2️⃣ Pluggable Authentication Modules (PAM) - How Users Login &amp;amp; Prove Identity&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;PAM decides &lt;strong&gt;how authentication works&lt;/strong&gt; in Linux - and it's completely modular.&lt;/p&gt;

&lt;p&gt;It controls:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Authentication &lt;/strong&gt;- passwords, MFA, smart cards&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Account restrictions&lt;/strong&gt; - lockouts, expiration, allowed login times&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Session rules&lt;/strong&gt; - mounting home directories, environment setup&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Password policies&lt;/strong&gt; - complexity, aging, history&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example policy enforcement:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;password required pam_pwquality.so retry=3 minlen=10 ucredit=-1 lcredit=-1
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Admins can enhance security &lt;strong&gt;without modifying applications&lt;/strong&gt; - big win.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;3️⃣ Linux Capabilities - Breaking the "Root is God" Problem&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Historically, &lt;strong&gt;root ** meant **unlimited power&lt;/strong&gt;.&lt;br&gt;
Even to bind to port 80 → full root access required.&lt;/p&gt;

&lt;p&gt;Capabilities divide root into small, controlled privileges:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CAP_NET_BIND_SERVICE&lt;/strong&gt; - bind to privileged ports&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAP_SYS_ADMIN&lt;/strong&gt; - broad admin power&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;CAP_SETUID&lt;/strong&gt; - change user IDs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Example - secure Nginx without full root:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo setcap 'cap_net_bind_service=+ep' /usr/bin/nginx
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Result → drastically reduced attack surface.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;4️⃣ Mandatory Access Control (MAC) - Security Even Root Must Obey&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MAC enforces &lt;strong&gt;zero-trust&lt;/strong&gt; on system resources.&lt;/p&gt;

&lt;p&gt;Two major Linux MAC systems:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;SELinux&lt;/strong&gt; - label-based, very fine-grained&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;AppArmor&lt;/strong&gt; - profile-based, simpler to implement&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Even if &lt;strong&gt;root&lt;/strong&gt; is compromised:&lt;/p&gt;

&lt;p&gt;✋ MAC blocks access to confidential files and processes&lt;/p&gt;

&lt;p&gt;E.g., a hacked Apache process &lt;strong&gt;cannot&lt;/strong&gt; read &lt;code&gt;/etc/shadow&lt;/code&gt;.&lt;/p&gt;

&lt;p&gt;Containment becomes &lt;strong&gt;default behavior&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;5️⃣ Namespaces &amp;amp; cgroups - The Core of Container Security&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Containers are secure &lt;strong&gt;because the kernel enforces isolation:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Namespaces&lt;/strong&gt;- isolate visibility of PIDs, networking, users, etc.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;cgroups&lt;/strong&gt; - restrict CPU, memory, and I/O usage&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;seccomp&lt;/strong&gt;- block dangerous syscalls (like ptrace)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This ensures:&lt;/p&gt;

&lt;p&gt;✔ Containers can't spy on others&lt;br&gt;
✔ Rogue containers can't hog resources&lt;br&gt;
✔ Attackers face syscall roadblocks&lt;/p&gt;

&lt;p&gt;Ideal for cloud + microservices workloads.&lt;/p&gt;



&lt;p&gt;&lt;strong&gt;6️⃣ Linux Security Modules (LSM) - The Kernel Enforcement Engine&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;LSM provides &lt;strong&gt;security hooks inside the kernel&lt;/strong&gt;, used by:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;SELinux&lt;/li&gt;
&lt;li&gt;AppArmor&lt;/li&gt;
&lt;li&gt;Landlock&lt;/li&gt;
&lt;li&gt;TOMOYO&lt;/li&gt;
&lt;li&gt;Yama&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check what's active:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;cat /sys/kernel/security/lsm
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This makes security &lt;strong&gt;pluggable&lt;/strong&gt;, similar to PAM but &lt;strong&gt;inside the kernel&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;7️⃣ Secure Boot, dm-crypt, TPM - Protecting Integrity &amp;amp; Data-at-Rest&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Modern Linux supports enterprise-grade protection:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Secure Boot&lt;/strong&gt; - blocks boot-level malware/tampering&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;TPM&lt;/strong&gt;- hardware root-of-trust, key attestation&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;dm-crypt / LUKS&lt;/strong&gt; - encrypted disks → stolen device ≠ stolen data&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Security now starts &lt;strong&gt;before the kernel even loads&lt;/strong&gt;.&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🧩 Linux Security Layered Model - Quick Summary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;1️⃣ &lt;strong&gt;Identity &amp;amp; ownership&lt;/strong&gt; → DAC&lt;br&gt;
2️⃣ &lt;strong&gt;Who can log in&lt;/strong&gt; → PAM&lt;br&gt;
3️⃣ &lt;strong&gt;Least privilege&lt;/strong&gt; → Capabilities&lt;br&gt;
4️⃣ &lt;strong&gt;Mandatory rules&lt;/strong&gt; → MAC&lt;br&gt;
5️⃣ &lt;strong&gt;Strong isolation&lt;/strong&gt; → Namespaces &amp;amp; cgroups&lt;br&gt;
6️⃣ &lt;strong&gt;Kernel enforcement&lt;/strong&gt; → LSM&lt;br&gt;
7️⃣ &lt;strong&gt;Trusted boot &amp;amp; encryption&lt;/strong&gt; → Secure Boot, TPM&lt;/p&gt;

&lt;p&gt;👉 Each layer is powerful&lt;br&gt;
💪 Together they are extremely difficult to bypass&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;🎯 Final Thoughts&lt;/strong&gt;&lt;br&gt;
Linux security isn't about one feature - &lt;br&gt;
it's the &lt;strong&gt;stacked architecture&lt;/strong&gt; that makes it reliable under attack.&lt;/p&gt;

&lt;p&gt;Stay curious about what's happening beneath the shell…&lt;br&gt;
because &lt;strong&gt;Linux was built to defend itself.&lt;/strong&gt; 🛡️🐧&lt;/p&gt;




&lt;p&gt;🖥️ &lt;strong&gt;Stay tuned for more Linux thoughts - this is my weekly Linux Series exploring the OS one layer at a time. 🚀&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>linuxhardening</category>
      <category>linuxsecurity</category>
      <category>cybersecurity</category>
    </item>
    <item>
      <title>Ephemeral Vulnerability Scanner: Pure Client-Side JS for Windows/Linux/macOS Vuln Analysis</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Wed, 26 Nov 2025 09:00:56 +0000</pubDate>
      <link>https://forem.com/secbyshresth/ephemeral-vulnerability-scanner-pure-client-side-js-for-windowslinuxmacos-vuln-analysis-2cdg</link>
      <guid>https://forem.com/secbyshresth/ephemeral-vulnerability-scanner-pure-client-side-js-for-windowslinuxmacos-vuln-analysis-2cdg</guid>
      <description>&lt;p&gt;Hey Dev.To community! 👋&lt;/p&gt;

&lt;p&gt;I've just launched a new open-source project that might be of interest to those building CI/CD pipelines or managing internal security tooling: Ephemeral Vulnerability Scanner.&lt;/p&gt;

&lt;p&gt;This is a &lt;strong&gt;100% client-side application&lt;/strong&gt; built with vanilla JS/HTML/CSS. You clone it, open index.html, upload your system inventory (inventory.json), and get an instant, privacy-safe vulnerability report.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💡 Why this architecture?&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;It addresses the privacy concern: No sensitive system data leaves your device.&lt;/li&gt;
&lt;li&gt;It's fast and eliminates backend maintenance overhead.&lt;/li&gt;
&lt;li&gt;It's transparent: you can literally inspect the app.js source to see the entire logic.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Under the Hood:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;We use platform-specific commands (PowerShell, dpkg, rpm, brew) to generate the initial JSON inventory.&lt;/li&gt;
&lt;li&gt;The analysis logic hits MSRC CSAF API (Windows), OSV.dev API (Open Source), and CISA KEV for a strict, verified lookup.&lt;/li&gt;
&lt;li&gt;Results are grouped into clean, actionable "Package Cards" with the minimum safe version calculated automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Check out the repo, try the demo, and let me know what you think of the client-side approach for security analysis!&lt;/p&gt;

&lt;p&gt;🔗 Live Demo: &lt;a href="https://secbyshresth.github.io/VulnScan/" rel="noopener noreferrer"&gt;VulnScan&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>devsecops</category>
      <category>vulnerabilityscanning</category>
    </item>
    <item>
      <title>🔍 MANTA – A Fully Ephemeral, AI-Powered Malware Analysis Tool (Built on GitHub Pages)</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Thu, 20 Nov 2025 21:31:04 +0000</pubDate>
      <link>https://forem.com/secbyshresth/manta-a-fully-ephemeral-ai-powered-malware-analysis-tool-built-on-github-pages-4p7l</link>
      <guid>https://forem.com/secbyshresth/manta-a-fully-ephemeral-ai-powered-malware-analysis-tool-built-on-github-pages-4p7l</guid>
      <description>&lt;p&gt;I recently shipped a project I’m really proud of: &lt;strong&gt;MANTA – Malware Analysis Tool &amp;amp; Assistant&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It’s a privacy-first malware static analysis tool with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;No backend server&lt;/li&gt;
&lt;li&gt;No database&lt;/li&gt;
&lt;li&gt;No persistence&lt;/li&gt;
&lt;li&gt;100% client-side AI heuristics&lt;/li&gt;
&lt;li&gt;Optional GitHub Actions backend&lt;/li&gt;
&lt;li&gt;Runs entirely on GitHub Pages&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Here’s the live version:&lt;br&gt;
👉 &lt;a href="https://secbyshresth.github.io/MANTA/" rel="noopener noreferrer"&gt;Malware Analysis Tool&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🏗 Architecture Overview&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MANTA is built as a hybrid:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;Client-Side Browser Engine (Primary Mode)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;ul&gt;
&lt;li&gt;File never leaves the browser&lt;/li&gt;
&lt;li&gt;JS-based static analysis&lt;/li&gt;
&lt;li&gt;Hashing + PE header parsing&lt;/li&gt;
&lt;li&gt;String extraction&lt;/li&gt;
&lt;li&gt;Entropy + packer detection&lt;/li&gt;
&lt;li&gt;Suspicious IOCs&lt;/li&gt;
&lt;li&gt;AI heuristic scoring&lt;/li&gt;
&lt;/ul&gt;

&lt;ol&gt;
&lt;li&gt;&lt;strong&gt;GitHub Actions Backend (Optional Deep Scan)&lt;/strong&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Triggered only if configured.&lt;/p&gt;

&lt;p&gt;Capabilities:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;YARA scanning&lt;/li&gt;
&lt;li&gt;Advanced static tooling&lt;/li&gt;
&lt;li&gt;Python-based static analysis&lt;/li&gt;
&lt;li&gt;AI-enhanced summaries&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Backend is fully serverless.&lt;br&gt;
Files delete immediately after processing.&lt;/p&gt;

&lt;p&gt;✨** Features**&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Modern UI&lt;/li&gt;
&lt;li&gt;Drag &amp;amp; drop support&lt;/li&gt;
&lt;li&gt;Real-time progress indicators&lt;/li&gt;
&lt;li&gt;JSON / HTML / TXT report export&lt;/li&gt;
&lt;li&gt;Zero logging, zero tracking&lt;/li&gt;
&lt;li&gt;Auto-wipe memory on refresh&lt;/li&gt;
&lt;li&gt;Works completely offline in client mode&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;🎯 Why GitHub Pages + GitHub Actions?&lt;/p&gt;

&lt;p&gt;Because they offer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Free hosting&lt;/li&gt;
&lt;li&gt;Zero maintenance&lt;/li&gt;
&lt;li&gt;Full transparency&lt;/li&gt;
&lt;li&gt;Serverless execution&lt;/li&gt;
&lt;li&gt;Easy forkability&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;And it keeps the tool &lt;strong&gt;fully open-source&lt;/strong&gt; and reproducible.&lt;/p&gt;

&lt;p&gt;📦 &lt;strong&gt;Repo&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/SecByShresth/MANTA-Malware-ANalysis-Tool-Assistant" rel="noopener noreferrer"&gt;MANTA&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;If you're into malware analysis, browser-based tooling, or serverless architectures, feel free to explore the repo or contribute enhancements.&lt;/p&gt;

&lt;p&gt;Thanks for reading!&lt;br&gt;
Happy to get feedback, PRs, or ideas for the next release.&lt;/p&gt;

</description>
      <category>malware</category>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>githubactions</category>
    </item>
    <item>
      <title>🚀 ElasticSecOpsCoPilot — Autonomous IOC Enrichment for Elastic Security</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Wed, 19 Nov 2025 21:20:32 +0000</pubDate>
      <link>https://forem.com/secbyshresth/elasticsecopscopilot-autonomous-ioc-enrichment-for-elastic-security-40m3</link>
      <guid>https://forem.com/secbyshresth/elasticsecopscopilot-autonomous-ioc-enrichment-for-elastic-security-40m3</guid>
      <description>&lt;p&gt;I just released &lt;strong&gt;ElasticSecOpsCoPilot&lt;/strong&gt;, a Python-powered continuous enrichment engine. &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔥 What It Does&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Extracts IOCs from logs-* and events-*&lt;/li&gt;
&lt;li&gt;Enriches them using:

&lt;ul&gt;
&lt;li&gt;VirusTotal&lt;/li&gt;
&lt;li&gt;AbuseIPDB&lt;/li&gt;
&lt;li&gt;Shodan&lt;/li&gt;
&lt;li&gt;WHOIS&lt;/li&gt;
&lt;li&gt;IPLocation.net&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;Writes structured enriched documents back into Elasticsearch&lt;/li&gt;

&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧠 Why I Built It&lt;/strong&gt;&lt;br&gt;
Most SOCs don’t have continuous enrichment pipelines, especially small/medium teams relying heavily on Elastic Security. This tool closes that gap with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Real-time enrichment loop&lt;/li&gt;
&lt;li&gt;Rate-limited API calls&lt;/li&gt;
&lt;li&gt;Lightweight document schemas&lt;/li&gt;
&lt;li&gt;Zero vendor lock-in&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🛠️ Tech Stack: -&lt;/strong&gt; &lt;br&gt;
Python, Elastic Cloud Serverless, VirusTotal API, AbuseIPDB, Shodan, free Geo IP APIs.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;📦 Repo: -&lt;/strong&gt;&lt;br&gt;
👉 &lt;a href="https://github.com/SecByShresth/ElasticSecOpsCoPilot" rel="noopener noreferrer"&gt;https://github.com/SecByShresth/ElasticSecOpsCoPilot&lt;/a&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>elasticsearch</category>
      <category>socautomation</category>
      <category>threathunting</category>
    </item>
    <item>
      <title>🧠 How User-Space and Kernel-Space Affect Security in Linux</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Thu, 13 Nov 2025 04:41:17 +0000</pubDate>
      <link>https://forem.com/secbyshresth/how-user-space-and-kernel-space-affect-security-in-linux-18an</link>
      <guid>https://forem.com/secbyshresth/how-user-space-and-kernel-space-affect-security-in-linux-18an</guid>
      <description>&lt;p&gt;When we talk about Linux security, most people think of firewalls, sudo permissions, or file ownership.&lt;br&gt;
But the real security story begins much deeper — at &lt;strong&gt;the boundary between user-space and kernel-space.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Understanding this boundary is essential for anyone working in cybersecurity, system hardening, or malware analysis.&lt;br&gt;
Because once this barrier is broken… you no longer control your system — &lt;strong&gt;the attacker does.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 What Are User-Space and Kernel-Space?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Think of your operating system as a high-security building.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;kernel-space&lt;/strong&gt; is the restricted control room — only a few trusted personnel (kernel code, drivers, privileged processes) are allowed here.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;The &lt;strong&gt;user-space&lt;/strong&gt; is the public area — where regular users and applications operate.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In Linux, these two areas are isolated for safety. User-space programs can’t directly touch hardware or memory used by the kernel.&lt;br&gt;
Instead, they make *&lt;em&gt;system calls *&lt;/em&gt; (like read(), write(), open()) to request the kernel to perform those actions safely.&lt;/p&gt;

&lt;p&gt;This isolation prevents your text editor from corrupting memory, or your browser from crashing the system.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🧱 Why This Separation Matters for Security&lt;/strong&gt;&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Memory Protection:&lt;br&gt;
User-space processes can’t access kernel memory directly.&lt;br&gt;
This stops malware from easily overwriting system-level structures.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Privilege Isolation:&lt;br&gt;
Even if a user-space app is compromised, it stays confined to user privileges — unless it exploits a kernel bug.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Controlled Interfaces (Syscalls):&lt;br&gt;
System calls act as a gatekeeper between user-space and kernel-space. Every interaction is validated, sanitized, and logged (in modern systems).&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Crash Containment:&lt;br&gt;
A crash in user-space (say, Firefox) doesn’t crash the kernel. But a kernel crash (via a bad driver) can panic the entire system — that’s why kernel security is sacred.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;⚠️ How Attackers Exploit This Boundary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Attackers are obsessed with &lt;strong&gt;crossing the user-to-kernel boundary&lt;/strong&gt;, because that’s where they gain ultimate control.&lt;/p&gt;

&lt;p&gt;Common exploitation techniques include:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Kernel Vulnerabilities:&lt;/strong&gt;&lt;br&gt;
Bugs in device drivers or kernel modules (like use-after-free or buffer overflow) allow attackers to execute code in kernel-space.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Privilege Escalation:&lt;/strong&gt;&lt;br&gt;
Exploiting flaws in syscalls or permissions to elevate from a normal user to root.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Malicious Kernel Modules (Rootkits):&lt;/strong&gt;&lt;br&gt;
Attackers load custom modules that hide processes, intercept syscalls, or modify kernel behavior.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Abusing /dev and /proc interfaces:&lt;/strong&gt;&lt;br&gt;
Misconfigured device interfaces can provide direct access to kernel memory or configuration, bypassing restrictions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔒 How to Strengthen This Boundary&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here’s how defenders can keep this line secure:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;Keep the Kernel Updated:&lt;br&gt;
Most privilege escalations stem from kernel CVEs. Regular updates close these holes before attackers find them.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Restrict Kernel Module Loading:&lt;br&gt;
Use lsmod, modprobe -r, and set kernel.modules_disabled=1 (after boot) for high-security systems.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Enable Mandatory Access Controls:&lt;br&gt;
SELinux or AppArmor helps enforce strict policies around system calls and process access.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Use Syscall Filtering (seccomp):&lt;br&gt;
Modern services (like Chrome, Docker) use seccomp to block dangerous syscalls from ever being executed.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Audit and Monitor Kernel Behavior:&lt;br&gt;
Tools like auditd, osquery, and Falco help detect abnormal kernel interactions in real-time.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;strong&gt;🧩 Real-World Example&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;In 2022, a privilege escalation flaw (&lt;strong&gt;Dirty Pipe&lt;/strong&gt;, CVE-2022-0847) allowed attackers to overwrite read-only files from user-space — effectively writing arbitrary data into the kernel’s memory mappings.&lt;br&gt;
This was possible because of a &lt;strong&gt;flaw in how user-space interacted with kernel buffers&lt;/strong&gt; — a perfect example of this boundary being breached.&lt;/p&gt;

&lt;p&gt;Patches fixed it quickly, but it reminded everyone:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;The line between user-space and kernel-space is thin — and must be guarded relentlessly.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;&lt;strong&gt;🚀 Final Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Linux’s design is inherently secure — but its power lies in how well you understand and protect its foundations.&lt;br&gt;
User-space and kernel-space separation isn’t just a performance or stability feature — it’s &lt;strong&gt;one of the strongest lines of defense&lt;/strong&gt; in system security.&lt;/p&gt;

&lt;p&gt;Once that line is crossed, there’s no firewall or antivirus that can save you.&lt;/p&gt;

&lt;p&gt;So the next time you hear about a kernel exploit, remember — that’s not “just another CVE.”&lt;br&gt;
That’s an attack on the very wall that keeps your system safe.&lt;/p&gt;

</description>
      <category>linuxsecurity</category>
      <category>cybersecurity</category>
      <category>kernelsecurity</category>
      <category>privilegeescalation</category>
    </item>
    <item>
      <title>🚀 Introducing VulnFeed - Real-Time Vulnerability Tracking for CISA &amp; Red Hat</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Mon, 03 Nov 2025 20:06:04 +0000</pubDate>
      <link>https://forem.com/secbyshresth/introducing-vulnfeed-real-time-vulnerability-tracking-for-cisa-red-hat-3h27</link>
      <guid>https://forem.com/secbyshresth/introducing-vulnfeed-real-time-vulnerability-tracking-for-cisa-red-hat-3h27</guid>
      <description>&lt;p&gt;&lt;strong&gt;“What started as a late-night experiment turned into a fully automated vulnerability intelligence dashboard.”&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over the past few days (and one long night 😅), I built &lt;a href="https://secbyshresth.github.io/VulnFeed/" rel="noopener noreferrer"&gt;VulnFeed&lt;/a&gt; — a real-time feed that tracks and visualizes &lt;strong&gt;CISA’s Known Exploited Vulnerabilities and Red Hat Security Data API&lt;/strong&gt; updates.&lt;br&gt;
It’s open-source, lightweight, and automatically refreshes every few hours using GitHub Actions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;🔍 Why I Built This&lt;/strong&gt;&lt;br&gt;
Keeping track of actively exploited vulnerabilities has always been a challenge — especially across multiple sources.&lt;br&gt;
Most dashboards are either slow, paywalled, or overly complex.&lt;br&gt;
I wanted something simple, fast, and transparent — something that could be used both by security teams and curious researchers.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;⚙️ How It Works&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- 🧠 Data Sources:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;CISA Known Exploited Vulnerabilities Catalog&lt;/li&gt;
&lt;li&gt;Red Hat Security Data API&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;- 🔄 Automation:&lt;/strong&gt;&lt;br&gt;
A GitHub Action runs every few hours to pull the latest data and publish updates to the site.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- 💡 Frontend:&lt;/strong&gt;&lt;br&gt;
Built with simple HTML + JS for now — fast, clean, and hosted via GitHub Pages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;- 📂 Open Source:&lt;/strong&gt;&lt;br&gt;
You can explore the repository and workflows here → &lt;a href="https://github.com/SecByShresth/VulnFeed" rel="noopener noreferrer"&gt;GitHub — SecByShresth/VulnFeed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;💬 Final Thoughts&lt;/strong&gt;&lt;br&gt;
Security data should be &lt;strong&gt;accessible&lt;/strong&gt;, &lt;strong&gt;open&lt;/strong&gt;, and &lt;strong&gt;real-time&lt;/strong&gt;.&lt;br&gt;
VulnFeed is my small step toward that goal.&lt;br&gt;
If you’re into &lt;strong&gt;threat intelligence&lt;/strong&gt;, &lt;strong&gt;DevSecOps&lt;/strong&gt;, or &lt;strong&gt;vulnerability management&lt;/strong&gt;, I’d love to hear your feedback or ideas for improving it.&lt;/p&gt;

&lt;p&gt;Check it out here → &lt;a href="https://secbyshresth.github.io/VulnFeed/" rel="noopener noreferrer"&gt;https://secbyshresth.github.io/VulnFeed/&lt;/a&gt;&lt;br&gt;
GitHub Repo → &lt;a href="https://github.com/SecByShresth/VulnFeed" rel="noopener noreferrer"&gt;https://github.com/SecByShresth/VulnFeed&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;✍️ Built by &lt;a href="https://github.com/SecByShresth" rel="noopener noreferrer"&gt;Shresth Paul&lt;/a&gt; — fueled by curiosity, caffeine, and a bit of insomnia.&lt;/p&gt;

</description>
      <category>devsecops</category>
      <category>cybersecurity</category>
      <category>infosec</category>
      <category>vulnerabilities</category>
    </item>
    <item>
      <title>🛡️ What Makes Linux Secure (and Where It's Weak - Plus How to Fix It)</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Wed, 29 Oct 2025 21:11:47 +0000</pubDate>
      <link>https://forem.com/secbyshresth/what-makes-linux-secure-and-where-its-weak-plus-how-to-fix-it-2kpi</link>
      <guid>https://forem.com/secbyshresth/what-makes-linux-secure-and-where-its-weak-plus-how-to-fix-it-2kpi</guid>
      <description>&lt;p&gt;When people say "Linux is more secure than Windows", they're often half right - and half overconfident.&lt;/p&gt;

&lt;p&gt;Linux is built on strong security principles, but it's not immune to misconfigurations, privilege escalations, or human mistakes.&lt;/p&gt;

&lt;p&gt;Let's explore why Linux is secure, where it's weak, and most importantly - how to fix those weaknesses.&lt;/p&gt;

&lt;p&gt;🔍 &lt;strong&gt;Why Linux Is Secure by Design&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Open-Source Transparency&lt;/strong&gt;&lt;br&gt;
Linux's open codebase means vulnerabilities rarely stay hidden.&lt;br&gt;
With thousands of eyes reviewing patches and commits daily, flaws are usually caught quickly.&lt;/p&gt;

&lt;p&gt;✅ Security Tip:&lt;br&gt;
Stay subscribed to your distro's security mailing list (arch-security, debian-security-announce, etc.).&lt;br&gt;
Use automatic updates where safe - or run:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo pacman -Syu      # Arch
sudo apt update &amp;amp;&amp;amp; sudo apt upgrade -y  # Debian/Ubuntu
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. User Privilege Separation&lt;/strong&gt;&lt;br&gt;
Linux's privilege model prevents normal users from harming system-level components.&lt;br&gt;
Root access requires explicit elevation (sudo), and every sudo command gets logged.&lt;/p&gt;

&lt;p&gt;✅ Security Tip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Never run applications as root unless absolutely necessary. &lt;/li&gt;
&lt;li&gt;Review your sudoers file using:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo visudo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;Disable passwordless sudo access.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Granular Permissions and Ownership&lt;/strong&gt;&lt;br&gt;
The &lt;code&gt;rwx&lt;/code&gt; (read, write, execute) permission model provides precise control over access.&lt;br&gt;
Combined with proper ownership, this limits how much damage a compromised process can do.&lt;/p&gt;

&lt;p&gt;✅ Security Tip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Regularly audit permissions:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo find / -perm -2 ! -type l -ls 2&amp;gt;/dev/null
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;(This finds world-writable files.)&lt;/li&gt;
&lt;li&gt;Use chmod, chown, and groups wisely - avoid chmod 777 at all costs.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Modular Security Layers&lt;/strong&gt;&lt;br&gt;
Linux layers security with &lt;strong&gt;PAM **(authentication), **AppArmor/SELinux&lt;/strong&gt; (access control), and &lt;strong&gt;iptables/nftables&lt;/strong&gt; (firewalling).&lt;/p&gt;

&lt;p&gt;✅ Security Tip:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use ufw or firewalld to manage firewalls easily.&lt;/li&gt;
&lt;li&gt;Enable AppArmor or SELinux policies:
&lt;/li&gt;
&lt;/ul&gt;
&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo aa-status 
getenforce
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;ul&gt;
&lt;li&gt;If they're not active, enable them - they help contain compromised applications.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;5. Community and Rapid Patching&lt;/strong&gt;&lt;br&gt;
Unlike proprietary OSes, Linux distros release patches within hours or days after a CVE surfaces.&lt;/p&gt;

&lt;p&gt;✅ Security Tip:&lt;br&gt;
Use a vulnerability scanner like Lynis or OpenVAS periodically to check system health:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo lynis audit system
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;⚠️ Where Linux Is Weak - and How to Fix It&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Misconfiguration and Human Error&lt;/strong&gt;&lt;br&gt;
Most real-world intrusions come from weak SSH setups or careless file permissions.&lt;br&gt;
💡 How to Fix It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Disable SSH password authentication:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;PasswordAuthentication no
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use SSH keys instead.&lt;/li&gt;
&lt;li&gt;Close unnecessary ports and then block unwanted services via your firewall.
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo ss -tuln
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Outdated or Unpatched Systems&lt;/strong&gt;&lt;br&gt;
Attackers often exploit unpatched software, especially on servers that haven't been updated in months.&lt;br&gt;
💡 How to Fix It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Enable automatic updates or schedule a weekly cron job.&lt;/li&gt;
&lt;li&gt;For long-term servers, test patches in a staging VM before production rollout.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;3. Weak Application Sandboxing&lt;/strong&gt;&lt;br&gt;
Desktop and server apps sometimes run with more privileges than they should.&lt;br&gt;
💡 How to Fix It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Use Flatpak or Snap to run untrusted apps in containers.&lt;/li&gt;
&lt;li&gt;Enforce AppArmor profiles - even basic confinement limits access to files and devices.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;4. Privilege Escalation Exploits&lt;/strong&gt;&lt;br&gt;
Kernel and sudo vulnerabilities can allow attackers to gain root access.&lt;br&gt;
💡 How to Fix It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Keep kernel packages up to date.&lt;/li&gt;
&lt;li&gt;Limit who's in the sudo group:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;getent group sudo
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;ul&gt;
&lt;li&gt;Use auditd to log and monitor privilege use:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;sudo auditctl -l
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;5. Overconfidence&lt;/strong&gt;&lt;br&gt;
Linux's reputation for security sometimes breeds complacency.&lt;br&gt;
Admins skip hardening steps thinking, "It's Linux - I'm safe." That's exactly how breaches happen.&lt;br&gt;
💡 How to Fix It:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Perform regular security audits using checklists like CIS Benchmarks for Linux.&lt;/li&gt;
&lt;li&gt;Treat every system as if it's already under attack - and design accordingly.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;🧭 Takeaway&lt;/strong&gt;&lt;br&gt;
Linux provides every tool you need to build a secure environment - but none of them work if you ignore them.&lt;br&gt;
True security isn't about the OS you use; it's about the &lt;strong&gt;discipline you maintain.&lt;/strong&gt;&lt;br&gt;
"Security in Linux isn't a product - it's a process."&lt;/p&gt;

</description>
      <category>linux</category>
      <category>security</category>
      <category>securinglinux</category>
    </item>
    <item>
      <title>Maintaining Arch Linux AUR Packages: Update for python-zfec</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Mon, 27 Oct 2025 18:50:22 +0000</pubDate>
      <link>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-update-for-python-zfec-2kko</link>
      <guid>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-update-for-python-zfec-2kko</guid>
      <description>&lt;p&gt;As part of my ongoing maintenance work on Arch Linux AUR packages, I’ve updated the python-zfec package — the Python bindings for the ZFEC erasure coding library.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What Changed&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previous state&lt;/strong&gt;: Older release based on a previous version of the ZFEC library.&lt;br&gt;
&lt;strong&gt;Update&lt;/strong&gt;: The AUR package now tracks the latest upstream release with cleaner metadata and improved Python packaging standards.&lt;/p&gt;

&lt;p&gt;The goal was to make the build more consistent with upstream Python packaging practices, ensuring the module installs cleanly with current versions of Python on Arch.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Why It Matters&lt;/strong&gt;&lt;br&gt;
&lt;code&gt;python-zfec&lt;/code&gt; provides Python support for ZFEC, a fast, open-source implementation of erasure coding — often used for data redundancy and recovery.&lt;br&gt;
&lt;strong&gt;With this update:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Build scripts are simplified&lt;/li&gt;
&lt;li&gt;Dependencies are better aligned with current Python packaging&lt;/li&gt;
&lt;li&gt;The module works smoothly on modern Arch systems&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to Install (AUR)&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S python-zfec
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify the installation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -c "import zfec; print('ZFEC imported successfully')"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Closing Thoughts&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Maintaining AUR packages is about keeping the Linux ecosystem consistent and reliable. This small but important update ensures that Arch users can continue using ZFEC-based tools without compatibility issues.&lt;/p&gt;

&lt;p&gt;Stay tuned for more updates from my AUR maintenance journey!&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>aur</category>
      <category>python</category>
      <category>linux</category>
    </item>
    <item>
      <title>Maintaining Arch Linux AUR Packages: Updates for python-nspektr and rapidyaml</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Thu, 02 Oct 2025 18:37:11 +0000</pubDate>
      <link>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-updates-for-python-nspektr-and-rapidyaml-4b14</link>
      <guid>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-updates-for-python-nspektr-and-rapidyaml-4b14</guid>
      <description>&lt;p&gt;As part of my ongoing effort to maintain and improve Arch Linux AUR packages, I recently updated two projects — python-nspektr and rapidyaml. Both required more than just bumping versions: I had to revisit sources, streamline dependencies, and ensure smooth builds for both C++ and Python components.&lt;/p&gt;

&lt;p&gt;Here’s a breakdown of what changed and how you can use these updated packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Updating python-nspektr&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previous state:&lt;/strong&gt; Built from a Git commit (0.5.0).&lt;br&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Now at &lt;strong&gt;0.5.1&lt;/strong&gt;, sourced from the official PyPI release.&lt;br&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; Using the PyPI tarball results in a cleaner package with minimal dependencies, ensuring stability for Arch users.&lt;br&gt;
&lt;strong&gt;How to install (AUR):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S python-nspektr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify installation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -c "import nspektr; print(nspektr.__version__)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Updating rapidyaml (C++ library)This update focused solely on the C++ rapidyaml library, not the Python bindings.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previous state:&lt;/strong&gt; Version &lt;strong&gt;0.9.0&lt;/strong&gt; built from Git.&lt;br&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Now bumped to &lt;strong&gt;0.10.0&lt;/strong&gt;, with improved packaging for the C++ components.&lt;br&gt;
&lt;strong&gt;AUR change:&lt;/strong&gt; When I updated &lt;code&gt;rapidyaml&lt;/code&gt;, the separate &lt;code&gt;python-rapidyaml&lt;/code&gt; package was automatically dropped from the AUR. This wasn’t because of a change in the upstream project’s Python bindings, but rather because the AUR packaging now only includes the C++ library.&lt;br&gt;
&lt;strong&gt;What was tested:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verified the C++ rapidyaml library with a simple YAML parsing test.
-Python bindings remain available upstream, but they’re no longer part of the Arch AUR package.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to install (AUR):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S rapidyaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test the C++ library:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;ryml.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;
int main() {
    c4::yml::Tree tree = ryml::parse_in_arena(R"(
        hello: world
        number: 42
    )");
    std::cout &amp;lt;&amp;lt; tree["hello"].val() &amp;lt;&amp;lt; std::endl; // prints: world
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Compile and run:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g++ test.cpp -o test -lryml
./test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Updated Packages Overview&lt;/strong&gt;&lt;br&gt;
PackageVersion Updated ToNotespython-nspektr0.5.1Switched from Git commit to PyPI tarball, trimmed dependenciesrapidyaml0.10.0Includes both C++ library and Python bindings (AUR auto-removed the separate &lt;code&gt;python-rapidyaml&lt;/code&gt; package)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Closing Thoughts&lt;/strong&gt;&lt;br&gt;
Maintaining AUR packages isn’t just about version bumps — it’s about keeping packages clean, reliable, and easy for users to install. With these updates, both &lt;code&gt;python-nspektr&lt;/code&gt; and &lt;code&gt;rapidyaml&lt;/code&gt; are now aligned and ready for Arch Linux users.&lt;/p&gt;

&lt;p&gt;If you’re also maintaining AUR packages, here are some quick tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prefer PyPI tarballs over Git commits for Python projects.&lt;/li&gt;
&lt;li&gt;Keep C++ libraries and their Python bindings in sync.&lt;/li&gt;
&lt;li&gt;Always test with a real-world example after building.&lt;/li&gt;
&lt;li&gt;Don’t forget to regenerate your .SRCINFO with:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;makepkg --printsrcinfo &amp;gt; .SRCINFO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I’ll continue sharing updates from my AUR maintenance journey — stay tuned for more!&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>opensource</category>
      <category>cpp</category>
      <category>python</category>
    </item>
    <item>
      <title>Maintaining Arch Linux AUR Packages: Updates for python-nspektr and rapidyaml</title>
      <dc:creator>Shresth Paul</dc:creator>
      <pubDate>Thu, 02 Oct 2025 18:37:10 +0000</pubDate>
      <link>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-updates-for-python-nspektr-and-rapidyaml-1gog</link>
      <guid>https://forem.com/secbyshresth/maintaining-arch-linux-aur-packages-updates-for-python-nspektr-and-rapidyaml-1gog</guid>
      <description>&lt;p&gt;As part of my ongoing effort to maintain and improve Arch Linux AUR packages, I recently updated two projects — python-nspektr and rapidyaml. Both required more than just bumping versions: I had to revisit sources, streamline dependencies, and ensure smooth builds for both C++ and Python components.&lt;/p&gt;

&lt;p&gt;Here’s a breakdown of what changed and how you can use these updated packages.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;1. Updating python-nspektr&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previous state:&lt;/strong&gt; Built from a Git commit (0.5.0).&lt;br&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Now at &lt;strong&gt;0.5.1&lt;/strong&gt;, sourced from the official PyPI release.&lt;br&gt;
&lt;strong&gt;Why it matters:&lt;/strong&gt; Using the PyPI tarball results in a cleaner package with minimal dependencies, ensuring stability for Arch users.&lt;br&gt;
&lt;strong&gt;How to install (AUR):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S python-nspektr
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Verify installation:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;python -c "import nspektr; print(nspektr.__version__)"
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;2. Updating rapidyaml (C++ library)This update focused solely on the C++ rapidyaml library, not the Python bindings.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Previous state:&lt;/strong&gt; Version &lt;strong&gt;0.9.0&lt;/strong&gt; built from Git.&lt;br&gt;
&lt;strong&gt;Update:&lt;/strong&gt; Now bumped to &lt;strong&gt;0.10.0&lt;/strong&gt;, with improved packaging for the C++ components.&lt;br&gt;
&lt;strong&gt;AUR change:&lt;/strong&gt; When I updated &lt;code&gt;rapidyaml&lt;/code&gt;, the separate &lt;code&gt;python-rapidyaml&lt;/code&gt; package was automatically dropped from the AUR. This wasn’t because of a change in the upstream project’s Python bindings, but rather because the AUR packaging now only includes the C++ library.&lt;br&gt;
&lt;strong&gt;What was tested:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Verified the C++ rapidyaml library with a simple YAML parsing test.
-Python bindings remain available upstream, but they’re no longer part of the Arch AUR package.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;How to install (AUR):&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;yay -S rapidyaml
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Test the C++ library:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;#include &amp;lt;ryml.hpp&amp;gt;
#include &amp;lt;iostream&amp;gt;
int main() {
    c4::yml::Tree tree = ryml::parse_in_arena(R"(
        hello: world
        number: 42
    )");
    std::cout &amp;lt;&amp;lt; tree["hello"].val() &amp;lt;&amp;lt; std::endl; // prints: world
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Compile and run:&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;g++ test.cpp -o test -lryml
./test
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;Updated Packages Overview&lt;/strong&gt;&lt;br&gt;
PackageVersion Updated ToNotespython-nspektr0.5.1Switched from Git commit to PyPI tarball, trimmed dependenciesrapidyaml0.10.0Includes both C++ library and Python bindings (AUR auto-removed the separate &lt;code&gt;python-rapidyaml&lt;/code&gt; package)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Closing Thoughts&lt;/strong&gt;&lt;br&gt;
Maintaining AUR packages isn’t just about version bumps — it’s about keeping packages clean, reliable, and easy for users to install. With these updates, both &lt;code&gt;python-nspektr&lt;/code&gt; and &lt;code&gt;rapidyaml&lt;/code&gt; are now aligned and ready for Arch Linux users.&lt;/p&gt;

&lt;p&gt;If you’re also maintaining AUR packages, here are some quick tips:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Prefer PyPI tarballs over Git commits for Python projects.&lt;/li&gt;
&lt;li&gt;Keep C++ libraries and their Python bindings in sync.&lt;/li&gt;
&lt;li&gt;Always test with a real-world example after building.&lt;/li&gt;
&lt;li&gt;Don’t forget to regenerate your .SRCINFO with:
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;makepkg --printsrcinfo &amp;gt; .SRCINFO
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;I’ll continue sharing updates from my AUR maintenance journey — stay tuned for more!&lt;/p&gt;

</description>
      <category>archlinux</category>
      <category>opensource</category>
      <category>cpp</category>
      <category>python</category>
    </item>
  </channel>
</rss>
