All High Medium Low
facebook/react Information Disclosure MEDIUM
The commit changes production error handling for all browser bundles to minify prod error codes/messages, reducing information leakage. It also expands the error code map (scripts/error-codes/codes.json) and flips minifyWithProdErrorCodes from false to true for multiple bundles. The resulting behavior is that production browser errors no longer expose verbose internal messages or stack traces, mitigating potential information disclosure about internal server/client boundaries and bundler details.
Commit: 23fcd7ce Affected: Pre-19.2.4; specifically 19.2.0 through 19.2.3 (inclusive) for browser bundles; fixed in 19.2.4. 2026-04-17 20:22
grafana/grafana XSS MEDIUM
The commit changes the Data Hover UI rendering to sanitize and constrain link rendering in data-hover tooltips. Previously, values could be rendered as clickable links via a shared geomap/ui utility (renderValue) that wrapped URLs in an anchor tag without URL sanitization. The new approach introduces a dedicated renderValue implementation under data-hover that only renders http/https URLs and sanitizes the href via textUtil.sanitizeUrl, while leaving non-http/https values as plain text. It also adds an isHttpUrl helper and tests for it. In effect, this mitigates potential XSS via untrusted inputs in Data Hover tooltips by preventing execution of untrusted or malicious URLs and ensuring sanitized, safe anchor targets.
Commit: c1605805 Affected: Pre-12.4.0 (i.e., 12.3.x and earlier) 2026-04-17 15:32
grafana/grafana Authorization / Access Control: Privilege escalation via RBAC misconfiguration (AllowsKind gating) MEDIUM
The commit adds an AllowsKind gate and configurable ScopeAttribute for ResourcePermission mappers, plus a storage backend exclusion of BasicRole for service accounts. Before this change, nil allowedKinds meant all permission kinds (including BasicRole) could be assigned to resources, enabling potential authorization bypass/privilege escalation by granting BasicRole to a ServiceAccount or other resource. The patch hardens RBAC by ensuring only whitelisted kinds are allowed for a given resource and scope, and by avoiding dangerous combinations in storage.
Commit: 8246bd0e Affected: Grafana 12.x before this commit; exact range not specified in patch. Likely 12.3.x and older. 2026-04-17 12:31
victoriametrics/victoriametrics Denial of Service (Resource exhaustion) HIGH
The commit prevents a potential Denial of Service (memory/resource exhaustion) by capping the amount of the HTTP error response body read during prom.scrape non-200 responses. Previously, the code read the entire response body (io.ReadAll) for non-200 HTTP statuses, which could allow a malicious or misbehaving endpoint to exhaust memory (OOM) by returning a very large body. The fix introduces a limited reader (GetLimitedReader) with a maximum size (maxScrapeSize+1) and reads only up to that bound, mitigating unbounded reads and subsequent memory exhaustion. Impact: This changes the behavior of error-paths in lib/promscrape/client.go, ensuring that error bodies are not read in full when the endpoint is misbehaving or malicious. This is a genuine security improvement, not just a dependency bump or a cosmetic change.
Commit: a29229a8 Affected: <1.139.0 2026-04-16 23:10
grafana/grafana Authorization / Privilege Escalation HIGH
This commit hardens AccessControl by introducing per-resource permission kind restrictions (AllowsKind) for ResourcePermission mappers and by explicitly constraining Service Accounts (SA) to not be granted BasicRole at the resource level. Previously, mappers could implicitly allow all permission kinds (nil allowedKinds) for resources like serviceaccounts, which could enable a per-resource BasicRole grant to an SA. The patch adds: (1) a configurable ScopeAttribute and Scope attribute constants to make scope handling explicit, (2) a shared mapper with an AllowsKind(...) method to restrict which permission kinds are allowed per resource, and (3) storage_backend.go wiring that, for serviceaccounts, uses an explicit allowedKinds list excluding BasicRole. This closes a potential authorization bypass where a user could grant a BasicRole to an SA on a specific resource, effectively escalating privileges at the resource level when BasicRole is globally derived for SA.
Commit: 8167da14 Affected: 12.4.0 and earlier 2026-04-16 18:22
grafana/grafana Information Disclosure / Access Control (Authorization) HIGH
The commit adds fieldSelector handling for the preferences listing endpoint and enforces access checks to prevent information disclosure via list operations. Specifically: - Only a single fieldSelector on metadata.name is supported with the = operator. - Access control is applied based on the owner parsed from the name: namespace owner is always allowed; user owner is allowed only if the requester matches; team owner is allowed only if the requester is a member of that team. - Continue tokens and label selectors are rejected to prevent abuse. - If access is not permitted, the API returns an empty list instead of leaking data. This fixes a potential authorization/info-disclosure flaw where an authenticated user could enumerate or fetch preferences for other users/teams via the list endpoint using field selectors. The vulnerability type is Information Disclosure / Access Control (Authorization).
Commit: 7b60014c Affected: Grafana 12.4.0 and earlier (prior to this commit) 2026-04-16 14:22
torvalds/linux Memory safety (use-after-free, double-free) HIGH
The commit bundles fixes for memory-safety vulnerabilities in the ksmbd SMB server (smbdirect path and related code). The primary issues addressed are memory-corruption risks such as use-after-free and double-free in the SMB Direct path (e.g., handling and ownership of request objects in smbdirect_send paths, and the flow where a request is moved to a batch and should not be freed), as well as a use-after-free in the close path for durable/async operations. Additional changes address a potential crypto-message use-after-free, a memory leak in session setup, validation improvements (EA name length), and safer handling of related FSCC structures to reduce the risk of out-of-bounds or invalid memory access. Overall, these changes are aimed at mitigating memory-safety defects that could lead to crashes or code execution, rather than pure functionality changes.
Commit: 04809172 Affected: v7.0-rc6 and earlier (baseline for this patch, before this v7.1-rc-part1 ksmbd-srv-fixes merge) 2026-04-16 06:32
torvalds/linux Buffer overflow / memory-safety issue in device-mapper ioctl processing HIGH
The commit set contains device-mapper and DM core fixes that include memory-safety improvements around dynamic allocations and ioctl handling (notably in dm-bufio.c and related dm-cache/metadata paths). The key change is replacing a potentially unsafe fixed-size allocation for a dynamically-sized structure with a safe flexible-allocation approach (kzalloc_flex) and related ioctl/error-path hardening. This points to a genuine memory-safety bug (buffer overflow risk) in ioctl/Data-structure handling within the device-mapper subsystem, rather than a pure dependency bump or cosmetic cleanup.
Commit: a5f99809 Affected: <= v7.0-rc6 (prior to the for-7.1/dm-changes integration); includes 7.0-rc6 and earlier 2026-04-16 06:22
torvalds/linux Out-of-bounds read / Memory safety HIGH
The patch fixes a memory-safety vulnerability by replacing an out-of-bounds read when computing the length to copy into task_struct->comm. Previously __set_task_comm used strlen(buf) to determine the length, which can read past a non-NUL-terminated user-provided buffer. The fix uses strnlen(buf, sizeof(tsk->comm) - 1) to cap the read to the destination buffer, preventing potential over-read and related memory-safety issues or information disclosure. This is a genuine safety improvement in the exec path that updates task names.
Commit: 613b48bb Affected: < v7.0-rc6 2026-04-16 06:20
torvalds/linux Race condition in regmap-debugfs dummy name allocation HIGH
The commit fixes a race condition in regmap-debugfs dummy name allocation. Previously, regmap-debugfs used a static dummy_index for naming dummy entries, which could race when multiple regmaps create dummy debugfs entries concurrently, potentially leading to name collisions, incorrect mapping, or use-after-free scenarios during cleanup. The fix introduces per-instance ID allocation (via IDA) and per-map tracking (debugfs_dummy_id) with proper cleanup, eliminating the shared global naming race and ensuring each dummy debugfs entry has a unique, correctly freed name.
Commit: 8e258317 Affected: v7.0-rc6 and earlier (pre-7.1 regmap) 2026-04-16 06:19
torvalds/linux Memory safety / Bounds-checking (out-of-bounds read risk) in SMB client and dcache tmpfile handling HIGH
The commit bundle contains explicit security-related fixes: (1) bounds checking addition in d_mark_tmpfile_name to prevent a potential buffer overflow when constructing a temporary file name for dcache entries. It enforces that the new name length does not exceed DNAME_INLINE_LEN - 1 before performing the copy, reducing the risk of memory corruption in path handling for tmpfiles. (2) A compatibility/feature-related adjustment to support O_TMPFILE and related tmpfile naming, including new constants and small adjustments in cifs/smb client code to correctly handle temporary file creation and naming. The triaged note mentions fixing an out-of-bounds read in symlink response parsing and an EA bounds check; these changes correlate to input validation and memory-safety improvements in the SMB client and vfs path handling. Taken together, these are concrete security-oriented fixes rather than mere dependency bumps or cosmetic changes.
Commit: 81dc1e4d Affected: 7.0-rc6 and earlier (pre-fix SMB3/SMB1 client code in the v7.1-rc1-part1-smb3-client-fixes merge) 2026-04-16 06:14
torvalds/linux Memory safety / Uninitialized read in HFS+ catalog record parsing HIGH
The commit contains a genuine security vulnerability fix in the HFS+ handling code of the Linux kernel. It addresses a memory-safety issue where syzbot observed an uninitialized value being read from on-disk HFS+ catalog records. The root cause is that the code path reading catalog records did not validate that the on-disk record size (the length field for a catalog entry) matches the expected size for the record type. The patch introduces hfsplus_brec_read_cat(), which validates the record size against the type and returns -EIO on mismatch, preventing potential reads of uninitialized kernel memory. Additionally, the commit includes related hardening such as detecting corrupted allocator state during hfs_btree_open() (mount read-only on corruption) and fixing error-path lock handling to avoid deadlocks. These changes reduce exposure to memory-safety issues and panics when processing corrupted HFS+ images. In short, this is a targeted memory-safety vulnerability fix in HFS+ catalog record parsing, not merely a dependency bump or a cosmetic code cleanup.
Commit: 4d998142 Affected: v7.0-rc6 2026-04-16 06:07
torvalds/linux Authentication/authorization bypass via durable handle reconnect (MS-SMB2 SecurityContext mismatch) HIGH
The ksmbd durable handle reconnect flow did not verify the reconnecting client's identity against the original opener. This allowed an authenticated user to hijack an orphaned durable handle by guessing or brute-forcing the persistent ID (DHnC). The patch adds a durable_owner to ksmbd_file to store the original opener's UID, GID, and account name, captures owner information when a file handle becomes orphaned, and introduces ksmbd_vfs_compare_durable_owner() to validate the reconnection identity during SMB2_CREATE (DHnC). This closes the gap where any authenticated user could reconnect to a durable handle opened by another user.
Commit: 49110a8c Affected: 7.0-rc6 and earlier (before this commit 49110a8ce654bbe56bef7c5e44cce31f4b102b8a) 2026-04-16 05:53
torvalds/linux BPF verifier bypass / RCE potential via malformed BTF attributes (func_info, line_info, core_relo) MEDIUM
The commit moves BTF validation logic into a dedicated check_btf.c and wires it into the BPF verifier. It hardens handling of BTF-derived information for func_info, line_info, and core_relo, preventing malformed or inconsistent BTF attributes from bypassing the verifier's security checks. This is a genuine security hardening against potential verifier bypasses that could lead to code execution on crafted BPF programs. The change is not merely a dependency update or a cosmetic cleanup; it adds targeted validation paths and integrates them with the verifier flow.
Commit: 99a832a2 Affected: Pre-patch: up to v7.0-rc5 (and earlier); patched in v7.0-rc6 and later. 2026-04-16 05:47
torvalds/linux Race condition in KVM gmap invalidation / shadow paging (memory safety and isolation risk) HIGH
This commit fixes a real race condition in KVM's gmap/shadow paging code, addressing partial gmap invalidations particularly in the s390 KVM path and tightening the user-kernel API surface by replacing VLAs with FLEX_ARRAY. The core changes introduce an invalidated flag on gmap objects and adjust the shadow/invalidation logic to avoid races where a gmap could be observed in an inconsistent state during concurrent invalidation and shadow-paging operations. It also updates multiple UAPI structures to use the FLEX_ARRAY helper instead of VLAs, reducing risks from unbounded kernel/user-space structures. The combination of s390 race fixes and the UAPI cleanup constitutes a genuine vulnerability fix aimed at preventing race-induced memory safety/isolation issues in virtualization. Rationale: - The diff shows multiple guarded checks that previously relied on sg->parent to determine validity; these have been replaced with sg->invalidated in several hot paths, indicating a race-prone condition when a gmap is invalidated concurrently with shadow operations. - The gmap structure now carries an invalidated flag and the code marks gmaps as invalidated during certain transitions, which prevents unsafe pointer usage or premature re-use of shadow state. - UAPI structures are migrated from inline flexible arrays (VLAs) to __DECLARE_FLEX_ARRAY, eliminating VLAs in kernel-user interfaces and reducing attack surface from malformed or oversized user-space inputs. Affected behavior before fix: concurrent invalidation/updates of gmaps could race with shadow paging, potentially leading to use-after-free-like scenarios or memory isolation breaches in edge cases. Impact: The fix reduces the likelihood of memory-safety vulnerabilities in KVM where gmap invalidations race with shadow paging, improving guest memory isolation and stability.
Commit: 086aca10 Affected: v7.0-rc5 and earlier (all 7.0-rc versions prior to this commit) 2026-04-16 05:43
grafana/grafana Information disclosure / Access-control hardening HIGH
This commit implements an information-disclosure hardening in the unified search API by filtering out the K6 technical folder for non-service accounts. Previously, regular users could observe internal K6 RBAC artifacts (the K6 folder) in search results, potentially leaking internal structure and permissions. The change adds a NotIn filter on the SEARCH_FIELD_NAME for the K6FolderUID when the requester is not a service account, and updates tests accordingly. This appears to be a genuine security vulnerability fix aimed at reducing unintended information disclosure via search results.
Commit: dfaf0a74 Affected: Grafana 12.4.0 and earlier 2026-04-15 18:25
grafana/grafana Authorization bypass / Information Disclosure HIGH
The commit implements an authorization fix for listing preferences. Prior to this change, non-user identities (e.g., AccessPolicy) could list all preferences by nulling the user, effectively bypassing access control and enabling information disclosure across users/teams within a namespace. The patch restricts listing to actual users and requires an explicit All flag to list all preferences. This prevents an authorization bypass that could reveal per-user/per-team preferences.
Commit: 1049fdc8 Affected: <= 12.4.0 (pre-fix) 2026-04-15 09:25
grafana/grafana Authorization bypass / Access control: Denial of watch on ResourcePermissions HIGH
The commit adds a temporary authorization rule that explicitly denies watch operations on ResourcePermissions while allowing other operations. This blocks the watch exposure for ResourcePermissions, addressing an access-control weakness where watch streams could reveal permission-related data. It is a targeted code change (not a dependency bump) intended to fix an authorization bypass risk, by injecting a Deny path for the watch verb on ResourcePermissions at the API layer. The change relies on a storage-layer authorization for non-watch operations, with watch explicitly denied via a custom AuthorizerFunc.
Commit: dfe5e265 Affected: Grafana 12.4.0 (and potentially earlier 12.4.x releases that pull this IAM authorizer logic)", 2026-04-15 00:01
grafana/grafana Race condition in pending-delete cleanup (tenant deletion) MEDIUM
The commit fixes a race condition in the pending-delete cleanup flow for tenants in Grafana's Unified Storage. Prior to this change, the pending-delete lifecycle could be mishandled during cleanup, potentially allowing a tenant to be recreated or left in an inconsistent state while the cleanup is in progress. The patch introduces a DeletedAt timestamp and an Orphaned flag to differentiate between orphaned and non-orphaned pending-delete records, and adjusts deletion logic to guard against reprocessing and unintended recreation. Key points addressed: - Added DeletedAt to PendingDeleteRecord. Non-orphaned records are marked DeletedAt after successful deletion, preventing reprocessing by the tenant deleter. - Reconciler now propagates Orphaned flag instead of Force, and clear logic skips orphaned records rather than forcing skip behavior. - Non-orphaned records are not re-created during cleanup because the tenant deleter will mark them DeletedAt and skip reprocessing. - Tests updated to reflect new behavior (DeletedAt set after expiry, orphaned records removed entirely, etc.). Affects scenarios where a tenant could be concurrently cleaned up and re-considered by the watcher, creating a timing window for inconsistent deletion state. The fix provides deterministic cleanup semantics by ensuring DeletedAt gates further processing and orphaned records are handled distinctly.
Commit: 85e4745d Affected: Grafana 12.4.0 and later (unified storage pending-delete flow) 2026-04-14 20:01
grafana/grafana Privilege escalation / Authorization bypass via wildcard resource name in RBAC resourcepermissions HIGH
The commit adds validation to reject wildcard '*' as the resource name in ResourcePermission objects used by Grafana's RBAC. This was enabling a potential authorization bypass/privilege escalation by creating or using a permission that targets all resources within a group (a wildcard). The changes enforce that resource permissions must target a specific resource and adjust related parsing/validation paths accordingly. Tests were added to ensure '*' is rejected, and an explicit error path was introduced for wildcard resource IDs. This indicates a real vulnerability fix rather than a mere dependency bump or cleanup.
Commit: 1744b6fc Affected: <= 12.3.x (prior to this fix in the 12.4.0 line) 2026-04-13 17:06
grafana/grafana Privilege Escalation / Authorization bypass via cross-namespace provisioning HIGH
Root cause: provisioning identity was derived from the resource object's namespace (f.Obj.GetNamespace()) in Run() and DryRun(), which could be empty or incorrect for resources created via provisioning. As a result, resources from one repository could be created or modified under an unintended namespace, leading to cross-namespace ownership conflicts and potential privilege escalation. The patch changes identity derivation to use the repository's namespace (f.Repo.Namespace) in Run(), DryRun(), and related code paths (e.g., dualwriter.go), ensuring resources are created within the repository's proper namespace and preserving isolation across repositories. Integration tests for cross-namespace isolation were added to validate correct behavior. This is a genuine security fix addressing authorization/ownership boundaries between repositories.
Commit: 2797c05b Affected: <= 12.4.0 (all 12.x releases prior to this commit) 2026-04-13 17:05
grafana/grafana Information Disclosure / Improper Error Handling (NotFound leakage) MEDIUM
The commit standardizes NotFound error handling for annotations across in-memory, SQL, and Kubernetes adapters. It maps internal NotFound errors to API-level NotFound responses and avoids leaking whether a resource exists when access is restricted. Previously, error messages or HTTP statuses could disclose existence or details about resources, enabling resource enumeration. The changes aim to minimize information disclosure by returning uniform NotFound responses for missing resources (and related permission scenarios) rather than revealing existence through mixed error messages or statuses.
Commit: 8a7d7289 Affected: Grafana 12.x releases prior to this patch, including the 12.4.0 release before this commit's changes 2026-04-13 17:04
rails/rails Information Disclosure MEDIUM
The commit adds an optimization in ActiveSupport::ParameterFilter to detect anchored exact-match regular expressions and treat those keys as exact matches to be masked. Specifically, it introduces extract_exact_key to derive a literal key from anchored patterns like /^token$/ or \Atoken\z and stores these in an @exact_keys hash. During filtering, if a key exactly matches one of these literals, or if a general regex matches the key, the value is masked. This reduces the risk of information disclosure by ensuring that sensitive parameter names that are intended to be masked (even when specified with anchored exact-match regex) are reliably hidden across both top-level and nested parameter structures. The change also adds a test for anchored exact-match regexp filters to verify the behavior.
Commit: f9243afd Affected: 8.1.0 - 8.1.3 (inclusive) 2026-04-11 22:40
torvalds/linux Memory safety / NULL pointer dereference in kernel space (PN533 UART receive path) HIGH
The commit fixes a memory-safety bug in the PN533 NFC UART driver receive path. Previously, pn532_receive_buf could consume input bytes and hand a complete frame to pn533_recv_frame() before ensuring a fresh receive skb was allocated. If a fresh skb allocation failed, the callback would return the number of bytes accepted as zero, leave recv_skb as NULL, and subsequent receive handling could dereference a NULL skb (via skb_put_u8()), leading to a kernel crash or instability. The fix allocates the receive skb lazily just before consuming the next byte and, on allocation failure, returns the number of bytes already accepted. This preserves receive accounting and avoids potential NULL dereferences. The change is a correctness bug fix with memory-safety implications in the kernel space.
Commit: c71ba669 Affected: v7.0-rc6 and earlier (pre-fix) 2026-04-11 08:20
torvalds/linux Control-Flow Integrity / Indirect Branch Tracking (RISC-V) mismanagement leading to potential RCE HIGH
The commit strengthens and clarifies RISCV indirect branch tracking (CFI) and shadow stack handling in the kernel. It unlocks per-task CFI/shadow stack state immediately after exec(), updates prctl()/ptrace interfaces to be more explicit, and renames/adjusts internal state fields for branch landing pads and shadow stacks. The changes address stale/incorrect locking behavior that could otherwise result in a misconfigured or stuck CFI/shadow stack state, which could be exploited to bypass control-flow integrity and potentially enable RCE via indirect branches. In short, this is a security hardening/fix rather than a mere cleanup or dependency bump.
Commit: e774d5f1 Affected: v7.0-rc6 and v7.0-rc7 (before rc8) 2026-04-11 08:17
torvalds/linux Buffer overflow / memory corruption in TH1520 AON RPC message construction HIGH
The commit fixes a buffer overflow in the TH1520 AON RPC handling path (drivers/firmware/thead,th1520-aon.c). Previously, the code built the RPC message by using the RPC_SET_BE16 macro to write 16-bit values into the message at specific offsets, which could write beyond the intended bounds and corrupt memory. The patch replaces these writes with direct 16-bit fields (resource and mode) updated using cpu_to_be16, aligning the payload with the actual RPC structure and preventing out-of-bounds writes. This addresses a potential memory corruption vulnerability in the TH1520 AON firmware RPC path. The change also updates the endian handling macros in the header to standardize usage.
Commit: d58305b2 Affected: 7.0-rc6 and earlier (upstream 7.x where TH1520 AON RPC is present) 2026-04-11 08:02
torvalds/linux Memory safety / IOMMU TLB synchronization weakness (potential memory corruption) HIGH
Memory-safety vulnerability in the IOMMU code: when unmapping, the iotlb_gather may appear empty and the code could elide the iotlb_sync() call, leading to stale TLB state and potential memory corruption, crashes, or hangs. The patch ensures iotlb_sync is invoked even if the gather is effectively empty by forcing a non-empty gather before sync.
Commit: 8b02520e Affected: v7.0-rc7 (regression introduced in -rc7; fixed by this commit) 2026-04-11 08:01
grafana/grafana Information disclosure / header injection risk via improper HTTP/2 gRPC metadata header sanitization HIGH
The commit adds explicit sanitization of HTTP header values used for gRPC metadata in the Grafana plugins integration path. It introduces: (1) isGRPCSafeHeaderValue to check that header bytes are printable ASCII (0x20 to 0x7E), and (2) sanitizeHTTPHeaderValueForGRPC to convert header values to a gRPC-safe representation by percent-encoding unsafe bytes. If the value is valid UTF-8, non-printable ASCII bytes are percent-encoded directly; if not valid UTF-8, the value is treated as ISO-8859-1, decoded to UTF-8, and then percent-encoded. Headers are then set with sanitized values. The tests demonstrate expected sanitization behavior, ensuring gRPC metadata remains ASCII-printable and preventing problematic header content from propagating to downstream services.
Commit: a878d665 Affected: Grafana 12.4.0 (and likely earlier in 12.4.x line; this commit targets 12.4.0 tracked release) 2026-04-10 20:04
victoriametrics/victoriametrics Concurrency leak / race condition leading to potential deadlock in write concurrency limiter MEDIUM
The commit fixes a race/resource-leak in the write concurrency limiter. Previously, Read() could decrease the available concurrency tokens (via DecConcurrency()) and, if IncConcurrency() failed, the token would not be re-acquired, potentially leaking a slot permanently. This could drain the concurrency limiter channel over time, eventually causing ingestion to deadlock when no slots remain. The patch adds per-reader tracking of whether a token has been obtained (increasedConcurrency) and ensures tokens are released correctly when the reader is returned.
Commit: d07c1c73 Affected: < 1.139.0 (versions prior to the fix in lib/writeconcurrencylimiter/concurrencylimiter.go) 2026-04-10 17:52
victoriametrics/victoriametrics Memory safety: data race leading to nil pointer dereference (use-after-init) in Go HIGH
The commit fixes a data race and potential nil pointer dereference in the storage startup sequence. Previously, FreeDiskSpaceWatcher could start before the Storage.table was fully initialized (opened), leading to the watcher potentially reading an uninitialized or partially initialized table and dereferencing a nil or invalid pointer. The fix initializes the isReadOnly state earlier and starts FreeDiskSpaceWatcher after openTable, ensuring the shared storage state is fully initialized before the watcher accesses it. This mitigates a memory safety issue (use-after-init / nil pointer dereference) that could cause crashes or undefined behavior in concurrent operation.
Commit: f95b483a Affected: Versions prior to 1.139.0 (pre-fix), e.g. 1.138.x and older 2026-04-10 07:10
grafana/grafana Memory safety / panic (crash) vulnerability in KV parsing MEDIUM
The commit adds a validation guard in ParseDataKeyParts to ensure the resource version metadata (rvMeta) contains at least 3 tilde-separated parts before accessing rvParts[1] and rvParts[2]. Previously, crafted or malformed rvMeta values with only 1 or 2 segments could lead to an index-out-of-range panic when parsing storage KV keys, potentially crashing Unistore and causing a denial-of-service condition or information leakage. The change is accompanied by tests covering edge cases and panic avoidance.
Commit: 3361f0db Affected: <= 12.4.0 2026-04-09 13:50
traefik/traefik TLS certificate handling / Gateway TLS certificateRef validation HIGH
The commit updates the Kubernetes gateway TLS certificate handling to perform per-ref validation, enforce permissions for TLS certificate references, and load TLS certificates per reference when multiple certificateRefs are configured on a Gateway listener. Previously, TLS handling could implicitly accept/load the first certificateRef without per-ref permission checks, potentially allowing misuse of unauthorized Secret references for TLS termination. The patch adds per-ref validation, permission checks (isReferenceGranted), and per-ref TLS loading (getTLSCert) to ensure only permitted certificateRefs are used, mitigating misconfiguration exposure and potential TLS information exposure or downgrade risk.
Commit: d31ce5df Affected: 3.7.x prior to 3.7.0-ea.3 (i.e., before this commit) 2026-04-09 10:47
grafana/grafana Insecure RBAC cleanup / stale permission data after plugin uninstall HIGH
The commit adds an RBACCleaner interface and wires it into the plugin uninstall path so that RBAC data associated with a plugin is cleaned up on removal. This mitigates the risk of leftover RBAC data (permissions) persisting after a plugin is uninstalled, which could otherwise allow privilege/permission leakage or unauthorized access via stale authorization entries. The code now calls CleanupPluginRBAC during plugin removal, and the removal will not be blocked by cleanup failures (errors are logged but removal proceeds). Tests were added to verify proper cleanup behavior and to ensure cleanup failures do not block removal.
Commit: 5f29e80a Affected: Grafana 12.x releases prior to this commit (e.g., 12.4.0 and earlier). 2026-04-09 08:32
grafana/grafana Information Disclosure / Cache mishandling MEDIUM
The commit changes public dashboards to avoid reusing a session-scoped scene cache and to build the dashboard scene from API data instead of cached scene data. Before this fix, public dashboards could be loaded from a per-session cache, risking information disclosure or leakage across sessions if a cached scene containing user/session-specific data was reused for another user or session. The fix ensures public dashboards are not pulled from the session cache and are constructed from API data, reducing stale or cross-session data exposure and aligning authorization context with the API response. This is a genuine vulnerability fix for cache mishandling related to public dashboards.
Commit: 3b3e1d63 Affected: < 12.4.0 2026-04-08 22:11
flutter/flutter Configuration weakness / insecure default (feature flag) HIGH
The Android engine loader (FlutterLoader) reads boolean shell flag metadata from the Android manifest using applicationMetaData.getBoolean(metadataKey, true). If the metadata key is missing or the value is unparsable, the flag defaults to true, enabling potentially risky engine features by default. The commit changes the default to false (applicationMetaData.getBoolean(metadataKey, false)), ensuring flags are only enabled when explicitly specified. This hardens configuration by preventing accidental activation of sensitive or debug features (e.g., Vulkan validation, debugging-related flags) due to malformed or absent manifest metadata. The change is accompanied by tests validating behavior for missing or malformed values.
Commit: 05e0ae02 Affected: <= v1.16.3 2026-04-08 17:02
grafana/grafana RBAC authorization integrity (authorization bypass risk due to interruptible RBAC lookups) HIGH
The commit fixes a race in RBAC authorization paths where RBAC lookups can be interrupted by a client disconnect due to a long-running database query. Specifically, GetBasicRoles and related permission lookups could be canceled when the client disconnects, causing incomplete or incorrect authorization decisions. The fix uses context.WithoutCancel for sensitive DB queries so that RBAC checks can complete even if the client disconnects, preserving authorization integrity. This is a real vulnerability fix (RBAC authorization integrity) and not merely a dependency bump or test enhancement. The changes primarily affect production RBAC code paths (getUserBasicRole and getUserPermissions entry point) and add a per-helper HTTP client override for observability in tests.
Commit: 4be8b78d Affected: 12.0.0 - 12.4.0 (inclusive) 2026-04-08 16:12
grafana/grafana Information Disclosure / Access Control HIGH
The commit fixes a information-disclosure/access-control issue in the alerting UI. Previously, when expanding an alert rule within a parent group, the PromQL used to fetch alert rule instances did not include the parent group label matchers, causing instances from other groups/environments to be visible. The fix threads parent group label values down to AlertRuleInstances and includes them as PromQL matchers in alertRuleInstancesQuery, thereby scoping instance results to the correct group. Added tests and code changes to ensure proper scoping.
Commit: 8508a1e6 Affected: Grafana 12.4.0 and earlier (pre-fix). 2026-04-08 14:11
grafana/grafana Information Disclosure / Authorization Bypass (RBAC) in UI visibility MEDIUM
The commit fixes a UI-driven information-disclosure risk in the Grafana Connections landing page. Previously, the landing page derived its cards from a hardcoded CardData.ts, which did not reflect actual backend visibility (RBAC) or plugin availability. This could cause a user to see cards for resources they should not access, effectively leaking the existence (and structure) of restricted plugins or data sources. The patch derives landing page cards from the backend-provided navIndex (which applies full plugin availability and RBAC checks) and enriches the card data via a metadata map. This aligns UI visibility with backend access control and edition-specific copy, reducing information disclosure and preventing exposure of inaccessible items.
Commit: d9eadb70 Affected: Versions prior to 12.4.0 (before this commit) 2026-04-08 12:11
grafana/grafana Access Control / Authorization Bypass (RBAC) via Dashboard Annotations subresource HIGH
The commit implements a real authorization fix for dashboard annotations by switching from a virtual resource-based permission check to a subresource-based RBAC flow. Previously, annotation access on dashboards could be inferred via dashboard permissions due to the use of a non-subresource path (dashboard.grafana.app/annotations) and an ad-hoc, batched permission check. The fix introduces a subresource path dashboards/annotations, aggregates permission checks via a BatchCheck request, and maps per-verb annotation actions (read/write/delete/create, etc.) to corresponding dashboard actions. It also updates the RBAC mapper to expose the new subresource, adjusts tests to cover the subresource, and ensures per-action permissions are evaluated for annotation operations. This directly addresses potential authorization bypass for reading or mutating dashboard annotations, tightening access controls to the annotations subresource.
Commit: 2e51ce6e Affected: <= 12.3.x (pre-fix), Fixed in 12.4.0 via commit 2e51ce6e4e88891cde1f0f7586cd11bf7439afc1 2026-04-08 10:11
grafana/grafana Information disclosure / Injection (v2 dashboards) MEDIUM
The commit adds v2-specific sanitization for public dashboards to strip potentially dangerous fields from query specs for v2 dashboards, preventing injection or leakage of query expressions. It introduces isDashboardV2 and sanitizeDataV2 and uses them in GetPublicDashboardForView, so v1 dashboards continue using existing sanitization. This appears to be a security-conscious change aimed at avoiding execution or disclosure of user-provided query expressions in v2 dashboards when served via public dashboards.
Commit: 7b13ef03 Affected: 12.4.0 2026-04-08 09:09
grafana/grafana Authorization / Access Control HIGH
The commit adds an admission guard that blocks mutations on resources whose namespace is marked with the pending-delete label. Specifically, it prevents updates when both the old and new objects carry the pending-delete label, and blocks creation if the incoming object carries the label. It allows updates that remove the label (explicit unlock) and permits status subresource updates. This hardens access control around provisioning resources during pending deletion to avoid unsafe mutations or inconsistent state. The changes are implemented across provisioning admission checks and wired into the provisioning validators (repositories, connections), with accompanying unit tests validating the behavior.
Commit: 9e3122ae Affected: <=12.3.x (pre-12.4.0); fix introduced in 12.4.0 2026-04-08 09:08
grafana/grafana RBAC / Access Control (authorization misconfiguration) MEDIUM
The commit refactors RBAC checks for snapshot operations to use general dashboard actions instead of per-snapshot actions. Specifically, it replaces references to dashboardsnapshots.ActionSnapshotsCreate/Delete/Read with dashboards.ActionSnapshotsCreate/Delete/Read and adjusts evaluators to require both the create/delete/read action and the corresponding dashboards read permission with the correct dashboard scope. This aligns authorization checks across dashboards and snapshots, reducing the risk of misconfigurations allowing unauthorized access to snapshot functionality. In prior versions, mismatch between snapshot-specific actions and roles could permit unintended access or block legitimate access, depending on how roles were defined.
Commit: e1d9d67a Affected: <= 12.4.0 2026-04-07 21:32
grafana/grafana Privilege escalation / Authorization bypass HIGH
The commit refactors access control to keep permissions scoped to resource types (folders vs dashboards) and updates related roles/tests. Previously, some permissions were granted with broad dashboard-wide scopes (e.g., ScopeDashboardsAll or similar), which could enable privilege escalation or unauthorized access by reading/acting on dashboards across folders. The patch replaces dashboard-wide scopes with folder-scoped values (e.g., ScopeFoldersAll or ScopeFoldersProvider UID) for relevant actions and updates annotation scope resolution to rely on folder scopes. This reduces the risk of over-broad permissions leaking across folder boundaries and fixes an authorization-scoping mismatch.
Commit: b1f6a897 Affected: <=12.4.0 2026-04-07 18:32
grafana/grafana Denial of Service (Memory Exhaustion due to Cartesian explosion in binary expression evaluation) HIGH
Summary of the observed vulnerability and fix: - Issue type: Denial of Service (Memory Exhaustion) in Grafana's expression binary operations. - Root cause: When evaluating binary math expressions (e.g., A || B), Grafana could need to materialize a combinatorial number of output series (cartesian explosion) if the left and right sides return many series with compatible labels. This can lead to excessive memory usage and potential OOM failures before the expression even completes. - Fix provided by commit 7d62590d00088e691d8b5a8ba9f613cf285da736: - Introduces a pre-execution memory limit for a single math expression binary operation (default 1 GiB). The limit can be configured via [expressions] math_expression_memory_limit. - Adds a memory estimator that replays the union/combination logic without allocating the actual output to compute an estimated memory footprint for the potential binary operation. - Enforces the limit during expression evaluation; if the estimated memory exceeds the limit, the evaluation returns a descriptive error instead of proceeding, thereby preventing an OOM. - Extends the command handling to thread the memory limit into math command execution and passes the limit to the expression engine (WithMemoryLimit). - Includes tests for the memory estimation logic to validate the behavior. - Vulnerability type and impact: Denial of Service via Memory Exhaustion due to cartesian explosion in binary expression evaluation. The fix prevents excessive memory allocation by estimating memory usage and aborting when the limit would be exceeded. - Affected area: Expressions/mathexp execution path and configuration (defaults.ini, sample.ini) to expose a memory limit control. - Severity/confidence: HIGH confidence that this is a meaningful DoS mitigation for users crafting expressions that produce large intermediate results. The fix is preventative (pre-execution estimate) rather than a reactive crash fix. - Versions affected: Prior to this commit (pre-12.4.0). Grafana 12.4.0 includes the fix. - Practical implication: Users who craft expressions that would otherwise generate a large number of intermediate series (via cartesian-like explosions) will now receive a controlled error indicating the mismatch/over-limit situation, rather than risking memory exhaustion or server instability.
Commit: 7d62590d Affected: Versions prior to 12.4.0 (i.e., all releases before this fix) 2026-04-07 14:32
grafana/grafana Authorization / Information disclosure HIGH
The commit adds batch authorization checks for listing annotations and filters the list results by per-item access rights. Previously, listing annotations could disclose items the user should not access when multiple items were returned in a single bulk check. The change introduces canAccessAnnotations which builds batch checks (organization-scoped and dashboard-scoped annotations) and filters the final list before returning it. This mitigates information disclosure via list endpoints where per-item checks were not enforced. Tests were added to validate unauthorized access handling and correct per-item filtering during List operations in both the Kubernetes REST-like adapter and search path.
Commit: a5798d43 Affected: <= 12.3.x (pre-fix); fix landed in 12.4.0 2026-04-07 12:33
grafana/grafana Access Control / Authorization MEDIUM
The commit removes legacy access control logic and related permissions imports used for annotation/dashboard access checks, replacing them with a newer access control path. Specifically, it eliminates the old RBAC filter (NewAccessControlDashboardPermissionFilter) insertion into SQL query construction and stops passing legacy Filters to the dashboard search. This appears to be an authorization hardening effort intended to unify access control checks under a newer mechanism (OpenFGA-based path mentioned in code comments). While the code changes suggest removing a potential bypass route from the legacy ACL checks, the exact security impact depends on the surrounding new authorization path being correctly enforced in all call sites. The triage notes indicate the intent to mitigate bypasses in legacy ACL checks for annotations and dashboards.
Commit: 64d6656f Affected: Grafana <= 12.3.x (prior to this commit); fixed in 12.4.0 and newer 2026-04-06 16:56
grafana/grafana Race Condition HIGH
The commit adds a GCOM guard that prevents local tenant data deletion until the external GCOM stack is confirmed deleted. prior to this change, local deletion could proceed without verifying the external GCOM state, creating a race where data could be deleted locally while the corresponding external stack still exists, potentially leading to data inconsistency or exposure. The fix introduces a GCOM check in the TenantDeleter run loop and a helper gcomAllowsTenantDeletion to query GCOM for the instance status and only proceed when GCOM reports the stack as deleted.
Commit: c848a737 Affected: < 12.4.0 2026-04-06 14:56
grafana/grafana Authorization / Access control HIGH
The commit hardens the splash screen CTAs by gating role-based/permission-based access to internal/admin URLs and using a safe fallback URL when the user lacks required permissions or admin role. Previously, CTAs could reveal internal admin URLs (e.g., /admin/provisioning) in the splash modal, which could be clicked by non-privileged users, potentially exposing admin endpoints or leaking UI structure. The fix computes the CTA URL based on user roles/permissions and falls back to safe external/docs URLs when the user is not authorized. This is an authorization/access-control hardening rather than a feature addition.
Commit: 395ed163 Affected: Grafana 12.4.0 and earlier (pre-fix for splash CTA gating). 2026-04-06 13:53
torvalds/linux Memory safety (use-after-free) in kernel binder VMA handling (Android binder driver) MEDIUM
The commit contains a targeted fix in the Android binder driver related to VMA (vm_area_struct) handling and vm_ops identity checks. Specifically: - binder/page_range.rs wraps the static vm_operations_struct in a Sync-enabled wrapper (AssertSync) and adjusts the identity check to compare the vm_ops pointer against the inner value (BINDER_VM_OPS.0) rather than the wrapper object. - binder/rust_binder_main.rs defines a small AssertSync<T> wrapper and makes the inner type Sync, ensuring the global C binding type is treated as Sync, with a clarified safety comment. - These changes fix a potential memory-safety issue where an incorrect or non-atomic comparison of vm_ops could lead to misidentification of a VMA, potentially allowing use-after-free or memory misuse in binder IO/vma handling. The vulnerability is described as a memory-safety (use-after-free) risk in the kernel binder VMA handling, mitigated by making the vm_ops identity check precise and ensuring correct Sync semantics for a global C-binding struct. Affects pre-fix 7.0-rc6; fixed in 7.0-rc7 and related patches.
Commit: 1791c390 Affected: <= v7.0-rc6 (prior to this commit) 2026-04-05 18:17
django/django Input validation / Query construction MEDIUM
The commit adds a guard in When.__init__ to prevent internal keyword arguments (_connector, _negated) from propagating to Q(**lookups). If such invalid kwargs are present in the lookups passed to When, it raises a TypeError with a descriptive message listing the invalid kwargs. This is defensive input-validation hardening in query construction to prevent misuse of internal flags during query building. The change appears to be a genuine fix focused on validating inputs rather than a general code cleanup or a test-only change.
Commit: 3b161e60 Affected: Django 5.1.x pre-fix (any 5.1.x release before commit 3b161e60964aff99eddcd2627a486d81c1836b3a) 2026-04-05 14:33
django/django Information disclosure (path leakage in warning output) MEDIUM
The commit hardens warning output by caching and reusing internal Django file prefixes and using skip_file_prefixes to suppress Django’s own filesystem paths from warning traces. Previously, certain warnings could leak internal Django file paths in stack traces (information disclosure). The change introduces django_file_prefixes() to return a tuple of internal Django prefixes and updates warning calls to pass these prefixes, effectively filtering out Django’s own path components from warning output. This reduces leakage of internal filesystem structure in error/warning messages.
Commit: 7b26b64a Affected: Django stable/5.1.x prior to this commit (i.e., the 5.1.x series before 7b26b64a63b5...). 2026-04-05 14:29
django/django Information disclosure HIGH
The commit fixes an information disclosure vulnerability where accessing PartialTemplate.source could leak internal Django file paths via a warning stack trace. The change switches the warning to skip internal Django file prefixes (skip_file_prefixes), so the emitted warning does not reveal internal paths and instead points to the application caller context.
Commit: 34bd3ed9 Affected: 5.1.x before this commit 2026-04-05 14:27
django/django Information Disclosure (UI exposure of password hash details) HIGH
The commit changes the rendering of the password hash details in the admin UI from exposing the raw password hash components (algorithm, iterations, salt, and hash) to using a dedicated template tag that masks sensitive parts. Previously ReadOnlyPasswordHashWidget iterated over hasher.safe_summary(value) and rendered the resulting keys and values, which could reveal the hashing parameters and the hash itself. The fix introduces a new templatetag render_password_as_hash that masks the salt and hash values (and gracefully handles invalid formats) and updates the template to use this tag. This reduces information disclosure from the UI, mitigating the risk of offline password cracking or leakage when an admin UI is accessible. Tests were added to cover valid, invalid, and no-password cases.
Commit: 8a0ad1eb Affected: stable/5.1.x before this commit (pre-patch) 2026-04-05 14:24
django/django Information disclosure / Authorization bypass (UI-level) HIGH
This commit fixes two UI-level issues in the Django admin related to password handling: (1) Password values are no longer disclosed in plaintext on the user change form. Instead, the password field for the User model is rendered as a hashed representation using render_password_as_hash, reducing the risk of exposing plaintext credentials in the admin UI. (2) The Reset password button is shown only to users who have permission to perform a password change operation, preventing unauthorized password reset actions via the admin UI. These changes address information disclosure and authorization/UI exposure concerns in the admin password management flow.
Commit: d755a98b Affected: 5.1.x (stable/5.1.x) prior to commit d755a98b8438c10f3cff61303ceb1fe16d414e9b 2026-04-05 14:23
django/django Log injection HIGH
The commit fixes a log injection vulnerability in response logging by migrating remaining response logging to django.utils.log.log_response(), which escapes untrusted values like request.path before logging. It replaces direct uses of logger.warning for 405/410 responses with log_response(...) to prevent log payload manipulation. Tests are updated to verify correct escaping and logging behavior. Release notes also reference the CVE.
Commit: 95795175 Affected: 5.1.x (5.1.0 to 5.1.10) and 4.2.x (4.2.0 to 4.2.22) prior to the fixes 2026-04-05 14:03
django/django Log Injection / Information Disclosure HIGH
CVE-2025-48432: Escaped formatting arguments in log_response() to mitigate log injection via control characters in request.path. Previously, log_response logged formatting arguments (including request.path) without escaping, allowing CRLF sequences to be written into logs and potentially forge or disrupt log processing. The fix escapes all positional formatting arguments using unicode_escape before logging.
Commit: a07ebec5 Affected: Django 5.1.x series prior to this commit (stable/5.1.x; e.g., 5.1.0 - 5.1.9) 2026-04-05 14:02
django/django Denial of Service (DoS) via repeated headers in ASGI requests HIGH
The commit patches ASGI header processing in Django to fix a potential Denial of Service (DoS) vulnerability related to repeated headers in ASGI requests (CVE-2025-14550). Previously, repeated headers could trigger repeated string concatenations while merging header values, potentially causing super-linear CPU usage and degraded service under crafted requests with many duplicates. The fix switches from per-header string concatenation to aggregating header values in lists (via a defaultdict(list)) and then performing a single join per header. It also normalizes HTTP_COOKIE separately and updates META with joined values, reducing the amount of repeated string processing. Tests add coverage for many repeated headers and ensure META is not excessively mutated, supporting a mitigation against DoS via crafted header sets. Documentation also references the CVE and classifies it as moderate severity.
Commit: eb22e1d6 Affected: 5.1.x (stable/5.1.x) prior to this commit 2026-04-05 13:59
django/django Timing attack / Username enumeration HIGH
CVE-2025-13473: Username enumeration through timing difference in mod_wsgi authentication handler. The mod_wsgi authentication path used by Django's check_password() could reveal whether a username exists by measuring response time differences. The patch introduces a helper _get_user(username) that returns None for missing or inactive users but, in those cases, runs the default password hasher once (via UserModel().set_password("")) to normalize timing. Consequently, the authentication pathway now incurs a similar cost regardless of whether the user exists or is inactive, mitigating a timing-based username enumeration vulnerability. This is a real vulnerability fix addressing a timing side-channel in the mod_wsgi authentication flow; the fix affects how check_password() behaves for non-existent or inactive users by standardizing hashing work, reducing exploitable timing differences.
Commit: 3eb814e0 Affected: Django 5.1.x prior to this commit (mod_wsgi authentication handler check_password). 2026-04-05 13:57
django/django Denial of Service (DoS) / Resource exhaustion HIGH
CVE-2025-32873 describes a Denial-of-Service (DoS) possibility in Django's strip_tags() function. The fix adds a guard to strip_tags() to detect inputs containing large sequences of unclosed opening tags. If a long opening tag sequence is detected (based on a regex that matches a tag starting with a letter and lacking a closing '>' for 1000+ characters) and the number of opening angle-bracket markers ('<') within that match reaches or exceeds MAX_STRIP_TAGS_DEPTH (50), Django raises SuspiciousOperation. This prevents pathological inputs from causing excessive CPU usage during tag-stripping, addressing a potential DoS vector via crafted HTML-like input. Tests were added to ensure that inputs with many unclosed opening tags trigger the exception. The change is a real vulnerability fix and is not just a version bump or a test addition; it adds a concrete runtime guard and accompanying tests.
Commit: 9f3419b5 Affected: 5.1.x before 5.1.9 (vulnerability present in 5.1.0–5.1.8) 2026-04-05 13:56
django/django SQL injection / Query construction safety HIGH
The commit adds input validation to FilteredRelation alias handling to reject any alias containing a period. Previously, an alias like 'book.alice' could be used in annotations, leading to unquoted identifiers in the SQL ON clause and potentially invalid or insecure query construction. The patch raises a ValueError when a dot is present in the alias, preventing problematic SQL generation. Tests were added to enforce this behavior (test_period_forbidden) and to ensure ordering tests expect a ValueError rather than a DatabaseError for such aliases.
Commit: 005d60d9 Affected: 5.1.x series prior to this commit (stable/5.1.x); CVE-2026-1312 fix 2026-04-05 13:51
django/django Input validation / URL length check (redirects) HIGH
The commit fixes a security-related input validation issue in URL redirects by increasing the maximum allowed redirect URL length. Previously HttpResponseRedirectBase used MAX_URL_LENGTH (2048) to guard redirects, which was too restrictive and could disrupt legitimate redirects to third-party services. The patch introduces MAX_URL_REDIRECT_LENGTH (16384) and uses it to validate redirect targets, addressing CVE-2025-64458. The change is not merely a dependency bump; it alters runtime validation logic and adds tests to cover redirects up to the new limit.
Commit: a8cf8c29 Affected: Django 5.1.x series prior to this commit (pre-fix). 2026-04-05 13:42
django/django SQL Injection via FilteredRelation column aliases on PostgreSQL HIGH
The commit implements a real security fix for CVE-2025-13372 by guarding against dollar signs in column aliases for PostgreSQL when using FilteredRelation. It adds a runtime guard in PostgreSQL's SQL compiler to prevent alias names containing '$' from being used, and augments tests/docs to reflect the security improvement. This is not merely a dependency bump or a cleanup; it changes behavior to mitigate a SQL injection surface related to alias generation in FilteredRelation on PostgreSQL.
Commit: 5b90ca1e Affected: 5.1.x before 5.1.15 (i.e., 5.1.0 through 5.1.14) 2026-04-05 13:42
django/django XSS HIGH
The commit refactors GIS geometry widgets to remove inline JavaScript from templates and move initialization to external JavaScript. Previously, the GIS widgets rendered inline JavaScript in templates that interpolated template context values (e.g., geom_type, id, name, map_srid) directly into a JavaScript object and instantiated MapWidget. If any of these context values could be influenced by user input and not properly escaped in the JS context, this could lead to cross-site scripting (XSS) via injected script code in the resulting page. The fix removes the inline script blocks, uses json_script to pass data safely to a separate JavaScript file, and relies on a client-side MapWidget that reads data from a safe data container. This reduces the attack surface for XSS by avoiding inline script construction with untrusted data and moving initialization into external JavaScript.
Commit: f2f6046c Affected: 5.1.x (stable/5.1.x) and earlier 2026-04-05 13:41
django/django Input Validation in multipart header parsing MEDIUM
The commit fixes a bug in multipart header parsing where the parser could be fed the entire header line (including the header name) instead of just the header value. This could lead to incorrect parsing or misinterpretation of header parameters for multipart requests. The change tightens input handling by splitting the header line at the first colon and only passing the value portion to parse_header_parameters, ensuring the header name is not mis-parsed as part of the value. A test asserting proper handling of malformed headers (e.g., spaces around the colon) was added to validate robust parsing.
Commit: 41ff30f6 Affected: 5.1.x before commit 41ff30f6f9d072036be1f74db8f0c8b21565299f 2026-04-05 13:35
django/django XSS HIGH
The commit fixes an XSS vulnerability in escapejs by escaping additional control characters in the JavaScript escaping map. Previously, escapejs only escaped ASCII control characters below 32 (and 0x7F range may not have been fully covered), leaving characters in the C0/C1 ranges (0x7F-0x9F) potentially unescaped and usable to bypass escaping and inject inline JavaScript or break out of intended contexts. The patch broadens escaping to include 0x7F-0x9F and updates tests to cover these code points, hardening escaping of user-provided data embedded into JavaScript contexts within templates and JSON.
Commit: 07419875 Affected: Django 5.1.x (stable/5.1.x) prior to this commit 07419875685997a30cd281396e0dc867e98aefe3 2026-04-05 13:33
django/django Header injection / Input validation in email handling (SMTP address parsing) HIGH
Genuine security fix. The commit modernizes Django's email handling to Python's email API and, crucially, adds strict address validation in the SMTP path to prevent header injection / CRLF-based header manipulation. The SMTP backend now calls prep_address to validate and canonicalize addresses, enforcing a single mailbox and performing (optionally) IDNA encoding for domains. It raises ValueError on invalid addresses, preventing injection attempts that rely on crafted addresses to inject extra headers (e.g., CRLF sequences leading to injected headers). This, together with switching to email.policy.SMTP for message construction, closes a class of header-injection vectors in django.core.mail. The changes also deprecate legacy API usage related to headers and address sanitization, further reducing attack surface.
Commit: 9ab19916 Affected: 5.1.x prior to this commit (stable/5.1.x) 2026-04-05 13:33
django/django Privilege escalation / Incorrect permissions due to race condition when creating filesystem objects HIGH
CVE-2026-25674: Django fixes a race condition where process umask changes could affect permissions when creating filesystem objects (directories/files) in multi-threaded environments. The patch introduces safe_makedirs in django.utils._os and uses it in file-based cache and filesystem storage backends to apply explicit permissions (via chmod) after mkdir, removing reliance on the process-wide umask and preventing unintended permissions. This is complemented by tests validating safe_makedirs behavior. The change aligns Django with a CPython fix proposal to mitigate umask-related races when creating intermediate directories. Impact: Privilege/permission expansion or incorrect permissions on newly created filesystem objects due to race conditions around umask during directory creation. Affects code paths that create directories with explicit modes (e.g., file-based cache, storage backends) prior to this commit.
Commit: 019e44f6 Affected: stable/5.1.x before this commit 2026-04-05 13:33
django/django SQL Injection via unquoted identifiers (aliases) in ORM-generated SQL HIGH
The commit enforces quoting of all database object names (tables, columns, and importantly aliases produced by annotate()/alias()) across ORM-generated SQL. Previously, some identifiers could be emitted without quoting (notably user-supplied aliases), which could be interpreted by the database in unsafe ways or enable bypasses when interfacing with raw SQL (e.g., RawSQL). The change switches all identifier quoting to a single quote_name() pathway, introduces memoization for quoted identifiers, and keeps quote_name_unless_alias as an alias for backward compatibility. This hardens SQL generation against crafted identifiers with special characters, thereby mitigating potential SQL injection vectors tied to unquoted identifiers. It also updates tests and documentation to reflect the new behavior.
Commit: f05fac88 Affected: Django 5.1.x series prior to this commit (stable/5.1.x) 2026-04-05 13:32
django/django Path handling / potential path traversal edge-case MEDIUM
The commit fixes an edge-case in ASGIRequest.path_info calculation. Previously, the code derived path_info by simply removing the script_name prefix from the request path (using removeprefix). This caused incorrect path_info for request paths that start with the script_name but do not have a slash boundary immediately after it. Example: path "/rootprefix/somepath/" with script_name "/root" would incorrectly strip "/root" and yield "prefix/somepath/". The new logic only strips the script_name when the path starts with script_name + "/" or when the path exactly equals script_name. Otherwise, it preserves the full path. This prevents miscomputation of path_info that could lead to unintended access to resources or leakage of path data, addressing a path handling vulnerability.
Commit: b33c31d9 Affected: 5.1.x (stable/5.1.x) prior to this commit b33c31d992591bc8e8d20ac156809e4ae5b45375 2026-04-05 13:21
django/django Security bypass / information disclosure via ORM query construction HIGH
The commit adds validation to prevent certain internal kwargs (_connector, _negated) from being propagated when expanding dictionaries into Q objects during ORM query construction. This blocks the ability to inject or influence Q semantics via dictionary expansion in filter/exclude calls, which could otherwise enable security bypass or information disclosure by altering the intended query behavior. The change introduces PROHIBITED_FILTER_KWARGS and raises a TypeError if any of these keys are present in the kwargs, plus a test verifying the rejection.
Commit: 3c3f4635 Affected: 5.1.x (pre-fix) 2026-04-05 13:21
django/django XML deserialization / Deserialization of untrusted input HIGH
The XML deserializer in Django previously allowed nested tags inside field content when deserializing XML fixtures. The commit adds a guard that raises SuspiciousOperation when an element has child nodes (i.e., unexpected nested tags such as <em> inside a field value). This prevents crafting XML fixtures that might be misinterpreted or bypass validation during deserialization. The fix updates the XML deserializer (check_element_type) and gracefully propagates SuspiciousOperation through existing code paths, and adds tests/docs to reflect the change.
Commit: 73c5e945 Affected: stable/5.1.x and earlier in the 5.x line; backported/fixed in this commit (73c5e94521c5...) 2026-04-05 13:20
django/django Information disclosure / Access control bypass via improper fetch-mode propagation MEDIUM
The commit implements propagation of the ORM's fetch_mode state across related objects when traversing relationships. Previously, fetch_mode restrictions applied to the top-level queryset but were not consistently propagated to related objects fetched via relationships (forward and reverse). The patch copies the fetch_mode from a source instance to related objects in multiple code paths (prefetching, related descriptors, and query iteration), and updates tests and docs to reflect that fetch modes apply to an entire object graph, not just the initial model. This reduces the risk of information disclosure or access-control bypass where related objects could be fetched under a different (potentially less restrictive) fetch_mode. The triage notes align with this being a security fix improving consistency and enforcement of fetch-mode-based access controls across related fetches, rather than introducing a new feature.
Commit: 6dc9b040 Affected: 5.1.x (before this commit) 2026-04-05 13:15
django/django Log Injection HIGH
The commit fixes a log injection vulnerability in Django's runserver when handling NOT FOUND responses by centralizing log handling and escaping potentially malicious input in log messages. It migrates WSGIRequestHandler.log_message() to use a robust log_message() helper (based on log_response()) and escapes string arguments via unicode_escape, ensuring status_code handling is safe. This prevents crafted request content (e.g., ANSI control sequences or CR/LF) from altering log flow or injecting content into server logs. References CVE-2025-48432. The change includes an accompanying test that ensures control sequences are escaped in logs.
Commit: 9bb83925 Affected: 5.1.x (stable/5.1.x) 2026-04-05 13:14
django/django Denial of Service (DoS) / performance issue in XML deserialization HIGH
The commit fixes CVE-2025-64460: a Denial of Service (DoS) / performance vulnerability in Django's XML deserializer. Previously, the inner text collection in the XML deserializer used getInnerText() which recursively extended a list with the results from child nodes. This approach caused quadratic time complexity on crafted XML with deep nesting, enabling CPU consumption attacks. The patch splits collection of inner texts from the join operation by introducing a separate getInnerTextList() that collects per-subtree text, and only joins once at the end, reducing the overall complexity to linear in input size. It also includes a minor performance mitigation for minidom checks and wraps expandNode calls with a fast-path cache clearing. The change is targeted at the XML deserialization path used by fixtures/XML serialization.
Commit: 50efb718 Affected: Django 5.1.x before 5.1.15 (i.e., 5.1.0 through 5.1.14) 2026-04-05 13:12
django/django Directory traversal / path traversal via archive.extract() HIGH
The commit fixes a partial directory-traversal vulnerability in django.utils.archive.extract() (CVE-2025-59682). Previously, the code performed a naive path check using filename.startswith(target_path) after joining the archive entry name with the target directory. This could be bypassed when an archive member path started with the target directory name but resolved outside the target (e.g., an absolute path inside the archive like /tmp/evil.txt or a path such as /tmp/baseevil.txt). The patch replaces the check with os.path.commonpath([target_path, filename]) and raises SuspiciousOperation if the computed path is not within the target directory, effectively preventing extraction outside the intended directory. The change addresses partial directory traversal during archive extraction and is reflected in releases for affected branches (4.2, 5.1, 5.2).
Commit: 924a0c09 Affected: 4.2.x: <= 4.2.24; 5.1.x: <= 5.1.12; 5.2.x: <= 5.2.6 2026-04-05 13:11
django/django Content Security Policy (CSP) enforcement / XSS mitigation HIGH
The commit replaces a custom CSP middleware used in the Django admin Selenium tests with Django's official ContentSecurityPolicyMiddleware and configures SECURE_CSP to a strict policy. It also adds a test assertion to verify that no CSP violations are emitted in browser console logs. This is a defensive hardening fix addressing content security policy handling to reduce the risk of XSS in the admin interface stemming from misconfigurations in a custom CSP middleware, aligning admin CSP behavior with Django's built-in CSP support.
Commit: ff0ff98d Affected: stable/5.1.x 2026-04-05 13:09
django/django SQL Injection HIGH
CVE-2025-59681: Django's QuerySet.annotate(), alias(), aggregate(), and extra() on MySQL/MariaDB could be vulnerable to SQL injection via crafted column aliases passed through dictionaries (via **kwargs). The commit updates the validation of column aliases to forbid unsafe characters (notably including '#'), adjusts the error messages, and adds tests. This directly hardens the code paths that interpolate user-supplied alias strings into SQL, preventing injection through the alias identifiers.
Commit: 41b43c74 Affected: 5.1.x before 5.1.13 (i.e., <= 5.1.12) 2026-04-05 13:09
rails/rails XSS via unsafe Markdown link rendering in Action Text MEDIUM
The commit introduces Action Text Markdown conversion and a safety mechanism for links during Markdown rendering. It adds to_markdown conversions across Content, Fragment, RichText, and Attachments, plus a new MarkdownConversion module that converts HTML to Markdown. Crucially, it enforces that Markdown links are filtered against Loofah's allowed URI protocols to prevent unsafe schemes (e.g., javascript:) from appearing in output. This mitigates a potential XSS/vector risk where attacker-supplied content could be transformed into unsafe Markdown links and rendered in a way that executes script code. The vulnerability is mitigated by disallowing dangerous protocols and stripping unsafe link representations during Markdown generation.
Commit: e63f3845 Affected: 8.1.0 - 8.1.2 (prior to the 8.1.3 patch) 2026-04-05 13:09
rails/rails Destructive actions protection (production environment) misconfiguration / bypass risk HIGH
The commit moves the protected_environments configuration from a per-class scope (via class_attribute) to a global setting on the ActiveRecord module (ActiveRecord.protected_environments) and updates all checks to reference this global setting. Previously, database task checks referenced ActiveRecord::Base.protected_environments, which could be misaligned with subclass-specific configurations and lead to inconsistent protection against destructive actions in production. The fix ensures a single, global source of truth for production-destructive-action protection, deprecates the per-class accessors, and updates related code paths (migration checks, model schema defaults, and database task checks) to consult ActiveRecord.protected_environments. This reduces the risk that destructive actions could bypass protection due to scoping issues or per-class configuration. A deprecation path is provided for existing ActiveRecord::Base.protected_environments usage. Impact mirrors a configuration vulnerability rather than an remote-exploit, centered on ensuring destructive-action protection in production is consistently enforced across database tasks.
Commit: d1981d03 Affected: 8.1.0 - 8.1.3 2026-04-05 13:05
rails/rails Deserialization (cache deserialization) vulnerability; potential DoS via corrupted cache payloads HIGH
The commit improves handling of deserialization errors in the Rails cache layer to prevent unhandled exceptions when confronted with corrupted or truncated cache payloads. Previously, deserialization (Marshal-based) of cache entries could raise exceptions or crash the process if the payload could not be deserialized (e.g., due to memcached delivering a truncated payload). The patch ensures such errors are reported (via ActiveSupport.error_reporter) and treated as a cache miss rather than propagating an exception. It also introduces safeguards to raise a controlled Cache::DeserializationError for certain lazy-loading paths and to wrap deserialization during compressed payload loading with explicit error handling. Tests were added to verify that corrupted payloads result in error reporting and cache miss behavior, and that lazy-loaded values raise DeserializationError when payloads can’t be deserialized. This reduces risk from corrupted or crafted cache payloads and mitigates potential DoS or crash scenarios originating from deserialization of untrusted cache data.
Commit: d51ad367 Affected: Rails 8.1.x prior to 8.1.3 (i.e., 8.1.0–8.1.2) 2026-04-05 13:03
rails/rails Information disclosure / Environment variable leakage MEDIUM
This commit implements explicit cleanup of environment variables to prevent ENV leakage across processes and test boundaries. Specifically, it changes the migrations task to delete ENV['FROM'] after use and uses the deleted value for logic, reducing the risk that the value remains in the process environment. It also strengthens test cleanup by removing or restoring ENV['RAILS_ENV'] (and related vars) in teardown and via helpers, ensuring environment vars are not leaked into child processes. Collectively, this reduces potential information disclosure where sensitive data or configuration exposed in ENV could be inherited by spawned processes or future operations.
Commit: d8e15b10 Affected: < 8.1.3 (i.e., 8.1.0 through 8.1.2); fixed in 8.1.3+ 2026-04-05 12:59
rails/rails TOCTOU / Temp file name predictability during atomic write MEDIUM
The commit changes Rails' atomic file write to use a temporary file name that includes a random suffix. Previously the temporary file name was effectively predictable (based on the target file name) and could be pre-created by an attacker in the same directory, enabling a TOCTOU/race condition or a symlink-like interference during the atomic write. The patch mitigates this by appending a random suffix to the temporary file name, reducing predictability and lowering the likelihood of successful pre-creation or race attacks. Tests were added to verify that two atomic writes produce unique temp file names, reinforcing the security intent.
Commit: cf6d46fb Affected: 8.1.x prior to this patch (e.g., <= 8.1.3) 2026-04-05 12:57
rails/rails Information disclosure / cross-test environment variable leakage HIGH
The commit introduces a LeakChecker tool that snapshots the process environment before each test and compares it against the environment after test teardown. If there are any additions, removals, or changes to environment variables (excluding an allowlisted set), it fails the test run with a detailed message. This mitigates information disclosure risks where environment variables could be left set by one test and inadvertently exposed or influence subsequent tests, logs, or behavior.
Commit: 1b3bb1c6 Affected: < 8.1.3 (Rails 8.1.x prior to this commit; i.e., 8.1.0 through 8.1.2) 2026-04-05 12:57
rails/rails Information disclosure via ENV leakage across test boundaries (test isolation weakness) HIGH
The commit adds a LeakChecker tool that records ENV before_setup and after_teardown and fails tests if there are any ENV changes (excluding explicitly allowed keys). This mitigates risk of environment variable leakage across test boundaries, which could lead to information disclosure of sensitive data or internal configuration flowing between tests or into test logs. It represents a defensive hardening of the test harness rather than a patch to production code. The fix targets test isolation, reducing the surface area for information disclosure through ENV leaks in tests.
Commit: 64aa7ee9 Affected: 8.1.x prior to 8.1.3 (i.e., Rails 8.1.0–8.1.2) 2026-04-05 12:57
rails/rails Race Condition / TOCTTOU in atomic file writes HIGH
The commit fixes a race condition in atomic file writes by including a random suffix in the temporary file name. Previously, the atomic_write implementation could generate the same temp file name in concurrent writes, causing collisions, TOCTTOU-like behavior, potential data corruption or leakage. The random suffix ensures unique temp names per writer, reducing race conditions and ensuring safer atomic writes.
Commit: 5f72e361 Affected: Rails 8.1.x prior to the fix (e.g., 8.1.0 - 8.1.2); fixed in 8.1.3 and later 2026-04-05 12:56
rails/rails Information disclosure (ENV leakage in test suite) HIGH
The commit fixes an information disclosure risk where the test suite could leak the sensitive DATABASE_URL environment variable by manipulating ENV directly in tests without proper scoping. The changes switch from ad-hoc ENV mutations to scoped blocks (with_env) to ensure DATABASE_URL is not leaked to the process environment or inherited by child processes during test execution. This reduces the chance that sensitive database configuration could be exposed via environment leakage in test logs, subprocesses, or interconnected test steps.
Commit: 8f88c5ea Affected: 8.1.x prior to this commit (e.g., 8.1.0 - 8.1.2); fixed in this commit for 8.1.3 and later 2026-04-05 12:54
rails/rails Information Disclosure via environment variable (DATABASE_URL) leakage in test environment HIGH
The commit prevents an information disclosure vulnerability where the Rails test suite could leak the DATABASE_URL environment variable. Previously, tests were setting ENV['DATABASE_URL'] globally, which could propagate to child processes or logging, exposing sensitive database configuration. The fix removes the global ENV manipulation and scopes the DATABASE_URL value within a controlled block using with_env, and it also removes reliance on a global config/database.yml in those tests. This ensures that DATABASE_URL is not unintentionally exposed during test execution.
Commit: 07f53df0 Affected: 8.1.x prior to this commit (pre-07f53df0a9b881ffc040fa57289b5e0316cc3d5d) 2026-04-05 12:54
rails/rails Information Disclosure (ENV leakage in tests) HIGH
The commit fixes an information-disclosure vulnerability where the DATABASE_URL environment variable could leak into the test environment. The previous approach relied on a YAML-based config (config/database.yml) and sometimes set DATABASE_URL globally, allowing leakage to test logs or leakage checks. The fix removes the YAML config, provides a helper to delete it, and scopes the DATABASE_URL usage to explicit blocks via with_env, ensuring credentials are not exposed outside the controlled test context.
Commit: f59a28e5 Affected: 8.1.x prior to this fix (e.g., <= 8.1.3) 2026-04-05 12:53
rails/rails Information Disclosure HIGH
The commit mitigates an information disclosure risk in the Rails test suite by stopping direct modification of the RAKEOPT environment variable and instead using a quiet execution wrapper. Previously, the test helper set ENV["RAKEOPT"] to a value (e.g., enabling --silent) and even restored it, which could lead to leakage of internal configuration/state through environment state visible in test logs or artifacts. The change removes the environment mutation (and the accompanying teardown of RAKEOPT) and relies on a quiet wrapper to suppress output, reducing the chance that RAKEOPT or related internal settings leak into logs.
Commit: 7e3bb1ac Affected: 8.1.x prior to 8.1.3 (fixed in 8.1.3 by this commit) 2026-04-05 12:51
rails/rails Environment-based destructive action protection / API surface hardening MEDIUM
This commit centralizes the protected_environments API by moving it from ActiveRecord::Base to ActiveRecord, defaulting to production, and introducing deprecation warnings for older usage. This hardens protection against destructive migrations by ensuring a single, canonical source of truth for environment-based restrictions and guiding developers to migrate usage. It reduces the risk of accidentally allowing destructive actions in non-production environments due to API scoping mistakes or legacy code paths. The tests are updated to reflect the new API usage and to signal deprecation for the old path.
Commit: 442408e2 Affected: 8.1.0 - 8.1.2 2026-04-05 12:44
rails/rails Glob injection / Path traversal HIGH
This commit fixes a security vulnerability in ActiveStorage DiskService#delete_prefixed where a blob key containing glob metacharacters could be fed into Dir.glob, causing unintended file deletions. The fix escapes glob metacharacters in the resolved path and preserves a trailing separator when needed, preventing untrusted input from being treated as a glob pattern. It also adds tests demonstrating the escaped behavior and that only the intended files are deleted. The vulnerability aligns with CVE-2026-33202 (glob injection/path traversal).
Commit: 8fdf7da3 Affected: 8.1.0 through 8.1.2 (pre-8.1.3); fixed in 8.1.3 2026-04-05 12:41
rails/rails Information Disclosure via exception backtrace in error handling logs/notifications HIGH
The commit changes Action Pack's rescue_from handling to stop emitting exception backtrace information in the structured event payload for rescue_from events. Previously, the first line of the exception backtrace (sanitized by removing Rails.root) could be included in the event payload (and thus logged/observed via ActiveSupport notifications), leaking server filesystem paths (Rails.root) and other sensitive path information. The patch removes the backtrace from the emitted event payload entirely, reducing information disclosure risk via error handling logs/notifications.
Commit: b47cc51b Affected: 8.1.0 - 8.1.2 (pre-fix); 8.1.3+ includes the fix in this commit 2026-04-05 12:39
rails/rails XSS (mXSS) via malformed HTML attribute name in Action View tag helpers HIGH
The commit adds guards in Action View's tag_options to skip blank HTML attribute names across all three iteration paths (top-level options and inner data/aria hashes). This prevents rendering of attributes with empty names, which could lead to malformed HTML and potentially enable mixed or reflected XSS (mXSS). The change is accompanied by tests that reject blank keys in top-level options, data, and aria hashes, and a test ensuring blank attribute names do not appear in the output. The CVE reference CVE-2026-33168 and GHSA are cited in the commit. In short: this is a genuine security vulnerability fix for XSS via malformed HTML from blank attribute names in Rails' tag helpers; it prevents generation of attributes with empty names that could be exploited by attackers to inject code or bypass sanitizers.
Commit: 12db7015 Affected: 8.1.0 - 8.1.2 (pre-fix); fixed in 8.1.3 2026-04-05 12:38
rails/rails XSS (development/debug exception page) HIGH
This commit fixes an XSS in Rails' development debug exception page by escaping user-controlled exception messages when copied to the clipboard. Previously the exception message could be output with raw HTML inside a script tag used for the copy-to-clipboard feature, allowing HTML content to be injected if the message contained HTML. The patch replaces raw with default ERB escaping for the copied message and adds a test asserting escaping of the message (e.g., turning <script> into &lt;script&gt;). This mitigates a development-only XSS risk (CVE-2026-33167).
Commit: 4df80896 Affected: Rails 8.1.x releases prior to 8.1.3 (development error pages) 2026-04-05 12:36
rails/rails TOCTOU race condition in atomic file write HIGH
The commit targets a race condition (TOCTOU) in File.atomic_write by refactoring the operation to write atomically: introduce a random temporary filename via SecureRandom and open the temp file with EXCL to avoid overwriting an existing file, plus removing a heuristic that probed directory permissions. The intent is to prevent a window where an attacker could influence the destination file or its permissions during the atomic rename. However, the patch as presented appears to contain a bug: the computed random suffix (tmp_suffix) is not actually incorporated into the temporary filename (tmp_path), which means the temporary path may be deterministic across invocations. In that case, the intended race-condition mitigation may be ineffective and could even introduce instability in concurrent environments. The net effect, given the snippet, is ambiguous: while the approach aligns with TOCTOU mitigation, the missing random component undermines the security benefit and could break safe atomic replacement under concurrent access.
Commit: f781cc50 Affected: Rails 8.1.x prior to this commit (<= 8.1.3) 2026-04-05 12:36
rails/rails Code execution (hook loading hardening) MEDIUM
The commit adds guard_load_hooks in ActionPack Railties to guard/whitelist the loading of hooks for ActionController and ActionDispatch. This hardening mitigates potential code execution paths via user-controlled or misconfigured load hooks during Rails initialization. By restricting which hooks can be loaded (and likely when), it reduces the risk that arbitrary code could be executed at boot or during initialization from external components. The fix appears to be a defensive measure to prevent abuse of Rails' hook-loading mechanism, rather than a fix for a widely-known external vulnerability; its impact depends on whether untrusted code can register or inject load hooks that Rails would execute during startup.
Commit: 6684aca3 Affected: 8.1.x prior to 8.1.3 (i.e., 8.1.0 - 8.1.2) 2026-04-05 12:33
rails/rails Information disclosure via leak of request/state during middleware stack initialization MEDIUM
The patch targets a potential information disclosure during middleware stack construction by altering how the Flash middleware attaches its request methods. It moves the inclusion of Flash::RequestMethods behind an ActiveSupport.on_load(:action_dispatch_request) callback and removes an eager require of action_dispatch/request/session. This lazy-loading approach prevents early exposure or leakage of request/state objects while the middleware stack is being built, reducing the risk of information leaking across requests via the request object.
Commit: de345feb Affected: 8.1.0 - 8.1.2 (prior to the fix; 8.1.3 includes the fix) 2026-04-05 12:33
rails/rails TOCTOU race condition in atomic file write and permission handling MEDIUM
The commit refactors File.atomic_write to reduce TOCTOU/race-prone behavior and preserve permissions when writing a file atomically. The previous approach relied on a Tempfile-based path and a prior permission probing mechanism. The new code: - Uses a securely named temporary file with a random hex suffix (SecureRandom.hex) in the destination directory, avoiding deterministic names that could be guessed by an attacker. - Creates the temp file with exclusive creation (EXCL) to prevent races where a file could be created between checks and use of a non-unique name. - Captures the original file's permissions (old_stat) beforehand and applies them to the new file, ensuring the destination ends up with the intended permissions. - Cleans up on error (closes and unlinks the temp file) to prevent leaks. - Removes the previous probe-based permission check (which created a temporary file in the target directory to infer default permissions), reducing side effects and potential information disclosure. This addresses race conditions in atomic writes by ensuring the temporary file is securely created, with proper cleanup and permission handling, and by avoiding a race-prone path that could leak information or grant unintended permissions.
Commit: 93ef814f Affected: 8.1.x prior to 8.1.3 (e.g., 8.1.0 - 8.1.2) 2026-04-05 12:32
rails/rails Parameter tampering / metadata injection into internal state HIGH
The commit implements a security fix for Active Storage Direct Uploads by filtering user-supplied metadata to strip internal-use keys (analyzed, identified, composed) from the metadata before persisting. Previously, metadata storage could include attacker-controlled keys that map to internal state, enabling parameter tampering and potential manipulation or leakage of internal blob state via DirectUpload metadata. The patch adds a PROTECTED_METADATA list, filters metadata in create_before_direct_upload!, and includes tests to verify the behavior.
Commit: 0dbaa44c Affected: Rails 8.1.x up to 8.1.3 inclusive (Active Storage Direct Uploads) prior to this fix. 2026-04-05 12:30
rails/rails XSS MEDIUM
The commit adds escaping of CommonMark markdown metacharacters in Action Text markdown generation to ensure text nodes are treated as literal text by Markdown renderers, reducing the risk of XSS via injected markdown formatting. It introduces ActionText::MarkdownConversion.escape_markdown_text, updates Content#to_markdown to wrap attachment markdown in an action-text-markdown element (so content is passed through without escaping), and adjusts how markdown links are rendered to escape their text. Overall, it hardens markdown rendering against user-supplied content that could otherwise be interpreted as formatting (e.g., headings, links, or other markdown constructs) and potentially lead to XSS when rendered by a Markdown processor.
Commit: 96aeac6c Affected: 8.1.3 and earlier 2026-04-05 12:21