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

CVE-2026-47716: Broken Object Level Authorization in Bugsink Bulk Issue Actions

Amit Schendel
Amit Schendel
Senior Security Researcher

Jun 6, 2026·6 min read·4 visits

Executive Summary (TL;DR)

Bugsink before 2.2.0 allows authenticated users to execute bulk actions (such as resolving or muting issues) on cross-project issues by supplying unauthorized issue UUIDs in POST requests.

Bugsink prior to version 2.2.0 is vulnerable to Broken Object Level Authorization (BOLA). The issue list view authorizes access based on the project in the URL path but applies requested bulk actions to submitted issue UUIDs globally, without verifying project ownership.

Vulnerability Overview

Bugsink serves as a self-hosted, Sentry-compatible error tracking server designed to centralize and manage application exceptions. The core interface organizes diagnostic errors into distinct projects to maintain administrative isolation between different software components. Access control rules are evaluated at the project level to restrict users to specific issue trackers.

The vulnerability is located within the issue list controller that processes bulk operations such as resolving, muting, or deleting issues. While standard read operations validate the user's project association via the URL path, the endpoint responsible for updating multiple issues fails to extend this project-level validation to the individual issue records specified in the request payload.

This architectural oversight introduces an Insecure Direct Object Reference (IDOR) flaw, classified under CWE-639. An authenticated attacker who possesses access to a single project can submit state-changing actions containing identifiers of issues belonging to projects for which they lack authorization.

Root Cause Analysis

The root cause of this vulnerability lies in the unconstrained database queries performed during bulk state modifications. In Bugsink, issues are modeled with a direct database relationship to their parent projects. When a user submits a bulk action POST request, the application relies on the _issue_list_pt_1 controller in issues/views.py to fetch and update the target records.

In vulnerable versions, the application parses a list of issue identifiers from the issue_ids[] POST parameter. The backend then constructs a Django Object-Relational Mapping (ORM) query using Issue.objects.filter(pk__in=issue_ids) to retrieve the target issue instances. This query is executed globally across the entire database without any conditional scoping to the parent project.

Although the parent routing controller validates the user's authorization against the project identifier parsed from the HTTP request path, it does not confirm that the retrieved issues belong to that specific project. The database layer executes the bulk modification on all matching primary keys, bypassing the logical boundary established at the application layer.

Code Analysis

To understand the scope of the vulnerability, we analyze the implementation of the inner view function _issue_list_pt_1 in issues/views.py. The vulnerable iteration of this function extracts the client-supplied issue identifiers and queries the database globally.

# Vulnerable implementation in issues/views.py
def _issue_list_pt_1(request, project, state_filter="open"):
    if request.method == "POST":
        # Extracts the raw client-supplied array of issue UUIDs
        issue_ids = request.POST.getlist('issue_ids[]')
        
        # UNCONSTRAINED QUERY: No verification that these issues belong to 'project'
        issue_qs = Issue.objects.filter(pk__in=issue_ids)
        
        illegal_conditions = _q_for_invalid_for_action(request.POST["action"])
        # Bulk modification operations proceed on issue_qs

The patch introduces strict scoping by forcing the Django ORM to filter the queried issues by both the validated project context and the deletion status of the records. This ensures that even if an attacker injects unauthorized issue UUIDs, the database query filters them out during the lookup phase.

# Patched implementation in issues/views.py (v2.2.0)
def _issue_list_pt_1(request, project, state_filter="open"):
    if request.method == "POST":
        issue_ids = request.POST.getlist('issue_ids[]')
        
        # SCOPED QUERY: Added project constraint and is_deleted check
        issue_qs = Issue.objects.filter(project=project, is_deleted=False, pk__in=issue_ids)
        
        illegal_conditions = _q_for_invalid_for_action(request.POST["action"])
        # Bulk modification operations now apply only to validated issues

Additionally, the regression tests added in the patch confirm this behavior by instantiating two projects and validating that a bulk action target referencing the second project from the context of the first project does not execute. The test asserts that the foreign issue remains unresolved after the request.

Exploitation Methodology

Exploitation of this vulnerability requires the attacker to satisfy two principal conditions. First, the attacker must have a valid session and belong to at least one active project within the target Bugsink instance. Second, the attacker must obtain the 128-bit Universally Unique Identifier (UUID) of the target issue belonging to the unauthorized project.

Because UUIDv4 identifiers contain 122 bits of entropy, brute-force enumeration of issue IDs is computationally infeasible. An attacker must gather these identifiers through secondary channels, such as leaked application logs, collaborative chat notifications, webhook payloads, or shared diagnostic links.

Once a target UUID is acquired, the attacker intercepts a bulk action request targeting their authorized project. By replacing the values in the issue_ids[] array with the target cross-project UUID and transmitting the request, the attacker triggers the modification. The server returns a status code of 200, and the database status of the target issue is updated globally.

Impact Assessment

The primary security impact of this vulnerability is the unauthorized modification of resource metadata across logical tenant boundaries. An attacker can resolve, mute, or transition issues belonging to other projects, potentially leading to missed critical alerts and diagnostic blind spots for development teams.

The CVSS v3.1 base score is calculated as 3.1, indicating a low-severity threat. The score reflects high attack complexity due to the requirement of obtaining specific issue UUIDs, and low privileges required because the attacker must hold valid credentials to at least one project. The impact is limited strictly to integrity, as the vulnerability does not disclose confidential issue data or allow arbitrary code execution.

The Exploit Prediction Scoring System (EPSS) rating of 0.00029 aligns with the low probability of automated exploitation in the wild. This vulnerability is not listed in the CISA Known Exploited Vulnerabilities (KEV) catalog, and there are no public reports of weaponized exploits.

Remediation and Mitigation

The definitive remediation is upgrading the Bugsink deployment to version 2.2.0 or later. This release ensures that all bulk operations evaluate database queries within the confines of the validated project context. Administrators can apply this update by upgrading the container image or updating the PyPI dependency.

If immediate patching is not possible, organizations should implement strict access control policies to minimize the exposure of issue UUIDs. Since exploitation requires knowing these identifiers, limiting the integration of Bugsink notifications into shared channels reduces the risk of credential leakage.

Additionally, implementing network-level access controls and monitoring application logs for anomalous POST requests can help detect unauthorized activity. Security teams should inspect logs for instances where users submit bulk modifications with ID counts that do not align with their typical activity patterns.

Technical Appendix

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

Affected Systems

Bugsink

Affected Versions Detail

Product
Affected Versions
Fixed Version
Bugsink
Bugsink
< 2.2.02.2.0
AttributeDetail
CWE IDCWE-639
Attack VectorNetwork (AV:N)
CVSS Score3.1
EPSS Score0.00029
ImpactLow Integrity (I:L)
Exploit StatusNone (no public exploits)
KEV StatusNot Listed
CWE-639
Authorization Bypass Through User-Controlled Key

Vulnerability Timeline

Patch merged into master repository
2026-05-19
Bugsink version 2.2.0 released
2026-05-19
GitHub Security Advisory GHSA-g5vc-q7qc-v939 published
2026-05-26

References & Sources

  • [1]https://github.com/bugsink/bugsink/security/advisories/GHSA-g5vc-q7qc-v939
  • [2]https://github.com/bugsink/bugsink/releases/tag/2.2.0
  • [3]https://github.com/bugsink/bugsink/commit/1a98424a87cc95bdb9b2ee3acfc86c0ee67db139
  • [4]https://www.cve.org/CVERecord?id=CVE-2026-47716

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

•about 1 hour ago•CVE-2026-47760
8.7

CVE-2026-47760: Cross-Site Scripting (XSS) via SVG Namespace Sanitizer Bypass in TinyMCE

TinyMCE versions 6.8.0 through 7.0.1 contain a high-severity Cross-Site Scripting (XSS) vulnerability. The flaw exists in the custom HTML parser and sanitizer module, which incorrectly manages SVG namespace scopes when parsing nested elements. A low-privileged or unauthenticated attacker can submit a crafted HTML payload containing nested SVG structures to bypass sanitization filters, leading to arbitrary JavaScript execution in the context of the victim's browser session.

Alon Barad
Alon Barad
6 views•7 min read
•about 2 hours ago•CVE-2026-47759
8.7

CVE-2026-47759: Stored Cross-Site Scripting (XSS) via Unsanitized data-mce-* Serialization Bypass in TinyMCE

CVE-2026-47759 is a critical stored Cross-Site Scripting (XSS) vulnerability affecting multiple active branches of the TinyMCE rich text editor. The flaw resides in the editor's handling of user-controlled, prefixed internal attributes, such as data-mce-href, data-mce-src, and data-mce-style. When processing raw HTML inputs, TinyMCE's internal validation schema neglects to inspect these custom prefixed attributes. During HTML serialization, the editor's engine extracts these unsanitized values and copies them back into standard executable attributes, overwriting any previously sanitized standard values and leading to execution of arbitrary code.

Amit Schendel
Amit Schendel
6 views•7 min read
•about 2 hours ago•CVE-2026-47762
8.7

CVE-2026-47762: Stored Cross-Site Scripting (XSS) in TinyMCE Protect Pattern Restoration

A high-severity stored Cross-Site Scripting (XSS) vulnerability was identified in the TinyMCE rich text editor. The flaw exists in the handling of the 'protect' configuration option, where forged placeholder comments containing malicious payloads bypass the editor's sanitization routines and execute arbitrary JavaScript during serialization and content restoration.

Amit Schendel
Amit Schendel
6 views•8 min read
•about 3 hours ago•CVE-2026-47742
6.5

CVE-2026-47742: Missing Authorization and Client-Side Property Tampering in Shopper E-commerce Panel

An authorization bypass and client-side property tampering vulnerability (CVE-2026-47742) in the Shopper headless admin panel (built on Laravel and Livewire) allows low-privileged users to modify arbitrary product records (Insecure Direct Object Reference). This occurs due to unlocked public model properties and a complete lack of access control checks on mutating sub-form store methods.

Amit Schendel
Amit Schendel
6 views•5 min read
•about 3 hours ago•CVE-2026-47745
6.5

CVE-2026-47745: Missing Authorization in Shopper Admin Panel Settings

Shopper is an open-source headless e-commerce administration panel built on Laravel, Livewire, and Filament. Prior to version 2.8.0, the admin tables for PaymentMethods, Currencies, and Carriers exposed inline toggles and per-record actions that could be modified by any authenticated user without verifying the corresponding administrative permissions on the backend.

Alon Barad
Alon Barad
5 views•6 min read
•about 4 hours ago•CVE-2026-47715
3.1

CVE-2026-47715: Insecure Direct Object Reference (IDOR) / Cross-Project Authorization Bypass in Bugsink

An Insecure Direct Object Reference (IDOR) vulnerability in Bugsink (versions < 2.2.0) allows authenticated users with access to at least one project to view sensitive event details (including stack traces, local/environment variables, and execution breadcrumbs) belonging to other projects, by supplying a known event UUID directly to the issue event URL paths.

Alon Barad
Alon Barad
4 views•7 min read