CVEReports
CVEReports

Automated vulnerability intelligence platform. Comprehensive reports for high-severity CVEs generated by AI.

Product

  • Home
  • Sitemap
  • RSS Feed

Company

  • About
  • Contact
  • Privacy Policy
  • Terms of Service

© 2026 CVEReports. All rights reserved.

Made with love by Amit Schendel & Alon Barad



CVE-2026-26273

The Over-Helpful Doorman: Full Account Takeover in 'Known' CMS

Alon Barad
Alon Barad
Software Engineer

Feb 13, 2026·6 min read·38 visits

Executive Summary (TL;DR)

A critical flaw in Known < 1.6.3 allows anyone to reset an admin password by simply inspecting the HTML source code. The application leaks the database-stored reset token into a hidden input field when visited with a target's email address.

CVE-2026-26273 is a catastrophic logic flaw in the 'Known' social publishing platform that turns the password reset mechanism into an open buffet for attackers. By simply knowing a victim's email address, an unauthenticated attacker can trigger a password reset and then retrieve the secret recovery token directly from the application's HTML source code. This bypasses the email delivery requirement entirely, allowing for instant, silent, and full account takeover (ATO). Rated as Critical (CVSS 9.8), this vulnerability highlights the dangers of implicit trust in client-side requests and 'convenience' features that leak state.

The Hook: When Convenience Kills Security

In the world of web application security, there is a fine line between 'User Experience' and 'Catastrophic Failure'. The developers of Known, a Fediverse-ready social publishing platform, decided to cross that line, sprint a mile past it, and set up camp in the land of insecure direct object references. The vulnerability, designated CVE-2026-26273, is a textbook example of what happens when code tries to be too helpful.

Usually, the password reset dance is boring but secure: you ask for a link, the server generates a token, emails it to you, and waits. The server trusts the email provider to deliver the secret key to the right person. Known, however, decided to shortcut this process. Instead of treating the reset token as a holy artifact that should only exist in the database and the user's email inbox, the application decided to pre-populate it in the HTML for anyone who asked nicely.

Imagine you lose your house keys. You call a locksmith. A secure locksmith asks for ID. The locksmith in this scenario—Known—just asks, 'Hey, are you the guy who lives at 123 Fake Street?' If you say yes, he hands you a copy of the key he keeps under the mat. This isn't complex memory corruption; it's a fundamental logic failure that results in a trivial, unauthenticated Account Takeover (ATO) of any user on the platform.

The Flaw: A Leak in the Logic

The root cause resides in Idno/Pages/Account/Password/Reset.php, specifically within the getContent() method. This function handles the HTTP GET request when a user navigates to the password reset page. In a sane implementation, this page should either ask for the token (if clicked from an email) or tell the user to check their inbox. It should never know what the token is unless the user provides it.

However, the code logic took a fatal detour. When a request arrived with an email parameter (e.g., ?email=victim@target.com), the application instantiated the user object associated with that email. So far, standard procedure. But then, it did the unthinkable: it queried the database for the user's current active password recovery code.

It didn't stop there. Having fetched this secret, the application passed it directly into the template engine. The intention was likely to 'help' legitimate users who might have clicked a malformed link or to pre-fill state for the form submission. The result, however, was that the secret token was rendered into the HTML source code of the page, sitting quietly in a hidden input field, waiting to be scraped.

The Code: The Smoking Gun

Let's look at the PHP code responsible for this disaster. This is a reconstruction of the vulnerable logic in getContent() prior to version 1.6.3:

// VULNERABLE CODE (Simplified)
$email = $this->getInput('email');
if ($user = \Idno\Entities\User::getByEmail($email)) {
    // FATAL ERROR: Fetching the secret directly from the DB
    $code = $user->getPasswordRecoveryCode();
    
    // Passing the secret to the template
    $t = \Idno\Core\site()->template();
    $t->__(['code' => $code])->draw('account/password/reset');
}

And inside the template, the betrayal is complete:

<!-- rendered HTML output -->
<form action="/account/password/reset" method="post">
    <input type="hidden" name="code" value="[SECRET_TOKEN_HERE]">
    <input type="password" name="password" placeholder="New Password">
    ...
</form>

The fix, applied in commit 8439a0747471559fb1ea9f074b929d390f27e66a, introduces basic sanity checks. It forces the user to provide the code via the URL first, and then uses hash_equals (a constant-time string comparison function) to validate it against the database. If they don't match, or if the code wasn't provided, the form is never rendered with the token.

// PATCHED CODE
$code = $this->getInput('code');
if (!empty($code) && hash_equals($code, $user->getPasswordRecoveryCode())) {
   // Only render if the user ALREADY knows the code
   $t->__(['code' => $code])->draw('account/password/reset');
}

The Exploit: Stealing the Keys

Exploiting this is trivially easy. It requires no special tooling—just a web browser and the 'View Source' button. Here is the kill chain for taking over the administrator account.

Step 1: The Trigger First, we need the server to generate a token. We send a standard POST request to the 'Forgot Password' endpoint. The server dutifully generates a random token, saves it to the database, and emails it to the victim. We don't have access to the victim's email, but thanks to this bug, we don't need it.

Step 2: The Retrieval We navigate to the reset page, appending the victim's email address to the URL: https://target-site.com/account/password/reset/?email=admin@target-site.com. The application sees the email, looks up the admin user, grabs the token we just triggered in Step 1, and serves us the page.

Step 3: The Extraction We right-click and select Inspect Element (or View Source). We search for name="code". There it is: <input type="hidden" name="code" value="29d390f27e66a...">.

Step 4: The Takeover We don't even need to craft a custom POST request. We just type a new password into the form presented on the screen and hit 'Save'. Because the form was pre-filled with the valid token by the server itself, the password change is accepted. We now own the admin account.

The Impact: Why We Panic

This is a CVSS 9.8 for a reason. In a social publishing platform, an Account Takeover is not just about reading DMs. It is about reputation destruction and potential supply chain attacks.

If an attacker compromises an administrator account on a Known instance, they can:

  1. Deface the site: Replace all content with malware links or propaganda.
  2. inject XSS: Add malicious JavaScript to the site template, attacking every visitor (watering hole attack).
  3. Delete Data: Wipe the database, destroying years of content.
  4. Federation Attacks: Since Known talks to the Fediverse (ActivityPub), an attacker could broadcast malicious content to connected servers, masquerading as the trusted instance.

This is a 'Game Over' vulnerability. There is no mitigation other than patching. If your instance is exposed to the internet and running < 1.6.3, it is likely already compromised.

Official Patches

idnoGitHub Commit: Fix password reset logic
idnoRelease 1.6.3

Fix Analysis (1)

Technical Appendix

CVSS Score
9.8/ 10
CVSS:3.0/AV:N/AC:L/PR:N/UI:N/S:U/C:H/I:H/A:H

Affected Systems

Known Social Publishing Platform < 1.6.3

Affected Versions Detail

Product
Affected Versions
Fixed Version
Known
idno
< 1.6.31.6.3
AttributeDetail
CWE IDCWE-200 (Info Exposure)
CVSS v3.09.8 (Critical)
Attack VectorNetwork (Web)
PrivilegesNone
ImpactFull Account Takeover
Patch Commit8439a0747471559fb1ea9f074b929d390f27e66a

MITRE ATT&CK Mapping

T1552Unsecured Credentials
Credential Access
T1190Exploit Public-Facing Application
Initial Access
T1078Valid Accounts
Defense Evasion
CWE-200
Exposure of Sensitive Information to an Unauthorized Actor

The product exposes sensitive information to an unauthorized actor.

Known Exploits & Detection

ManualManual exploitation via HTML source inspection.

Vulnerability Timeline

Vulnerability Disclosed & CVE Assigned
2026-02-13
Patch (v1.6.3) Released
2026-02-13

References & Sources

  • [1]GHSA-78wq-6gcv-w28r
  • [2]NVD CVE-2026-26273

Attack Flow Diagram

Press enter or space to select a node. You can then use the arrow keys to move the node around. Press delete to remove it and escape to cancel.
Press enter or space to select an edge. You can then press delete to remove it or escape to cancel.

More Reports

•1 day ago•CVE-2026-63462
7.5

CVE-2026-63462: Unauthenticated Stack Overflow Denial of Service in Unleash Server

An unauthenticated remote denial of service vulnerability exists in the Unleash feature management platform. By submitting a crafted JSON payload containing deeply nested structures to an OpenAPI-validated endpoint, an attacker can trigger uncontrolled recursion within the error formatting module. This leads to a call-stack exhaustion (RangeError: Maximum call stack size exceeded) inside the Node.js runtime, causing the service to crash immediately without recovery.

Alon Barad
Alon Barad
8 views•6 min read
•1 day ago•CVE-2026-63004
5.5

CVE-2026-63004: Server-Side Request Forgery in Unleash Addon and Integration Subsystem

CVE-2026-63004 is a server-side request forgery (SSRF) vulnerability in the Unleash feature management platform. Authenticated administrators with CREATE_ADDON or UPDATE_ADDON privileges can exploit this vulnerability to initiate requests to loopback addresses, private networks, and cloud metadata endpoints, potentially leading to information disclosure and credential extraction.

Amit Schendel
Amit Schendel
7 views•8 min read
•1 day ago•CVE-2026-63466
4.1

CVE-2026-63466: Process-Wide Security Degradation via Global Module Mutation in Unleash

Prior to version 8.0.3, Unleash's Markdown event formatter directly mutated the global template-escaping function of the shared mustache Node.js module, resulting in a process-wide security degradation where HTML/Markdown escaping was permanently disabled for the application lifetime.

Alon Barad
Alon Barad
3 views•6 min read
•1 day ago•CVE-2026-76904
9.8

CVE-2026-76904: Unauthenticated SQL Injection in GeoTools PostGIS DataStore Component

A critical SQL injection vulnerability exists in the GeoTools open-source Java library. This vulnerability is situated within the post-processing phase of OGC Filter conversion inside the PostGIS DataStore module. Specifically, the `jsonArrayContains` function does not validate or sanitize its arguments before constructing PostgreSQL SQL/JSON path evaluation queries. An unauthenticated remote attacker can exploit this weakness by submitting crafted filters via standard OGC services like WFS or WMS to execute arbitrary SQL commands on the underlying database system.

Alon Barad
Alon Barad
9 views•5 min read
•1 day ago•CVE-2026-61824
8.2

CVE-2026-61824: High-Severity Cross-Site Scripting (XSS) via Unsanitized Site Extractors in Defuddle

CVE-2026-61824 is a high-severity Cross-Site Scripting (XSS) vulnerability in kepano/defuddle before version 0.19.1. Custom site extractors for platforms such as X/Twitter, Substack, and YouTube constructed HTML representations via template string interpolation without output escaping. This allowed malicious pages to bypass standard parser sanitization routines and execute arbitrary JavaScript.

Amit Schendel
Amit Schendel
5 views•7 min read
•1 day ago•CVE-2026-63421
7.5

CVE-2026-63421: Query Limit Bypass via Negative Integer Input in KeystoneJS core resolvers

A high-severity vulnerability exists in KeystoneJS, a popular Node.js CMS and GraphQL framework, where the query resolution engine fails to validate signed negative integers within the pagination subsystem. Unauthenticated remote attackers can leverage this flaw to bypass the 'graphql.maxTake' safety boundary. By sending large negative values in the 'take' query parameter, the underlying Prisma ORM interprets the value as an instruction to fetch rows from the end of the collection, allowing malicious actors to bypass pagination limits, trigger database resource exhaustion, and execute application-level Denial of Service (DoS) attacks.

Alon Barad
Alon Barad
6 views•6 min read