Skip to main content

Rails Active Storage EUVDEUVD-2026-51270

| CVE-2026-66066 CRITICAL
Initialization of a Resource with an Insecure Default (CWE-1188)
9.5
CVSS 4.0 · Vendor
Share

Severity by source

Vendor (CNA) PRIMARY
9.5 CRITICAL
CVSS:4.0/AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H/E:X/CR:X/IR:X/AR:X/MAV:X/MAC:X/MAT:X/MPR:X/MUI:X/MVC:X/MVI:X/MVA:X/MSC:X/MSI:X/MSA:X/S:X/AU:X/R:X/V:X/RE:X/U:X
vuln.today AI
10.0 CRITICAL

Network-reachable unauthenticated upload endpoint; S:C because file read extends beyond Active Storage's trust boundary to arbitrary server paths and enables full RCE via Rails signing secrets.

3.1 AV:N/AC:L/PR:N/UI:N/S:C/C:H/I:H/A:H
4.0 AV:N/AC:L/AT:P/PR:N/UI:N/VC:H/VI:H/VA:H/SC:H/SI:H/SA:H
SUSE
8.9 HIGH
AV:N/AC:H/PR:N/UI:N/S:C/C:H/I:H/A:L
Red Hat
8.9 HIGH
qualitative

Primary rating from Vendor (CNA).

CVSS VectorVendor

Attack Vector
Network
Attack Complexity
Low
Privileges Required
None
User Interaction
None
Scope
X

Lifecycle Timeline

4
Patch available
Jul 30, 2026 - 20:03 EUVD
CVSS changed
Jul 30, 2026 - 19:22 NVD
9.5 (CRITICAL)
Analysis Generated
Jul 30, 2026 - 00:17 vuln.today
CVE Published
Jul 29, 2026 - 22:48 oss-security
CRITICAL

Description PRE-NVD

Disclosed via oss-security. NVD scoring and full description are pending.

AnalysisAI

Arbitrary file read and remote code execution in Ruby on Rails Active Storage's libvips-based variant processor allows unauthenticated remote attackers to upload a crafted file and invoke unsafe libvips 'unfuzzed' operations, disclosing arbitrary server files including process environment variables that typically contain secret_key_base and external service credentials. Applications using the libvips variant processor (the default since load_defaults 7.0) that accept image uploads from untrusted users across activestorage versions below 7.2.3.2, 8.0.5.1, and 8.1.3.1 are affected. No public exploit code has been released at disclosure time (July 30, 2026), but independent researchers from Ethiack and GMO Flatt Security assess that AI-assisted POC development is feasible within hours, making immediate patching critical.

Technical ContextAI

Active Storage, Rails' built-in file attachment framework, delegates image variant generation to libvips via the ruby-vips gem when configured with config.active_storage.variant_processor = :vips. libvips categorizes its format handlers as either fuzzed (hardened against malicious input) or 'unfuzzed' (unsafe for untrusted content, often backed by third-party libraries handling non-web formats). Since libvips 8.13, a blocking API exists - the VIPS_BLOCK_UNTRUSTED environment variable or Vips.block_untrusted(true) call - that prevents unfuzzed operations from executing. Active Storage did not invoke this mechanism, leaving all unfuzzed loaders and savers exposed to attacker-controlled files. CWE-1188 (Insecure Default Initialization of Resource) is the root cause: the safeguard existed in the dependency but was never activated. When a user uploads a crafted file and variant generation is triggered, libvips may invoke an unfuzzed operation that reads arbitrary filesystem paths - including /proc/self/environ - returning the contents as image data the attacker can retrieve.

RemediationAI

The primary fix is upgrading the rails gem to 7.2.3.2, 8.0.5.1, or 8.1.3.1 as appropriate, and simultaneously upgrading libvips to version 8.13 or later - Rails patching alone is insufficient if the system libvips remains below 8.13. Following any confirmed or suspected exposure, all secrets readable by the application process must be rotated: secret_key_base (which invalidates active user sessions and affects encrypted cookies, signed cookies, signed global IDs, and Active Storage signed URLs), the Rails master key (RAILS_MASTER_KEY or config/master.key) along with all config/credentials.yml.enc contents it decrypts, Active Storage backend credentials (S3, GCS, or Azure keys), database credentials, and all third-party API tokens. Do not retain an exposed secret as a rotation fallback. If an immediate upgrade is blocked and libvips >= 8.13 is already installed, set the environment variable VIPS_BLOCK_UNTRUSTED=1 as a temporary workaround - libvips reads this at startup to block unfuzzed operations. Applications with ruby-vips >= 2.2.1 can alternatively call Vips.block_untrusted(true) from an initializer. If libvips < 8.13 is in use, no in-place workaround exists: the only option is removing the ruby-vips dependency from the Gemfile (feasible for applications using ruby-vips only for image analysis rather than variant generation). WAF-based mitigations are assessed as having highly limited and configuration-specific effectiveness per linked research from Ethiack and GMO Flatt Security and should not be relied upon as a primary control.

Vendor StatusVendor

SUSE

Severity: Important
Product Status
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 15 SP7 Not-Affected
SUSE Linux Enterprise High Availability Extension 16.0 Affected
SUSE Linux Enterprise High Availability Extension 16.1 Affected
SUSE Linux Enterprise High Performance Computing 15 SP7 Not-Affected

Share

EUVD-2026-51270 vulnerability details – vuln.today

This site uses cookies essential for authentication and security. No tracking or analytics cookies are used. Privacy Policy