Description
VoiceSentinel is a real-time voice moderation system for Minecraft servers. From 2.2.1 until 3.3.1, the optional report buffer feature has a race between retention cleanup and normal transcript writes. In `report_buffer.py`, `_maybe_cleanup()` uses an unlocked dictionary for once-per-hour cleanup throttling, allowing simultaneous `_cleanup_tenant()` operations for one tenant. Cleanup reads `transcripts.jsonl` and rewrites it in place without file locking or atomic replacement, while `report_buffer_append_async` uses `asyncio.to_thread` to append without synchronization. In `main.py`, concurrent `_processing_worker` tasks make this reachable in normal operation; `processing.worker_count` of two or more and public-pool servers sharing a `server_key` increase collisions. With `report_buffer.enabled` set to true, racing writes can lose, duplicate or corrupt transcript data and defeat `report_buffer.retention_seconds` pruning, allowing unbounded disk growth that can exhaust storage and crash the host or other services sharing it. The feature is opt-in and disabled by default. This issue is fixed in version 3.3.1.
Published: 2026-10-30
Score: 8.2 High
EPSS: n/a
KEV: No
Impact: Denial of Service via unbounded disk growth caused by corrupted transcript data
Action: Apply Patch
AI Analysis

Impact

A race condition between the optional report buffer’s cleanup routine and regular transcript writes can erase or corrupt stored transcripts. When the cleaning routine rewrites the file without proper locking, concurrent writes can be lost or duplicated, allowing retention limits to be bypassed. The resulting corruption can cause the storage file to grow without bound, eventually exhausting disk space and crashing the host or other services that share the storage. This flaw permits a Denial of Service without privilege escalation, because any user who can generate or trigger report buffer writes participates in the race.

Affected Systems

VoiceSentinel products from versions 2.2.1 through 3.3.1 that have the report_buffer feature enabled are impacted. The default installation disabling this feature is not affected, but any opt‑in configuration that sets "report_buffer.enabled" to true is vulnerable.

Risk and Exploitability

The CVSS score of 8.2 indicates high severity. Explicit EPSS data is not available, and the vulnerability is not listed in CISA KEV, but the lack of a mitigation path and the potential for indiscriminate storage exhaustion means it remains a practical risk. Attackers can trigger the condition by creating normal report buffer writes through legitimate server activity or by manipulating the shared server key in public‑pool configurations, revealing a likely internal attack vector. Once the race occurs, it is difficult to recover without a fresh file, making it a classic denial‑of‑service flaw.

Generated by OpenCVE AI on October 30, 2026 at 19:42 UTC.

Remediation

No solution or workaround provided in the CVE record.

OpenCVE Recommended Actions

  • Upgrade VoiceSentinel to version 3.3.1 or later to apply the race‑condition fix
  • If the report_buffer feature is not required, set "report_buffer.enabled" to false in the configuration
  • Monitor disk space actively and configure alerts to detect unexpected growth, and consider reducing "processing.worker_count" or isolating tenants by unique server keys

Generated by OpenCVE AI on October 30, 2026 at 19:42 UTC.

Tracking

Sign in to view the affected projects.

Advisories

No advisories yet.

History

Fri, 30 Oct 2026 18:30:00 +0000

Type Values Removed Values Added
Description VoiceSentinel is a real-time voice moderation system for Minecraft servers. From 2.2.1 until 3.3.1, the optional report buffer feature has a race between retention cleanup and normal transcript writes. In `report_buffer.py`, `_maybe_cleanup()` uses an unlocked dictionary for once-per-hour cleanup throttling, allowing simultaneous `_cleanup_tenant()` operations for one tenant. Cleanup reads `transcripts.jsonl` and rewrites it in place without file locking or atomic replacement, while `report_buffer_append_async` uses `asyncio.to_thread` to append without synchronization. In `main.py`, concurrent `_processing_worker` tasks make this reachable in normal operation; `processing.worker_count` of two or more and public-pool servers sharing a `server_key` increase collisions. With `report_buffer.enabled` set to true, racing writes can lose, duplicate or corrupt transcript data and defeat `report_buffer.retention_seconds` pruning, allowing unbounded disk growth that can exhaust storage and crash the host or other services sharing it. The feature is opt-in and disabled by default. This issue is fixed in version 3.3.1.
Title VoiceSentinel: Race condition in report buffer cleanup can corrupt transcript data and cause unbounded disk growth
Weaknesses CWE-362
CWE-400
CWE-667
References
Metrics cvssV3_1

{'score': 8.2, 'vector': 'CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:L/A:H'}


Subscriptions

No data.

cve-icon MITRE

Status: PUBLISHED

Assigner: GitHub_M

Published:

Updated: 2026-10-30T18:25:28.484Z

Reserved: 2026-07-10T20:28:17.513Z

Link: CVE-2026-61854

cve-icon Vulnrichment

No data.

cve-icon NVD

Status : Deferred

Published: 2026-10-30T19:18:28.887

Modified: 2026-10-30T19:39:14.897

Link: CVE-2026-61854

cve-icon Redhat

No data.

cve-icon OpenCVE Enrichment

Updated: 2026-10-30T19:45:14Z

Weaknesses
  • CWE-362

    Concurrent Execution using Shared Resource with Improper Synchronization ('Race Condition')

  • CWE-400

    Uncontrolled Resource Consumption

  • CWE-667

    Improper Locking