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-5X67-J5XG-C5GJ

GHSA-5X67-J5XG-C5GJ: Denial of Service via Uncontrolled Resource Consumption in Bugsink Ingestion Pipeline

Alon Barad
Alon Barad
Software Engineer

Jun 5, 2026·6 min read·43 visits

Executive Summary (TL;DR)

Unbounded metadata tag processing in Bugsink allows unauthenticated users with a valid Project DSN to exhaust database write resources, resulting in a denial of service.

Bugsink, a Sentry-compatible self-hosted error tracker written in Python and Django, is vulnerable to a denial of service (DoS) in versions up to and including 2.2.1. The system's ingestion pipeline historically processed every metadata tag supplied with an incoming error event without bounding the maximum number of tags. Because database writes are serialized in Bugsink's typical single-writer architecture, a single event payload carrying an excessive number of tags can monopolize the database write lock, halting event processing for all other users.

Vulnerability Overview

Bugsink is an open-source, Sentry-compatible error tracking platform written in Python and Django. To minimize operational complexity, Bugsink is typically deployed in single-server configurations using a SQLite database backend. This architecture relies on a single-writer pattern where only one database transaction can write to the database file at any given moment.

In Sentry-compatible environments, client applications submit runtime errors accompanied by custom metadata key-value pairs referred to as tags. The vulnerability tracked under GHSA-5X67-J5XG-C5GJ is an uncontrolled resource consumption issue within Bugsink's error ingestion pipeline. Specifically, the system attempts to process and save every metadata tag present within an incoming event payload without imposing a maximum limit on the tag count.

An attacker who possesses a valid project Data Source Name (DSN) can exploit this lack of validation by sending a single, crafted error event containing an excessively large list of tags. This triggers a high volume of serialized database writes, holding the write lock for an extended period. Consequently, all other incoming error events from legitimate applications are blocked from being ingested, resulting in a localized denial of service for the platform.

Root Cause Analysis

The root cause of this vulnerability lies in the way Bugsink's digestion layer persists metadata tags. When a client application transmits an error event, the server extracts the tags dictionary and processes each entry. This processing is handled inside tags/models.py by a function named digest_tags, which iterates through the supplied tags and calls store_tags to write them to the database.

In SQLite-based configurations, database writes are strictly serialized. Storing a single key-value tag is not an isolated, low-overhead operation. For each metadata tag, Bugsink must query, verify, and potentially create records across four different database tables. These include the TagKey registry, the TagValue table, the EventTag mapping, and the IssueTag mapping.

Because of this relational design, processing a single tag translates into up to four distinct database row-write operations inside a single transaction. When an event contains thousands of tags, the ingestion thread initiates a massive write transaction that executes tens of thousands of database writes. This holds the database write lock, blocks all other database operations, and starves the application worker pool of available database connections.

Code-Level Diff Analysis

The vulnerability was resolved in version 2.2.2 by implementing a strict cap on the number of tags stored per event. The fix was introduced across two separate commits.

In the first commit (8dca571b9e66c535ed4885465db820824e7c491a), a default configuration setting named MAX_EVENT_TAGS was added, initially set to 1000. The digest_tags function in tags/models.py was updated to truncate the incoming tags dictionary to this maximum limit prior to invoking the store_tags helper. This prevented an unbounded loop of database writes.

# File: tags/models.py
# The fixed logic slices the tags dictionary if it exceeds the max_tags setting
max_tags = get_settings().MAX_EVENT_TAGS
if len(tags) > max_tags:
    logger.warning("event has %d tags; storing %d and dropping the rest", len(tags), max_tags)
    tags = dict(list(tags.items())[:max_tags])

In the second commit (1d0539fefcd1a796143d15d84053b1c0122ef8c7), the developers hardened this defense by lowering the default value of MAX_EVENT_TAGS from 1000 to 100. This change ensures that even under highly restricted hardware constraints or intense resource starvation, SQLite database writes remain within a predictable bound. Additionally, user-defined tags are prioritized over system-synthesized tags by ensuring truncation occurs after the primary user tags are extracted.

Exploitation Methodology

Exploitation of GHSA-5X67-J5XG-C5GJ requires network access to the Bugsink ingestion endpoint and a valid Project DSN. In many client-side applications (such as single-page web applications or mobile apps), the Sentry-compatible DSN is exposed within public asset bundles or network requests, making it easily discoverable.

With a valid DSN, an attacker can construct a standard JSON payload that mimics a Sentry crash report. Within the tags field of this JSON structure, the attacker generates an array or dictionary containing thousands of unique key-value pairs (e.g., "tag_0001": "value", "tag_0002": "value", etc.).

{
  "event_id": "fc63bfc12c224079b4f0e7c700000001",
  "timestamp": "2026-06-05T21:45:00.000Z",
  "platform": "javascript",
  "message": "Simulated Ingestion Delay Test",
  "tags": {
    "test_tag_1": "val",
    "test_tag_2": "val",
    "test_tag_10000": "val"
  }
}

When this payload is sent via an HTTP POST request to Bugsink's /api/{project_id}/store/ endpoint, the server processes the payload. If the server is running a version equal to or older than 2.2.1, it attempts to write approximately 40,000 database rows within a single transaction. This operation blocks other processes trying to obtain the SQLite write lock, causing them to time out or return server errors (HTTP 500 or 504).

Impact Assessment

The security impact of GHSA-5X67-J5XG-C5GJ is limited strictly to system availability. Because the vulnerability is exploited via the standard ingestion pipeline, it does not bypass authentication mechanisms to access sensitive administrative data, nor does it allow arbitrary code execution, file system writes, or data extraction.

The CVSS v3.1 score of 4.3 (Medium) reflects this limited impact. The metrics indicate that network access is required, the attack complexity is low, and low privileges are required (the valid Project DSN acts as a low-privilege credential). The impact is rated as Low for Availability and None for both Confidentiality and Integrity.

In production environments, the denial of service halts the ingestion of critical application errors. If an active incident occurs on the target application while the database is locked, administrators will fail to receive real-time traceback alerts and telemetry. This impairs the operational monitoring and incident response capabilities of organizations using Bugsink.

Remediation and Mitigation

The recommended remediation path is to upgrade the Bugsink installation to version 2.2.2 or newer. The update implements the MAX_EVENT_TAGS cap natively, preserving performance and stability during processing.

For deployments where an immediate upgrade is not possible, administrators should configure the MAX_EVENT_TAGS environment variable to a conservative value, such as 50 or 100, if their deployment configuration exposes this parameter. Alternatively, rate-limiting rules can be implemented at the reverse proxy or Web Application Firewall (WAF) layer to limit the maximum size of incoming HTTP POST requests sent to the /api/*/store/ endpoints, as oversized payloads are often indicative of this exploitation vector.

Additionally, operations teams can monitor Bugsink logs for warning messages originating from the bugsink.ingest logger. When an event exceeds the configured limit, the system logs a message matching: event has {count} tags; storing 100 and dropping the rest. Detecting these log patterns provides a reliable indicator that an application is emitting excessive tags or that an ingestion attack is being attempted.

Official Patches

BugsinkOfficial Bugsink Security Advisory

Fix Analysis (2)

Technical Appendix

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

Affected Systems

Bugsink (PyPI Package)

Affected Versions Detail

Product
Affected Versions
Fixed Version
bugsink
Bugsink
<= 2.2.12.2.2
AttributeDetail
CWE IDCWE-400
Attack VectorNetwork
CVSS v3.14.3 (Medium)
EPSS ScoreNot Available
ImpactDenial of Service (Availability)
Exploit StatusProof of Concept
KEV StatusNot Listed

MITRE ATT&CK Mapping

T1499.004Endpoint Denial of Service: Application Exhaustion Flood
Impact
CWE-400
Uncontrolled Resource Consumption

The software does not properly control the allocation and maintenance of a limited resource, enabling an attacker to influence the resource consumption rate and cause a system slowdown or denial of service.

Known Exploits & Detection

GitHub Security AdvisoryProof of concept and threat analysis details documented within the official advisory.

Vulnerability Timeline

Bugsink version 2.2.1 is released (final vulnerable release)
2026-05-22
Initial fix commit capping tags to 1000 is merged
2026-06-02
Second fix commit hardening the cap to 100 tags is merged
2026-06-02
GHSA-5x67-j5xg-c5gj Security Advisory is published
2026-06-05
Bugsink version 2.2.2 is released publicly containing the complete fix
2026-06-05

References & Sources

  • [1]GHSA-5X67-J5XG-C5GJ Security Advisory
  • [2]Bugsink Repository Advisory Link
  • [3]Bugsink Release v2.2.2
  • [4]Bugsink Project Homepage

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-71869
9.3

CVE-2026-71869: Remote Code Execution in Orval via OpenAPI Default Value Template Literal Injection

CVE-2026-71869 is a critical-severity code injection vulnerability in the Orval code generator (packages: orval, @orval/core, @orval/zod) prior to version 8.21.0. This flaw allows remote attackers to execute arbitrary JavaScript code at import-time by embedding malicious payloads into the default values of OpenAPI or Swagger specifications. This report details the root cause, exploitation mechanism, and patch remediation.

Amit Schendel
Amit Schendel
2 views•7 min read
•about 2 hours ago•CVE-2026-61625
6.8

CVE-2026-61625: Arbitrary File Write via Path Traversal in VictoriaMetrics vmrestore

CVE-2026-61625 is a path traversal vulnerability (CWE-22) within the `vmrestore` utility of VictoriaMetrics. When restoring database shards from a compromised or malicious backup source, the application fails to validate the paths of backup parts before creating and writing files. By injecting objects with directory traversal sequences (such as `../`) into the remote backup storage, an attacker can write arbitrary files to out-of-bounds locations on the system executing the restore operation. Depending on the process privileges, this can result in host compromise via remote code execution.

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

CVE-2026-73846: Cache Key Canonicalization Collision in ondata ckan-mcp-server

A medium-severity cache key canonicalization collision vulnerability exists in the ckan-mcp-server prior to version 0.4.112. Unescaped delimiters in key-value parameters and server URLs allow structurally distinct requests to map to the same cryptographic hash, facilitating cache poisoning and unauthorized data exposure.

Alon Barad
Alon Barad
3 views•7 min read
•about 4 hours ago•GHSA-99RQ-75J6-5J9F
8.7

GHSA-99rq-75j6-5j9f: Stored and Reflected XSS in SiYuan via SVG Sanitizer Bypass

A stored and reflected Cross-Site Scripting (XSS) vulnerability was identified in the SiYuan kernel before version v3.7.3. The flaw occurs due to a parser differential between the backend Go-based HTML sanitizer and the browser-side XML rendering engine. Attackers can bypass the SVG sanitizer to execute arbitrary JavaScript within the context of the application's origin, leading to complete workspace compromise, data exfiltration, and full local kernel API manipulation.

Amit Schendel
Amit Schendel
2 views•5 min read
•about 5 hours ago•GHSA-GW25-M53R-QH88
6.5

GHSA-gw25-m53r-qh88: Path Traversal Bypass in SiYuan Notebook via /export/temp/ Short-Circuit Branch

An incomplete mitigation in the export-handling logic of SiYuan Notebook allowed authenticated users to bypass directory traversal protections. By crafting a request with percent-encoded path navigation sequences targeting the /export/temp/ route prefix, attackers can trigger an unvalidated short-circuit block that serving arbitrary files from the host server. This bypass renders previous path-traversal mitigations ineffective for the affected endpoint.

Amit Schendel
Amit Schendel
5 views•5 min read
•about 6 hours ago•CVE-2026-62669
7.4

CVE-2026-62669: Critical Two-Factor Authentication Bypass in Grav CMS Login Plugin

CVE-2026-62669 is a critical Improper Authentication vulnerability (CWE-287) in the Grav Login Plugin for Grav CMS. Prior to version 3.8.11, the plugin's key rotation task failed to verify if a user session was fully authorized before regenerating and returning two-factor authentication (2FA) secrets. Consequently, an attacker possessing a victim's primary credentials could invoke this endpoint to replace the 2FA secret, retrieve the replacement, and bypass the MFA constraint entirely.

Amit Schendel
Amit Schendel
2 views•8 min read