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

CVE-2026-33312: Broken Object-Level Authorization (BOLA) in Vikunja Project Background Deletion

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 20, 2026·6 min read·116 visits

Executive Summary (TL;DR)

A medium-severity Incorrect Authorization flaw in Vikunja allows users with read-only access to permanently delete project background images via a crafted API request. The backend incorrectly checks for read permissions rather than update permissions during the deletion process.

Vikunja versions 0.20.2 through 2.1.x suffer from a Broken Object Level Authorization (BOLA) vulnerability. The application fails to properly validate permissions on the project background deletion endpoint, allowing users with only read access to permanently delete background images. The vulnerability is fixed in version 2.2.0.

Vulnerability Overview

Vikunja is an open-source, self-hosted task management platform that allows teams to organize projects, tasks, and schedules. The platform utilizes a role-based access control (RBAC) system to restrict user actions based on their assigned permissions within specific projects. These permissions dictate whether a user can read, write, or update project properties, including aesthetic settings like background images.

CVE-2026-33312 identifies a Broken Object Level Authorization (BOLA) vulnerability within the project background management module. The vulnerability exists in the API endpoint responsible for deleting project background images. Due to a flaw in the permission validation logic, the endpoint fails to require the appropriate update privileges before executing the deletion operation.

This flaw allows users with explicitly read-only access to permanently delete project background images. The vulnerability affects Vikunja versions 0.20.2 through 2.1.x and is tracked under the primary weakness enumeration CWE-863: Incorrect Authorization. The issue exposes a direct bypass of the intended project authorization boundaries.

Root Cause Analysis

The root cause of CVE-2026-33312 lies in the reuse of a permission validation helper function across disparate HTTP methods. The backend Go implementation handles background deletion via the RemoveProjectBackground function, located in the pkg/modules/background/handler/background.go file. This handler processes incoming DELETE requests to the /api/v1/projects/:project/background endpoint.

To authorize the request, the handler invokes a shared helper function named checkProjectBackgroundRights. This helper was originally designed to validate access for the GET endpoint, which retrieves the background image. Consequently, the function only verifies that the requesting user holds CanRead permissions for the specified project object.

When processing a DELETE request, the backend performs a destructive operation that removes the file from the storage backend and nullifies the background_file_id and background_blur_hash database fields. Because the RemoveProjectBackground handler relies on the flawed helper function, it approves the destructive action for any user possessing mere CanRead access. The system fails to enforce the CanUpdate or CanWrite constraints required for state-altering requests.

Code Analysis

The vulnerability stems from the authorization check within the RemoveProjectBackground function. The unpatched implementation queries the user's rights using a read-focused validation check. When the check passes, the application proceeds to execute the database update and file system deletion without further scrutiny.

// Vulnerable Implementation (Conceptual)
func RemoveProjectBackground(c web.Context) error {
    projectID := c.Param("project")
    
    // Flaw: checkProjectBackgroundRights only requires CanRead access
    err := checkProjectBackgroundRights(c, projectID)
    if err != nil {
        return err
    }
    
    // Destructive operations proceed...
    err = deleteBackgroundFile(projectID)
    err = updateProjectDatabase(projectID, nil, nil)
    return err
}

The fix introduced in version 2.2.0 addresses this by explicitly requiring update permissions. The authorization logic was refactored to differentiate between read operations and destructive operations. The patched handler now correctly mandates CanUpdate rights before allowing the deletion sequence to initiate.

// Patched Implementation (Conceptual)
func RemoveProjectBackground(c web.Context) error {
    projectID := c.Param("project")
    
    // Fix: Explicitly check for CanUpdate or CanWrite permissions
    err := checkProjectUpdateRights(c, projectID)
    if err != nil {
        return web.ErrForbidden("Insufficient permissions to modify project background")
    }
    
    // Destructive operations proceed...
    err = deleteBackgroundFile(projectID)
    err = updateProjectDatabase(projectID, nil, nil)
    return err
}

Exploitation Methodology

Exploitation of CVE-2026-33312 requires low technical complexity and relies on standard HTTP clients. The attacker must first identify the target project ID, which is visible in the application URL or API responses during normal interaction. The attacker also requires a valid authentication token, cookie, or link share that grants read-only access to the target project.

The attacker constructs a manual HTTP DELETE request targeting the project background endpoint. The request includes the read-only authorization bearer token in the headers. Because the backend authorization logic only checks for read access, the server accepts the request as valid and authorized.

curl -X DELETE "https://vikunja.example.com/api/v1/projects/{project_id}/background" \
     -H "Authorization: Bearer <read_only_token>"

Upon receiving the request, the server returns an HTTP 200 OK status. The background image is permanently removed from the storage backend, and the associated metadata is cleared from the database. This manipulation occurs entirely within the context of a low-privileged session, demonstrating a clear Broken Object Level Authorization (BOLA) attack path.

Impact Assessment

The security impact of this vulnerability is strictly categorized as a low-level integrity compromise. The attacker successfully modifies the state of the application by forcing the deletion of asset files and database records. The CVSS 4.0 vector CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N accurately reflects this scope, yielding a base score of 5.3.

The vulnerability does not allow attackers to read sensitive data, modify core task information, or execute arbitrary code. The impact is limited to the aesthetic configuration of the target project. However, the flaw exposes a significant architectural gap in the application's authorization implementation, highlighting the risks of reusing read-focused validation handlers for write or delete operations.

While the immediate consequence is confined to background images, BOLA vulnerabilities of this nature often indicate broader access control issues. The attack requires no user interaction and operates seamlessly over the network. Organizations relying on strict role separation for project visibility and management are directly affected by this permission boundary violation.

Remediation and Mitigation

The primary remediation for CVE-2026-33312 is to upgrade the Vikunja application to version 2.2.0 or later. The go-vikunja maintainers have implemented a complete patch that correctly enforces CanUpdate permissions on the DELETE /api/v1/projects/:project/background endpoint. Administrators should deploy this update to all self-hosted instances immediately.

For organizations unable to apply the patch immediately, interim mitigations are limited due to the inherent nature of the vulnerability. Administrators can temporarily restrict the creation of read-only link shares and audit existing read-only team memberships. Reducing the pool of users with read access to sensitive projects minimizes the potential attack surface.

Security teams should also implement monitoring for anomalous DELETE requests targeting the background API endpoints. High volumes of deletion requests from users with explicitly restricted roles indicate potential exploitation attempts. Organizations utilizing Web Application Firewalls (WAFs) can create rules to alert on or block these specific requests originating from untrusted network segments.

Official Patches

go-vikunjaGitHub Security Advisory
go-vikunjaVikunja v2.2.0 Release Changelog

Technical Appendix

CVSS Score
5.3/ 10
CVSS:4.0/AV:N/AC:L/AT:N/PR:L/UI:N/VC:N/VI:L/VA:N/SC:N/SI:N/SA:N

Affected Systems

Vikunja API BackendVikunja Project Management Module

Affected Versions Detail

Product
Affected Versions
Fixed Version
Vikunja
go-vikunja
>= 0.20.2, < 2.2.02.2.0
AttributeDetail
CWE IDCWE-863
Attack VectorNetwork
CVSS v4.05.3 (Medium)
ImpactLow Integrity
Exploit StatusProof of Concept
CISA KEVFalse

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

Vulnerability publicly disclosed and CVE-2026-33312 assigned
2026-03-20
Security advisory GHSA-564f-wx8x-878h published
2026-03-20
Fix released in Vikunja version 2.2.0
2026-03-20

References & Sources

  • [1]GHSA-564f-wx8x-878h Advisory
  • [2]Vikunja Changelog (v2.2.0)
  • [3]CVE-2026-33312 Details

More Reports

•42 minutes ago•CVE-2026-118670
8.8

CVE-2026-118670: DOM-Based Cross-Site Scripting in OHIF Viewers dicom-pdf Extension

CVE-2026-118670 (GHSA-xwgp-w3pj-q5h3) is a high-severity DOM-based Cross-Site Scripting (XSS) vulnerability in OHIF Viewers affecting the dicom-pdf extension module. When processing DICOM Encapsulated Document objects, the viewer extracts the untrusted MIMETypeOfEncapsulatedDocument attribute (tag 0042,0012) and uses it directly to instantiate an in-memory Blob. This Blob is then converted to a same-origin Object URL and embedded into the document via an HTML <object> element. Because browsers prioritize the resource's underlying MIME type over the <object> element's type attribute, an attacker who supplies a crafted DICOM file with a MIME type such as text/html can execute arbitrary JavaScript within the application's origin, compromising session tokens, local storage, and Patient Health Information (PHI).

Alon Barad
Alon Barad
1 views•9 min read
•about 2 hours ago•CVE-2026-103022
5.3

CVE-2026-103022: Denial of Service via Unhandled Unicode Exception and File Descriptor Leak in Urwid Web Display

A Denial of Service (DoS) vulnerability exists in the web display module (urwid/display/web.py) of the Urwid console user interface library for Python in versions prior to 4.0.7. The handle_short_request() function unconditionally encodes HTTP POST input as ASCII without exception handling and opens a FIFO pipe file descriptor without a guaranteed cleanup block. Submitting non-ASCII characters triggers an unhandled UnicodeEncodeError that terminates CGI request processing and leaks the open file descriptor. Additionally, the screen update polling routine decodes Unix domain socket streams iteratively as UTF-8 without exception handling or deterministic socket closure, enabling uncaught UnicodeDecodeError exceptions and socket leaks.

Alon Barad
Alon Barad
3 views•10 min read
•about 3 hours ago•CVE-2026-115770
9.6

CVE-2026-115770: Email Verification Bypass and Downstream Account Takeover in Pocket ID

CVE-2026-115770 is a critical vulnerability (CVSS 9.6) in Pocket ID, an OpenID Connect (OIDC) provider that uses passkey authentication. In versions 2.2.0 through 2.11.0, email verification tokens are bound exclusively to the user account identifier (user_id) rather than the specific email address for which the token was issued. In addition, updating the account email address does not invalidate existing verification tokens. An authenticated user can request a verification token for an attacker-controlled address, modify their profile email to an arbitrary unverified target address, and redeem the previously issued token. This marks the target email address as verified (email_verified = true), enabling account takeover on downstream OIDC relying parties that link or provision accounts based on verified email claims.

Alon Barad
Alon Barad
2 views•11 min read
•about 4 hours ago•CVE-2026-102895
9.8

CVE-2026-102895: Unauthenticated Administrative Access and Remote Code Execution via Loopback Spoofing in GPUStack

CVE-2026-102895 is an improper authentication and origin validation vulnerability in GPUStack versions prior to 2.2.0. By default, the API authentication dependency in gpustack/api/auth.py grants built-in administrator privileges to unauthenticated requests resolved as originating from 127.0.0.1 when the force_auth_localhost flag is false. Because client IP resolution trusts same-host reverse proxy TCP peers and unvalidated X-GPUStack-Real-IP headers, remote unauthenticated attackers can bypass authentication, obtain full administrative control, extract sensitive credentials, and achieve remote code execution via the /v2/inference-backends/from-yaml endpoint.

Alon Barad
Alon Barad
4 views•9 min read
•about 5 hours ago•CVE-2026-87008
7.1

CVE-2026-87008: Out-of-Root Arbitrary File Read and Overwrite via Symlink Following in code-graph-rag

CVE-2026-87008 (GHSA-85gg-2gfq-q95m) is a high-severity symbolic link following and path traversal vulnerability in the `code-graph-rag` Python package prior to version 0.0.589. The flaw resides in the `should_skip_path` path validation routine inside `codebase_rag/utils/path_utils.py`, which performs directory containment checks using unresolved lexical paths rather than canonicalized filesystem paths. Consequently, symbolic links committed to an untrusted repository that point to targets outside the project root bypass boundary enforcement. Attackers who supply a crafted repository containing symbolic links can leverage the `AstGrepService` tool (`structural_search` and `structural_replace`) to read or overwrite arbitrary files on the host filesystem within the privileges of the running process.

Alon Barad
Alon Barad
4 views•9 min read
•about 6 hours ago•CVE-2026-94618
5.4

CVE-2026-94618: Missing Authorization and Weak Archive Identifier Generation in FileGator Batch Download

FileGator versions prior to 7.15.0 contain a missing authorization check (CWE-862) and predictable identifier generation flaw (CWE-330) in the batch download implementation. When a user initiates a batch download, FileGator generates a temporary ZIP archive identified by PHP's non-cryptographic uniqid() function without binding the resulting identifier to the creating user's session. Consequently, any authenticated user with read, download, and batchdownload permissions who obtains or predicts an active archive identifier can retrieve another user's private files via GET /batchdownload, bypassing per-user home directory isolation and deleting the victim's temporary archive upon download completion.

Alon Barad
Alon Barad
4 views•10 min read