CVE-2026-23294
HighSummary
W jądrze Linuxa zidentyfikowano podatność związana z wyścigiem w devmap na rdzeniach PREEMPT_RT. Problem polega na tym, że wiele zadań preempcji może jednocześnie uzyskiwać dostęp do per-CPU xdp_dev_bulk_queue, co prowadzi do błędów takich jak podwójne zwolnienie pamięci i usunięcie po zwolnieniu.
Risk Assessment
Podatność ta może prowadzić do poważnych problemów z integralnością pamięci, co z kolei może skutkować awarią systemu lub nieprzewidywalnym zachowaniem aplikacji. Organizacje powinny być świadome ryzyka związanego z używaniem podatnych wersji jądra.
Recommendation
Zaleca się aktualizację jądra Linux do wersji, w której wprowadzono poprawkę, aby zlikwidować ryzyko związane z równoczesnym dostępem do xdp_dev_bulk_queue. Należy również rozważyć zastosowanie lokalnych blokad w kodzie, aby zminimalizować ryzyko wyścigów.
Related vulnerabilities
- CVE-2026-76461Critical
A vulnerability in the email parsing of Cisco AsyncOS Software for Cisco Secure Email Gateway is due to insufficient validation in the parsing logic. An unauthenticated remote attacker could send a crafted email containing malicious SQL statements, potentially leading to execution of arbitrary SQL statements and command execution with root privileges on the underlying operating system.
- CVE-2026-76443Critical
The vulnerabilities tracked by CVE-2026-76443 relate to improper neutralization issues grouped under CWE Pillar CWE-707 and were found during Cisco's internal security review. They affect Cisco Secure Email Gateway and Cisco Secure Email and Web Manager.
- CVE-2026-76441Critical
The vulnerabilities tracked by CVE-2026-76441 relate to improper access control issues grouped under CWE Pillar CWE-284 and were found during Cisco's internal security review. They affect Cisco Secure Email Gateway and Cisco Secure Email and Web Manager.
- CVE-2026-76440Critical
The vulnerabilities tracked by CVE-2026-76440 relate to path traversal issues grouped under CWE Pillar CWE-23 and were found during Cisco's internal security review. They affect Cisco Secure Email Gateway and Cisco Secure Email and Web Manager.
- CVE-2026-20353Critical
The vulnerabilities tracked by CVE-2026-20353 relate to improper control of a resource through its lifetime grouped under CWE Pillar CWE-664 and were found during Cisco's internal security review. They affect Cisco Secure Email Gateway and Cisco Secure Email and Web Manager.
- CVE-2026-61534Critical
In the Yayson library for serializing and reading JSON API data in JavaScript, prior to 4.3.0, Store and LegacyStore use attacker-controlled JSON:API type, id, and relationship names as keys in plain-object lookup tables. A document whose type is __proto__ causes model-cache writes to modify Object.prototype, with the attacker controlling the polluted property name through id and its value through attributes. This can result in process-wide prototype pollution, causing denial of service and logic corruption.
- CVE-2026-57145Critical
In PraisonAI, a multi-agent teams system, prior to 4.6.62, src/praisonai/praisonai/tools/multiedit.py passes the LLM-controlled filepath parameter directly to open for reading and writing without traversal rejection, symlink resolution, a workspace boundary, or protected-path checks. Prompt-influenced agents can read or overwrite files.
- CVE-2026-57131Critical
In PraisonAI, a multi-agent teams system, prior to 4.6.58, praisonai.jobs.server.create_app mounts praisonai.jobs.router.create_router under /api/v1/runs without authentication or per-job authorization. Network clients can submit attacker-controlled prompts and agent configuration, list and read jobs, stream results, and cancel or delete other jobs.
- CVE-2026-90961Critical
The LdapAuth and LinOTPAuth plugins in MISP contain an authentication bypass vulnerability. Missing input validation allows empty or non-string credentials to reach authentication logic, leading to unauthenticated LDAP binds (RFC 4513) or acceptance of empty passwords. This can allow an attacker to impersonate any known user without a password.
- CVE-2026-90898Critical
Bifrost registers MCP clients through its management API, where a stdio client is a command plus args that is started immediately upon client addition, with no MCP handshake required. Authentication is disabled by default (governance.auth_config.is_enabled=false), meaning every caller is treated as a local admin. A single unauthenticated POST /api/mcp/client is enough to run a program as the Bifrost process user (appuser on the official image).
Original NVD description (English source)
In the Linux kernel, the following vulnerability has been resolved: bpf: Fix race in devmap on PREEMPT_RT On PREEMPT_RT kernels, the per-CPU xdp_dev_bulk_queue (bq) can be accessed concurrently by multiple preemptible tasks on the same CPU. The original code assumes bq_enqueue() and __dev_flush() run atomically with respect to each other on the same CPU, relying on local_bh_disable() to prevent preemption. However, on PREEMPT_RT, local_bh_disable() only calls migrate_disable() (when PREEMPT_RT_NEEDS_BH_LOCK is not set) and does not disable preemption, which allows CFS scheduling to preempt a task during bq_xmit_all(), enabling another task on the same CPU to enter bq_enqueue() and operate on the same per-CPU bq concurrently. This leads to several races: 1. Double-free / use-after-free on bq->q[]: bq_xmit_all() snapshots cnt = bq->count, then iterates bq->q[0..cnt-1] to transmit frames. If preempted after the snapshot, a second task can call bq_enqueue() -> bq_xmit_all() on the same bq, transmitting (and freeing) the same frames. When the first task resumes, it operates on stale pointers in bq->q[], causing use-after-free. 2. bq->count and bq->q[] corruption: concurrent bq_enqueue() modifying bq->count and bq->q[] while bq_xmit_all() is reading them. 3. dev_rx/xdp_prog teardown race: __dev_flush() clears bq->dev_rx and bq->xdp_prog after bq_xmit_all(). If preempted between bq_xmit_all() return and bq->dev_rx = NULL, a preempting bq_enqueue() sees dev_rx still set (non-NULL), skips adding bq to the flush_list, and enqueues a frame. When __dev_flush() resumes, it clears dev_rx and removes bq from the flush_list, orphaning the newly enqueued frame. 4. __list_del_clearprev() on flush_node: similar to the cpumap race, both tasks can call __list_del_clearprev() on the same flush_node, the second dereferences the prev pointer already set to NULL. The race between task A (__dev_flush -> bq_xmit_all) and task B (bq_enqueue -> bq_xmit_all) on the same CPU: Task A (xdp_do_flush) Task B (ndo_xdp_xmit redirect) ---------------------- -------------------------------- __dev_flush(flush_list) bq_xmit_all(bq) cnt = bq->count /* e.g. 16 */ /* start iterating bq->q[] */ <-- CFS preempts Task A --> bq_enqueue(dev, xdpf) bq->count == DEV_MAP_BULK_SIZE bq_xmit_all(bq, 0) cnt = bq->count /* same 16! */ ndo_xdp_xmit(bq->q[]) /* frames freed by driver */ bq->count = 0 <-- Task A resumes --> ndo_xdp_xmit(bq->q[]) /* use-after-free: frames already freed! */ Fix this by adding a local_lock_t to xdp_dev_bulk_queue and acquiring it in bq_enqueue() and __dev_flush(). These paths already run under local_bh_disable(), so use local_lock_nested_bh() which on non-RT is a pure annotation with no overhead, and on PREEMPT_RT provides a per-CPU sleeping lock that serializes access to the bq.

