<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Nick Paul]]></title><description><![CDATA[I'm Nick Paul, a senior security engineer based in NYC. I've spent 6 years breaking into enterprise environments and documenting what I find.

This blog covers offensive security techniques, AI vulnerabilities, and the security assumptions that get organizations breached. Written for practitioners, useful for defenders.

For shorter content find me on TikTok and Instagram at @nickpaulsec.]]></description><link>https://nickpaulsec.com</link><image><url>https://cdn.hashnode.com/uploads/logos/69c17cb830a9b81e3a876ad4/b07d6919-29bd-43eb-ab2a-37ccd64d1f93.png</url><title>Nick Paul</title><link>https://nickpaulsec.com</link></image><generator>RSS for Node</generator><lastBuildDate>Mon, 11 May 2026 20:42:00 GMT</lastBuildDate><atom:link href="https://nickpaulsec.com/rss.xml" rel="self" type="application/rss+xml"/><language><![CDATA[en]]></language><ttl>60</ttl><item><title><![CDATA[I Found an Exposed cPanel Instance on a Startup. Then This CVE Dropped]]></title><description><![CDATA[A few months back I was doing passive recon on a fintech startup as part of some responsible disclosure research. Nothing crazy — subdomain enumeration, checking for exposed admin panels, the usual. O]]></description><link>https://nickpaulsec.com/i-found-an-exposed-cpanel-instance-on-a-startup-then-this-cve-dropped</link><guid isPermaLink="true">https://nickpaulsec.com/i-found-an-exposed-cpanel-instance-on-a-startup-then-this-cve-dropped</guid><dc:creator><![CDATA[nickpaulsec]]></dc:creator><pubDate>Mon, 04 May 2026 11:35:09 GMT</pubDate><content:encoded><![CDATA[<p>A few months back I was doing passive recon on a fintech startup as part of some responsible disclosure research. Nothing crazy — subdomain enumeration, checking for exposed admin panels, the usual. One of the subdomains came back with a live cPanel login page on port 2087, publicly accessible to anyone on the internet.</p>
<p>I flagged it in my disclosure report and moved on. Hosting control panels exposed to the public internet aren't unusual, but they're never a good look — especially for a company handling financial data.</p>
<p>Then CVE-2026-41940 dropped.</p>
<hr />
<h2>What Happened</h2>
<p>On April 28 2026, cPanel pushed an emergency patch for a critical authentication bypass affecting all supported versions of cPanel and WHM. CVSS 9.8. The kind of score that means drop everything and patch.</p>
<p>The vulnerability had already been exploited in the wild since at least February 23 — 64 days before anyone publicly knew it existed.</p>
<p>By the time the patch came out, ransomware operators were already running automated campaigns against exposed instances. A group deploying "Sorry" ransomware hit thousands of servers within days of public disclosure. KnownHost, Namecheap, and other major hosting providers had to block ports 2083 and 2087 entirely just to buy time to patch their fleets.</p>
<p>The numbers are brutal. Around 1.5 million cPanel instances are exposed on the internet. At least 44,000 IPs were confirmed compromised in the first wave.</p>
<hr />
<h2>The Vulnerability</h2>
<p>CVE-2026-41940 is a CRLF injection flaw in how cPanel handles the login flow. Here's what actually happens:</p>
<p>When you attempt to log in, cPanel's service daemon (<code>cpsrvd</code>) writes data from your request into a server-side session file <em>before</em> it verifies your credentials. That's the root cause — user input hits disk before authentication runs.</p>
<p>An attacker exploits this in four steps:</p>
<p><strong>Stage 1</strong> — Send a login request with invalid credentials. This fails, but cPanel still issues a <code>whostmgrsession</code> cookie for the pre-authentication session.</p>
<p><strong>Stage 2</strong> — Send a GET request with a crafted <code>Authorization</code> header containing CRLF characters (<code>\r\n</code>). cPanel fails to sanitize these, so the injected data gets written directly into the session file. The payload promotes the session to root by injecting:</p>
<pre><code class="language-plaintext">user=root
hasroot=1
tfa_verified=1
successful_internal_auth_with_timestamp=9999999999
</code></pre>
<p><strong>Stage 3</strong> — Hit <code>/scripts2/listaccts</code> to trigger a session file reload. This causes cPanel to re-parse the now-poisoned session file and load the injected root credentials into the active session cache.</p>
<p><strong>Stage 4</strong> — You now have an authenticated root WHM session. No password. No 2FA. Full administrative access to the server, every hosted site, every database, every email account on it.</p>
<p>The entire chain is four HTTP requests.</p>
<hr />
<h2>Shared Hosting Makes This Worse</h2>
<p>Something that got underreported in the initial coverage: a lot of these exposed cPanel instances are shared hosting servers.</p>
<p>When I ran my tool against the startup I'd previously disclosed to, the canonical hostname resolved to a third-party hosting provider — not the startup's own infrastructure. That one server was hosting potentially hundreds of tenants.</p>
<p>If that server is vulnerable, it's not just one company's problem. Every site on that box is exposed. The blast radius for a single unpatched shared hosting server isn't one victim — it's every customer on the platform.</p>
<p>This is what makes CVE-2026-41940 a systemic issue, not just a patch management problem. cPanel controls somewhere north of 70 million domains. A single vulnerability in a platform with that kind of market concentration is essentially an attack on a significant chunk of the internet's hosting infrastructure.</p>
<hr />
<h2>The Tool</h2>
<p>After the CVE dropped I built a detection and exploitation tool for authorized red team use. It handles:</p>
<ul>
<li><p>Passive version fingerprinting via unauthenticated endpoints and asset timestamp analysis</p>
</li>
<li><p>Shared hosting detection with blast radius warning</p>
</li>
<li><p>Full 4-stage exploit chain for authorized engagements</p>
</li>
<li><p>Post-exploitation enumeration (read-only)</p>
</li>
<li><p>Optional command execution for impact demonstration</p>
</li>
</ul>
<p>Detect-only mode is the default — it never touches the authentication flow. You have to explicitly pass <code>--exploit</code> to run the chain.</p>
<pre><code class="language-bash"># detect only
python3 cp.py -t cpanel.target.com

# full chain (authorized use only)
python3 cp.py -t cpanel.target.com --exploit

# with command execution
python3 cp.py -t cpanel.target.com --exploit --exec "id; whoami; hostname"
</code></pre>
<p>Tool is on GitHub: <a href="https://github.com/nickpaulsec">github.com/nickpaulsec</a></p>
<hr />
<h2>Are You Affected?</h2>
<p>If you're running cPanel or WHM, check your version against these patched thresholds:</p>
<table>
<thead>
<tr>
<th>Branch</th>
<th>Patched Version</th>
</tr>
</thead>
<tbody><tr>
<td>11.110.x</td>
<td>11.110.0.97+</td>
</tr>
<tr>
<td>11.118.x</td>
<td>11.118.0.63+</td>
</tr>
<tr>
<td>11.126.x</td>
<td>11.126.0.54+</td>
</tr>
<tr>
<td>11.132.x</td>
<td>11.132.0.29+</td>
</tr>
<tr>
<td>11.134.x</td>
<td>11.134.0.20+</td>
</tr>
<tr>
<td>11.136.x</td>
<td>11.136.0.5+</td>
</tr>
</tbody></table>
<p>If you're on a hosting provider, contact them and ask for confirmation that the patch has been applied. Don't assume auto-updates ran.</p>
<p><strong>Check for IOCs:</strong></p>
<ul>
<li><p>Look in <code>/var/cpanel/sessions/raw/</code> for session files with multiple <code>pass=</code> lines or <code>user=root</code> on a non-root session</p>
</li>
<li><p>Review access logs for unexpected root sessions going back to February 23</p>
</li>
<li><p>Check for unexpected SSH keys, cron jobs, or new accounts</p>
</li>
</ul>
<p>Exploitation leaves traces but only if you know where to look. If your server was internet-exposed during the pre-disclosure window and you haven't checked yet, assume compromise until proven otherwise.</p>
<hr />
<p>The startup I originally disclosed to? I sent them a follow-up. Their hosting provider had already patched. But the fact that their control panel was publicly accessible at all is still a problem — CVE-2026-41940 is patched, but the next one won't be.</p>
<p>Restrict port 2087 to trusted IPs. That's the real fix.</p>
]]></content:encoded></item><item><title><![CDATA[Starting nickpaulsec]]></title><description><![CDATA[I've spent 6 years in enterprise security — penetration testing, red team engagements, building internal security tooling at scale. Most of my work never gets documented publicly - and I'm changing th]]></description><link>https://nickpaulsec.com/starting-nickpaulsec</link><guid isPermaLink="true">https://nickpaulsec.com/starting-nickpaulsec</guid><dc:creator><![CDATA[nickpaulsec]]></dc:creator><pubDate>Tue, 24 Mar 2026 23:45:10 GMT</pubDate><content:encoded><![CDATA[<p>I've spent 6 years in enterprise security — penetration testing, red team engagements, building internal security tooling at scale. Most of my work never gets documented publicly - and I'm changing that.</p>
<p>This blog is where I'm going to write about what I actually do — offensive techniques, cloud security research, security automation, and whatever else I'm digging into.</p>
<h3>A few things I'm currently working on</h3>
<p><strong>AWS Security Specialty</strong> — expanding my cloud security depth beyond Azure and into AWS IAM, EC2 security, and cloud attack paths. Expect posts on that as I go deeper.</p>
<p><strong>AI agent security</strong> — I've been researching exposed OpenClaw instances at internet scale. Built a scanner called clawscan that found 548 publicly accessible control panels across 2,980 scanned targets. Post on that coming soon.</p>
<p><strong>AD CS attack chains</strong> — ESC1, ESC8, ESC11 across enterprise environments. The most underestimated attack surface in Active Directory. Breaking that down in an upcoming post.</p>
<p>If you're a practitioner who's tired of surface-level security content, you're in the right place. — Nick</p>
]]></content:encoded></item></channel></rss>