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



GHSA-2PV8-4C52-MF8J

GHSA-2PV8-4C52-MF8J: Instance-Wide Data Breach via Auth Bypass and IDOR Chain in Vikunja

Amit Schendel
Amit Schendel
Senior Security Researcher

Mar 26, 2026·6 min read·32 visits

Executive Summary (TL;DR)

Chaining an authorization bypass in the link-sharing API and an IDOR in the attachment handler allows an attacker with a read-only link to extract administrative tokens and access arbitrary files across the entire Vikunja instance.

A critical vulnerability chain in the Vikunja task management platform allows unauthenticated or minimally authenticated attackers to perform an instance-wide data breach. By combining a link-share hash disclosure (CVE-2026-33680) with a task attachment IDOR (CVE-2026-33678), attackers can read or delete any file attachment on the system.

Vulnerability Overview

Vikunja is an open-source, self-hosted task management platform that provides collaboration features, including project sharing and file attachments. The platform exposes a REST API to facilitate client-server communication. Two distinct vulnerabilities, identified as CVE-2026-33680 and CVE-2026-33678, reside within this API infrastructure.

CVE-2026-33680 is an Improper Authorization (CWE-285) vulnerability in the link-sharing mechanism. It permits an actor with read-only access to extract the authentication hashes of higher-privileged link shares. CVE-2026-33678 is an Insecure Direct Object Reference (CWE-639) within the task attachment functionality. It allows authenticated users to access arbitrary attachments across the entire instance.

When chained together, these vulnerabilities yield an advisory categorized under GHSA-2PV8-4C52-MF8J. An attacker possessing a single, low-privileged read-only link share can systematically elevate their privileges and compromise the confidentiality and integrity of all file attachments hosted on the Vikunja instance.

Root Cause Analysis

The foundation of the attack relies on architectural inconsistencies within Vikunja's generic Create, Read, Update, Delete (CRUD) handler implementation. The ReadAllWeb handler is responsible for listing collections of objects. This handler neglected to enforce the model-level CanRead() permission check with sufficient granularity for link shares.

In the pkg/models/link_sharing.go module, the ReadAll() method validated access by verifying project.CanRead(s, a). A session established via a link share intrinsically possesses project-level read access, satisfying this preliminary check. Consequently, the API returned the complete list of link shares for the requested project, inadvertently including the secret hash field used as the bearer token for each share.

The second component of the vulnerability chain resides in the task attachment model. The database lookup function for attachments retrieved records based solely on the unique attachment ID. The query execution failed to bind the attachment lookup to the specific task ID provided in the URL path and verified by the authorization layer. This disconnection between the authorized task identifier and the retrieved attachment identifier created the IDOR vulnerability.

Code Analysis

The link-share hash disclosure originates in the ReadAll method. Prior to the patch, the system allowed link-share authenticated users to execute the function without explicit restrictions against listing peer shares. The commit 9efe1fadba817923c7c7f5953c3e9e9c5683bbf3 introduced a hard block for link-share users.

// Vulnerable Implementation
func (l *LinkSharing) ReadAll(s *xorm.Session, a web.Auth) (interface{}, error) {
    // Missing check for link share auth types
    shares := make([]*LinkSharing, 0)
    err := s.Where("project_id = ?", l.ProjectID).Find(&shares)
    return shares, err
}
 
// Patched Implementation (Commit 9efe1fadba817923c7c7f5953c3e9e9c5683bbf3)
func (l *LinkSharing) ReadAll(s *xorm.Session, a web.Auth) (interface{}, error) {
    if _, is := a.(*LinkSharing); is {
        return nil, ErrGenericForbidden{}
    }
    // ... execution continues to fetch shares for valid users
}

Commit 5cd5dc409bfc807f79dac5e4ef4aec54b6efd6e2 further restricted the endpoint by requiring explicit administrator privileges to list project shares. This enforces a principle of least privilege, ensuring standard users cannot enumerate collaboration links.

The attachment IDOR fix required modifying the ReadOne() method to enforce the contextual relationship between the task and the attachment. The patched implementation actively verifies that the TaskID of the retrieved attachment record matches the TaskID specified in the authorized request path, effectively neutralizing the IDOR vector.

Exploitation Chain Methodology

The exploitation process requires the attacker to secure initial access via a valid 'Link Share' URL. This URL is often distributed publicly or semi-publicly for collaboration purposes. Upon obtaining this link, the attacker extracts the bearer token and authenticates against the Vikunja API.

The attacker issues a GET request to /api/v1/projects/{id}/shares. The API response contains an array of all active shares for the project. The attacker parses this JSON response to locate a share object possessing 'Admin' or 'Write' privileges and extracts the associated secret hash string.

Using the extracted high-privileged hash, the attacker configures their API client to use the new bearer token. They now have complete administrative control over the targeted project. The attacker selects a valid task ID within this project to satisfy the preliminary TaskAttachment permission check.

The attacker initiates a loop, issuing GET and DELETE requests to /api/v1/tasks/{validTaskId}/attachments/{targetAttachmentId}. They increment the targetAttachmentId integer sequentially. The application validates that the attacker has access to {validTaskId}, but serves the file corresponding to {targetAttachmentId}, allowing the extraction or destruction of all files across the platform.

Impact Assessment

The chained execution of CVE-2026-33680 and CVE-2026-33678 results in an instance-wide data breach. The primary impact is a severe loss of confidentiality. An attacker can systematically download every file attachment uploaded to the Vikunja server, bypassing all project and user isolation boundaries.

The secondary impact involves a total loss of integrity for the stored attachments. The authorization bypass extends to file deletion mechanisms. An attacker can issue HTTP DELETE requests using the same sequential IDOR technique to permanently remove attachments from the server's storage backend and database.

The vulnerability requires minimal prerequisites. The attacker only needs a single valid link share, which requires no registered user account on the target system. The attack complexity is low, and the process can be fully automated using standard HTTP client libraries, maximizing the potential for rapid data exfiltration before detection.

Remediation and Mitigation

The vendor addressed both vulnerabilities in a sequence of rapid patches. Version 2.2.1 implemented the initial mitigation by directly blocking link-share authenticated callers from accessing the ReadAll() endpoint for project shares. This version also corrected the database query logic in TaskAttachment.ReadOne() to enforce task-ID binding.

Version 2.2.2 introduced structural security hardening. The backend was updated to strictly require project-level administration rights to list link shares. Additionally, commit 74d1bddb3ab32fc8983d778bb65e89b1d50227d6 implemented client-side visibility controls, completely hiding the sharing section in the user interface for non-administrative accounts.

Administrators must update their Vikunja deployments to version 2.2.2 or later immediately. Organizations unable to patch immediately should disable the link-sharing feature entirely or restrict network access to the API endpoints using a Web Application Firewall. Existing link shares should be audited and revoked if suspicious access patterns are detected in the application logs.

Official Patches

VikunjaVikunja Changelog for v2.2.2

Fix Analysis (3)

Technical Appendix

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

Affected Systems

Vikunja API < 2.2.2Vikunja Frontend < 2.2.2

Affected Versions Detail

Product
Affected Versions
Fixed Version
Vikunja
Vikunja
< 2.2.12.2.1
Vikunja
Vikunja
< 2.2.22.2.2
AttributeDetail
CWE IDCWE-285, CWE-639
Attack VectorNetwork
CVSS Score8.1
ImpactHigh Confidentiality, High Integrity
Exploit Statusweaponized
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1190Exploit Public-Facing Application
Initial Access
T1068Exploitation for Privilege Escalation
Privilege Escalation
T1212Exploitation for Credential Access
Credential Access
CWE-639
Authorization Bypass Through User-Controlled Key

Improper Authorization and Insecure Direct Object Reference

Vulnerability Timeline

Initial patch released in v2.2.1.
2026-03-23
Full mitigation and security hardening released in v2.2.2.
2026-03-23
Official CVE identifiers CVE-2026-33680 and CVE-2026-33678 published.
2026-03-24

References & Sources

  • [1]GitHub Advisory: GHSA-2PV8-4C52-MF8J
  • [2]Link Share Disclosure Advisory
  • [3]Attachment IDOR Advisory
Related Vulnerabilities
CVE-2026-33680CVE-2026-33678

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

•2 days ago•CVE-2026-16454
4.3

CVE-2026-16454: Object-Level Authorization Bypass in Eclipse hawkBit Direct Device Integration Controller

CVE-2026-16454 is an object-level authorization bypass vulnerability (CWE-284, CWE-862) in Eclipse hawkBit versions 1.0.3 and prior. The flaw exists within the Direct Device Integration (DDI) REST controller (hawkbit-ddi-resource), where endpoints responsible for enumerating software module metadata and serving firmware binaries fail to verify whether the requested software module is assigned to the authenticated device. Consequently, any device with valid credentials (such as a TargetToken or GatewayToken) can enumerate software module identifiers and download arbitrary firmware artifacts across the entire tenant namespace.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•CVE-2026-62284
8.6

CVE-2026-62284: Remote Code Execution and SSRF via Unsanitized Kubeconfig in OSAC Operator

CVE-2026-62284 (GHSA-5w5g-j6hw-6p8f) is a code injection and server-side request forgery vulnerability in the console-proxy component of the OSAC Operator. The RemoteConfigResolver parses Kubernetes Secrets containing kubeconfig files via clientcmd.RESTConfigFromKubeConfig without sanitizing execution-related fields. An attacker with RBAC permissions to create or modify labeled Secrets in monitored namespaces can supply a malicious exec credential plugin, resulting in arbitrary command execution within the console-proxy pod.

Amit Schendel
Amit Schendel
8 views•8 min read
•2 days ago•CVE-2026-62361
5.5

CVE-2026-62361: Authenticated SQL Injection and Table Access Control Bypass in Listmonk Subscriber Export

CVE-2026-62361 (GHSA-xgjr-7j9q-2h4r) is an authenticated SQL injection and authorization bypass vulnerability in listmonk, an open-source, self-hosted newsletter and mailing list manager written in Go. In versions prior to 6.2.0, the subscriber export endpoint (GET /api/subscribers/export) directly interpolates user-supplied SQL filter expressions into a PostgreSQL query without invoking the table allowlist validation function (validateQueryTables). Consequently, authenticated users possessing the subscribers:sql_query and subscribers:get_all permissions can bypass relational access controls, execute arbitrary subqueries against restricted tables such as users and settings, and modify database state via writable Common Table Expressions (CTEs).

Alon Barad
Alon Barad
9 views•11 min read
•2 days ago•CVE-2026-28385
5.0

CVE-2026-28385: Server-Side Request Forgery in Canonical LXD Image Import

CVE-2026-28385 (GHSA-3gq2-x4qg-p4g6) is a Server-Side Request Forgery (SSRF) vulnerability in Canonical LXD versions 4.12 through 6.9. An authenticated user possessing the can_create_images entitlement can force the LXD daemon to execute arbitrary outbound HTTP and HTTPS requests via the /1.0/images API endpoint. Due to the absence of egress destination validation, an attacker can probe host loopback services, RFC 1918 private network segments, and cloud Instance Metadata Services (IMDS) from the network position of the privileged LXD daemon.

Amit Schendel
Amit Schendel
10 views•9 min read
•2 days ago•GHSA-9J25-MM2H-2F76
9.9

CVE-2026-48750: Arbitrary File Write on Host via exec-output Symlink in Canonical LXD and Incus

Canonical LXD and LXC Incus contain an arbitrary file write vulnerability (CWE-73 / CWE-59) in the `/1.0/instances/<name>/exec` REST API endpoint. When an instance is unpacked from an image archive, top-level symbolic links are extracted directly onto the host filesystem within the instance storage directory. If a crafted image includes a symbolic link named `exec-output` pointing to an arbitrary host path, invoking the execution endpoint with `record-output: true` causes the privileged host daemon to follow the symlink and write command output files directly to the target host directory. An authenticated attacker with permissions to import images and execute commands can exploit this flaw to write controlled content to sensitive host directories such as `/etc/cron.d`, resulting in arbitrary code execution on the host as `root`.

Alon Barad
Alon Barad
8 views•12 min read
•2 days ago•GHSA-VGHH-5RFX-XHQ8
9.9

CVE-2026-48749: Arbitrary Host File Read and Write via Malicious Image Symlink in Canonical LXD and Incus

CVE-2026-48749 (tracked as GHSA-vghh-5rfx-xhq8 for LXD and GHSA-2q3f-q5pq-g8wv for Incus) is a critical container escape vulnerability in the Canonical LXD and Linux Containers Incus system container managers. By importing a specially crafted container image archive containing duplicate tar member headers, an authenticated attacker can replace the instance rootfs directory with a symbolic link pointing to the underlying host root filesystem. When performing file operations on a stopped container, the privileged forkfile helper binary resolves the symbolic link without confinement and chroots directly into the host filesystem, granting arbitrary root-level file read and write access.

Amit Schendel
Amit Schendel
8 views•9 min read