CVE-2026-33541: Miraheze/ts portal Denial of Service Vulnerability
MODERATECVE-2026-33541 is a MODERATE (CVSS 6.5) denial of service vulnerability (CWE-400: Uncontrolled Resource Consumption) affecting Miraheze/ts portal libraries in the Packagist ecosystem. The issue involves tsportal's uncontrolled user creation via validation side effects leads to potential denial of service. Remediation is available by upgrading affected packages to version 34.
CVE-2026-33541 at a Glance
Security Impact
CVSS: 6.5
The security impact metrics below are parsed directly from the CVSS v3.1 vector string (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H).
How to Fix CVE-2026-33541
To remediate this vulnerability, upgrade all affected Miraheze/ts portal dependencies to a patched release. Both direct and transitive dependencies should be checked, as frameworks or security libraries may pull in vulnerable versions transitively.
Upgrade miraheze/ts-portal to 34
Run the following command in your project directory to verify that all resolved dependencies use the patched release:
inspect dependencies for miraheze/ts-portal
How to Check if You Are Affected
To determine whether your application is affected by CVE-2026-33541, inspect your project dependencies for Miraheze/ts portal:
inspect dependencies for miraheze/ts-portal
Analyze the terminal output to locate any version of Miraheze/ts portal in your dependency tree. If any resolved version matches the vulnerable ranges listed in the table below (for example, versions earlier than 34), your application is affected.
Note: Verify declared build manifests and deployed runtime container environments.
Technical Details
Vulnerability Mechanism & Technical Analysis
This vulnerability is classified under CWE-400: Uncontrolled Resource Consumption, where the product does not properly control the allocation and maintenance of a limited resource. In Miraheze/ts portal, software state validation or input boundaries are circumvented during processing. Review the official source advisory statement below for specific affected components, classes, and reproduction details.
Source Advisory Statement
CVE-2026-33541 Affected Miraheze/ts portal Versions
1 component(s)| Product / Package | Ecosystem | Affected Versions | Fixed Version |
|---|---|---|---|
|
miraheze/ts-portal
|
Packagist |
< 34
|
34
|
References
Frequently Asked Questions
What is CVE-2026-33541?
Which Miraheze/ts portal versions are affected?
What version fixes CVE-2026-33541?
Is miraheze/ts-portal affected?
What is the CVSS score of CVE-2026-33541?
What CWE is associated with CVE-2026-33541?
How can I check Packagist dependencies for CVE-2026-33541?
Machine-readable OSV JSON
OSV v1.5 Schema
{
"schema_version" : "1.4.0",
"id" : "GHSA-f346-8rp3-4h9h",
"modified" : "2026-03-27T15:42:20Z",
"published" : "2026-03-27T15:42:20Z",
"aliases" : [ "CVE-2026-33541" ],
"summary" : "TSPortal's Uncontrolled User Creation via Validation Side Effects Leads to Potential Denial of Service",
"details" : "### Summary\nA flaw in TSPortal allowed attackers to create arbitrary user records in the database by abusing validation logic. While validation correctly rejected invalid usernames, a side effect within a validation rule caused user records to be created regardless of whether the request succeeded. This could be exploited to cause uncontrolled database growth, leading to a potential denial of service (DoS).\n\n### Details\nWhen submitting a Data Processing Agreement (DPA) request in TSPortal, the `DPAAlreadyLive` validation rule previously called `User::findOrCreate()`.\n\nThis method created a user record if one did not already exist.\n\nAlthough username validation (via `MirahezeUsernameRule`) correctly rejected invalid usernames, the `DPAAlreadyLive` rule was still executed during validation. Because it performed a state-changing operation, it created user records even when the overall validation failed and no DPA was created.\n\nAs a result:\n- Validation correctly rejected invalid input\n- However, user records were still inserted into the database as a side effect\n\nThese records were created:\n- Without a successful DPA request\n- Without audit logging tied to a completed action\n- Without visibility into their origin\n\n### Impact\nAn attacker could exploit this behavior by automating requests with invalid usernames, resulting in:\n\n- Mass creation of arbitrary user records\n- Unbounded database growth\n- Increased storage and indexing overhead\n- Potential degradation of application performance\n\nAt scale, this could lead to a denial of service condition due to resource exhaustion.\n\n### Proof of Concept\n1. Submit a DPA request using an invalid username\n2. Ensure the request fails validation due to `MirahezeUsernameRule`\n3. Observe that a corresponding user record is still created in the database\n\nThis behavior was confirmed prior to remediation.\n\n### Root Cause\nThe issue stemmed from:\n- Performing state-changing operations (`findOrCreate`) inside validation logic\n- Validation rules executing regardless of overall validation success\n- Lack of separation between validation and persistence layers\n\n### Mitigation\nThe issue has been fixed by removing database write operations from validation logic.\n\nSpecifically:\n- Replaced `User::findOrCreate()` with a non-mutating lookup (`User::firstWhere(...)`)\n- Ensured validation rules only perform read operations\n- Prevented user creation unless all validation passes",
"severity" : [ {
"type" : "CVSS_V3",
"score" : "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:N/A:H"
} ],
"affected" : [ {
"package" : {
"ecosystem" : "Packagist",
"name" : "miraheze/ts-portal"
},
"ranges" : [ {
"type" : "ECOSYSTEM",
"events" : [ {
"introduced" : "0"
}, {
"fixed" : "34"
} ]
} ],
"database_specific" : {
"last_known_affected_version_range" : "<= 33"
}
} ],
"references" : [ {
"type" : "WEB",
"url" : "https://github.com/miraheze/TSPortal/security/advisories/GHSA-f346-8rp3-4h9h"
}, {
"type" : "ADVISORY",
"url" : "https://nvd.nist.gov/vuln/detail/CVE-2026-33541"
}, {
"type" : "PACKAGE",
"url" : "https://github.com/miraheze/TSPortal"
}, {
"type" : "WEB",
"url" : "https://issue-tracker.miraheze.org/T15115"
} ],
"database_specific" : {
"cwe_ids" : [ "CWE-400", "CWE-770" ],
"severity" : "MODERATE",
"github_reviewed" : true,
"github_reviewed_at" : "2026-03-27T15:42:20Z",
"nvd_published_at" : "2026-03-26T21:17:05Z"
}
}