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-33676

CVE-2026-33676: Cross-Project Information Disclosure in Vikunja API

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 26, 2026·6 min read·28 visits

Executive Summary (TL;DR)

Vikunja versions prior to 2.2.1 contain a flaw in API data hydration where task relations are fetched without verifying project-level read permissions. Authenticated users can exploit this to view full task metadata (descriptions, due dates, priorities) from unauthorized private projects.

CVE-2026-33676 is an Incorrect Authorization (CWE-863) vulnerability in the Vikunja task management platform. The application fails to enforce project-level access controls when the API populates related tasks, allowing authenticated users to read sensitive task details across projects they are not authorized to access. The vulnerability was patched in version 2.2.1.

Vulnerability Overview

Vikunja is an open-source, self-hosted task management platform designed to handle multi-tenant project organization. The application exposes a comprehensive REST API to facilitate client interactions, including the retrieval of complex task structures. Tasks within Vikunja can establish relationships with other tasks, such as marking one task as "blocking" or "duplicated by" another, which introduces cross-entity data dependencies.

The vulnerability, identified as CVE-2026-33676, exists in the API's data hydration logic responsible for populating these task relationships. When a client requests a task, the API automatically fetches and appends related task metadata to the response payload. The implementation of this feature lacked adequate authorization boundaries, categorizing the flaw as an Incorrect Authorization issue (CWE-863).

Because the API does not enforce project-level access controls during this hydration phase, an authenticated user can bypass intended data isolation mechanisms. If a task the user is authorized to view possesses a relationship with a task in a restricted, private project, the API will inadvertently disclose the private task's full details in the response.

Root Cause Analysis

The fundamental flaw lies in how the addRelatedTasksToTasks and addBucketsToTasks functions construct database queries to retrieve related entities. During the processing of an API request for a specific task, the application determines which other tasks are linked to the primary object. It then extracts the IDs of these related tasks to perform a subsequent data fetch.

The original implementation executed this secondary fetch by querying the database using only the extracted task IDs in a SQL IN clause. It failed to include a contextual authorization filter to verify if the session's user possessed read permissions for the projects containing those related tasks. This oversight decoupled the data retrieval process from the application's access control model.

By operating strictly on object identifiers without verifying the relationship between the requesting principal and the requested resource, the API effectively created an Insecure Direct Object Reference (IDOR) condition within the hydration routine. The application trusted the existence of the database relationship as an implicit authorization grant, which breaks multi-tenant data boundaries.

Code Analysis

The vulnerability was addressed in commit 833f2aec006ac0f6643c41872e45dd79220b9174 by refactoring the query building process to incorporate database-level authorization constraints. Prior to the patch, the code retrieved related records using an unfiltered query based solely on the task_id array.

The patch introduces the accessibleProjectIDsSubquery function, which dynamically generates a SQL subquery evaluating the requesting user's permissions. This subquery is then appended to the original WHERE clause using an AND condition. This ensures that the database only returns records if the related task resides in a project the user is authorized to view.

The relevant modifications in pkg/models/tasks.go enforce this constraint directly at the data access layer:

// Refactored to use database-level authorization check
buckets := make(map[int64]*Bucket)
err = s.
    Where(builder.In("id", builder.Select("bucket_id").
        From("task_buckets").
        Where(builder.In("task_id", taskIDs)))).
    And(builder.In("project_view_id", builder.Select("id").
        From("project_views").
        Where(accessibleProjectIDsSubquery(a, "project_views.project_id")))). // Database-level filter added here
    Find(&buckets)

By pushing the authorization logic into the SQL query, the application eliminates the possibility of data leakage in memory. If a related task belongs to an unauthorized project, the database simply omits it from the result set, and the API hydration function behaves securely by default.

Exploitation Methodology

Exploiting CVE-2026-33676 requires the attacker to hold a valid, authenticated session on the target Vikunja instance. The attacker must also possess read access to at least one project or task within the system. No administrative privileges or special network positions are necessary to trigger the flaw.

The attacker begins by identifying or establishing a task relationship that crosses project boundaries. If the attacker has permission to modify tasks in their own project, they can create a relation (such as "blocks" or "related to") targeting a specific task ID they suspect exists in a private project. Alternatively, they can target existing tasks that already contain cross-project relationships established by other users.

Once the relationship is established or identified, the attacker issues a standard GET request to the API endpoint for their authorized task (e.g., /api/v1/tasks/{id}). The server processes the request, passes the initial authorization check for the primary task, and proceeds to the vulnerable hydration routine.

The server responds with a JSON payload containing the primary task data along with a populated related_tasks array. This array dumps the full metadata of the target task, exposing fields such as description, due_date, priority, and percent_done. The attacker successfully reads data from a project they explicitly lack authorization to access.

Impact Assessment

The primary impact of CVE-2026-33676 is a substantial breach of data confidentiality. Organizations utilize self-hosted task management platforms to track sensitive internal operations, software development pipelines, and strategic planning. Exposing task descriptions and metadata across unauthorized project boundaries compromises the application's core data isolation guarantees.

The vulnerability carries a CVSS v3.1 base score of 6.5 (CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N). The High confidentiality metric reflects the complete exposure of task data, while the Low privileges metric underscores that any authenticated user, regardless of their role, can execute the attack. The integrity and availability of the application remain unaffected, as the flaw does not permit unauthorized modification or deletion of data.

The Exploit Prediction Scoring System (EPSS) assigns this vulnerability a score of 0.00028, placing it in the 7.746th percentile. This indicates an extremely low probability of automated or mass exploitation in the wild. The primary threat model for this vulnerability involves targeted exploitation by malicious insiders attempting to perform unauthorized horizontal privilege escalation to gather intelligence on restricted internal projects.

Remediation and Mitigation

The definitive remediation for CVE-2026-33676 is updating the Vikunja application to version 2.2.1 or later. The patch provided in pull request #2449 effectively eliminates the vulnerability by enforcing robust project-level authorization checks directly within the database queries responsible for task hydration.

If immediate patching is not technically feasible, administrators cannot reliably mitigate the issue via external mechanisms like Web Application Firewalls (WAFs). The exploitation occurs through legitimate, expected API request structures, making it indistinguishable from benign traffic at the network layer. Disabling the task relations feature entirely, if supported by the configuration, serves as the only viable temporary workaround.

Security and development teams should conduct an audit of application access logs to identify anomalous task retrieval patterns, specifically looking for users querying tasks with known cross-project relations. Furthermore, this vulnerability highlights the architectural necessity of ensuring that Object-Relational Mapping (ORM) and data hydration routines strictly inherit the authorization context of the initiating API request.

Official Patches

VikunjaPull Request #2449 addressing the vulnerability
VikunjaVikunja Release Changelog

Fix Analysis (1)

Technical Appendix

CVSS Score
6.5/ 10
CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:H/I:N/A:N
EPSS Probability
0.03%
Top 92% most exploited

Affected Systems

Vikunja API Server < 2.2.1

Affected Versions Detail

Product
Affected Versions
Fixed Version
Vikunja
go-vikunja
< 2.2.12.2.1
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS v3.1 Score6.5
EPSS Score0.00028
Confidentiality ImpactHigh
Exploit StatusNone
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1068Exploitation for Privilege Escalation
Privilege Escalation
CWE-863
Incorrect Authorization

The software performs an authorization check when an actor attempts to access a resource or perform an action, but it does not correctly perform the check.

Vulnerability Timeline

Fix commit pushed and Pull Request #2449 merged.
2026-03-23
Security advisory GHSA-8cmm-j6c4-rr8v published.
2026-03-24
CVE-2026-33676 published in NVD.
2026-03-24
NVD record last modified.
2026-03-25

References & Sources

  • [1]GitHub Security Advisory GHSA-8cmm-j6c4-rr8v
  • [2]Fix Commit 833f2aec006ac0f6643c41872e45dd79220b9174
  • [3]Fix Pull Request #2449
  • [4]Vikunja Changelog

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

•7 minutes ago•CVE-2026-56681
7.3

CVE-2026-56681: Authentication Bypass via HTTP Header Spoofing in 9Router

CVE-2026-56681 is a high-severity authentication bypass vulnerability in 9Router, an AI router and token-saving proxy. The vulnerability arises from an improper trust boundary where the application relies on the client-controlled HTTP header X-9r-Real-Ip to determine whether an incoming request originates from a local (loopback) environment. In deployments where requests can reach the Next.js backend directly—bypassing the sanitizing custom-server.js wrapper—a remote, unauthenticated attacker can spoof their origin by supplying an X-9r-Real-Ip: 127.0.0.1 header.

Alon Barad
Alon Barad
1 views•6 min read
•about 1 hour ago•CVE-2026-56682
5.3

CVE-2026-56682: Rate Limiter Lockout Bypass via Header Spoofing in 9Router

A rate limiting bypass vulnerability in 9Router versions before 0.5.6 allows unauthenticated remote attackers to circumvent the login progressive lockout mechanism. By manipulating the client-supplied X-9r-Real-Ip HTTP header, an attacker can rotate the tracking IP address, enabling unthrottled brute-force password guessing against the administrative interface.

Alon Barad
Alon Barad
3 views•7 min read
•about 2 hours ago•CVE-2026-58272
5.3

CVE-2026-58272: Username Enumeration via Timing Side-Channel in Sync-in Server

CVE-2026-58272 is a timing side-channel vulnerability in the authentication endpoint of Sync-in Server before version 2.4.1. Unauthenticated remote attackers can distinguish between valid and invalid usernames due to asymmetric execution paths. When processing invalid usernames, the database query returns early, skipping the computationally expensive bcrypt verification path that is normally triggered for valid accounts.

Alon Barad
Alon Barad
4 views•7 min read
•about 3 hours ago•CVE-2026-61612
5.7

CVE-2026-61612: Server-Side Request Forgery Bypass via DNS Resolution in CKAN MCP Server

An input validation bypass in the CKAN MCP Server (NPM package @aborruso/ckan-mcp-server) prior to version 0.4.108 allows remote attackers to perform Server-Side Request Forgery (SSRF). The application's server URL validation mechanism checked hostnames only as literal strings without performing pre-connection DNS resolution. An attacker can bypass these checks using hostnames that resolve to loopback, private, or link-local IP addresses, including the AWS Instance Metadata Service (IMDS). This is the third documented bypass of this protection mechanism, succeeding previous incomplete mitigations in CVE-2026-33060 and CVE-2026-53509.

Alon Barad
Alon Barad
5 views•7 min read
•about 17 hours ago•GHSA-JHJP-4C2Q-XMX4
8.1

GHSA-JHJP-4C2Q-XMX4: Falco k8saudit Plugin Ruleset Bypass via initContainers and ephemeralContainers

A security feature bypass vulnerability in the Falco k8saudit plugin (and its cloud-specific variants) allowed privileged workloads to run undetected. This bypass occurred because the plugin's default extraction logic and rules only evaluated standard containers, completely omitting initContainers and ephemeralContainers.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 18 hours ago•CVE-2026-61630
4.2

CVE-2026-61630: Time-Based One-Time Password (TOTP) Reuse/Replay in nginx-ignition

nginx-ignition is a web-based user interface for managing the Nginx web server. In versions 2.33.0 through 2.35.0, the application is vulnerable to an improper authentication flaw (CWE-287) in its Multi-Factor Authentication (MFA) implementation. The stateless validation of Time-Based One-Time Passwords (TOTP) allows an attacker to reuse a captured, active verification code multiple times within the standard 30-second validity window, successfully bypassing secondary authentication checks if primary credentials are known.

Amit Schendel
Amit Schendel
10 views•5 min read