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·57 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

•about 1 hour ago•CVE-2026-48861
2.1

CVE-2026-48861: HTTP Request Splitting and Smuggling via Method Parameter CRLF Injection in Elixir Mint

CVE-2026-48861 is a client-side HTTP request-line CRLF (Carriage Return Line Feed) injection vulnerability in the popular Elixir HTTP client library, Mint. The vulnerability permits HTTP Request Splitting and HTTP Request Smuggling when an application forwards untrusted, attacker-controlled inputs to Mint's HTTP client requests as either the HTTP request method or target. By embedding CRLF characters within these parameters, an attacker can terminate the request line prematurely, inject malicious headers, or pipeline entirely independent requests. These smuggled requests are then processed by upstream or downstream proxy servers as separate HTTP queries on the same TCP connection. While Mint version 1.7.0 introduced target validation to secure the request target, the HTTP request method parameter remained completely unvalidated. This flaw allows attackers to bypass routing filters, access restricted internal APIs, or poison HTTP caches under default configurations.

Amit Schendel
Amit Schendel
3 views•7 min read
•about 2 hours ago•CVE-2026-49753
6.3

CVE-2026-49753: HTTP Request/Response Smuggling via Inconsistent Content-Length Parsing in Elixir Mint Client

An Inconsistent Interpretation of HTTP Requests (HTTP Request/Response Smuggling) vulnerability in the Elixir Mint HTTP client allows attacker-controlled HTTP/1 servers to desynchronize response framing on shared connections due to over-lenient parsing of sign-prefixed Content-Length headers.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 2 hours ago•CVE-2026-49754
8.2

CVE-2026-49754: Denial of Service via Unbounded HTTP/2 CONTINUATION Frame Accumulation in Elixir Mint

An allocation of resources without limits or throttling vulnerability in Elixir Mint allows an attacker-controlled HTTP/2 server to exhaust memory in a Mint client. The vulnerability is exploited by sending a HEADERS frame without the END_HEADERS flag followed by an infinite stream of CONTINUATION frames. Because the client lacks limits on the incoming header-block accumulator, the client continuously consumes memory until an out-of-memory crash occurs.

Amit Schendel
Amit Schendel
6 views•6 min read
•about 3 hours ago•CVE-2026-48596
2.1

CVE-2026-48596: Improper Neutralization of CRLF Sequences in Elixir Tesla Multipart HTTP Client

CVE-2026-48596 is an Improper Neutralization of CRLF Sequences in HTTP Headers (HTTP Request/Response Splitting, CWE-113) in the Elixir Tesla HTTP client. The flaw resides in how multipart content-type parameters are joined and serialized, enabling attackers to inject arbitrary headers or split HTTP requests when applications pass untrusted inputs to the parameters of multipart uploads.

Alon Barad
Alon Barad
4 views•6 min read
•about 3 hours ago•CVE-2026-48594
8.2

CVE-2026-48594: Decompression Bomb Denial of Service in Elixir Tesla HTTP Client

An improper handling of highly compressed data (decompression bomb) vulnerability exists in the Elixir Tesla HTTP client when utilizing response decompression middlewares. By serving highly compressed responses or stacked content-encoding headers, a malicious server can cause arbitrary heap exhaustion, leading to a denial of service (DoS) crash in the BEAM virtual machine.

Amit Schendel
Amit Schendel
5 views•6 min read
•about 4 hours ago•CVE-2026-48595
8.2

CVE-2026-48595: Cross-Origin Credential Leakage in Elixir Tesla Client via Case-Sensitive Redirect Filter Bypass

A high-severity security vulnerability in Elixir's Tesla HTTP client library (CVE-2026-48595) allows unauthenticated remote attackers to harvest sensitive credentials, including Authorization headers and cookies. The flaw resides in the 'Tesla.Middleware.FollowRedirects' component, which performs case-sensitive lookups when stripping credentials during cross-origin redirects. Because HTTP headers are case-insensitive by RFC specifications, standard canonical casing (e.g., 'Authorization') bypasses the lowercase-only blocklist, leaking tokens to untrusted external redirect destinations.

Alon Barad
Alon Barad
5 views•5 min read