|
| 1 | +--- |
| 2 | +layout: advisory |
| 3 | +title: 'CVE-2026-66066 (activestorage): Possible arbitrary file read and remote code |
| 4 | + execution in Active Storage variant processing' |
| 5 | +comments: false |
| 6 | +categories: |
| 7 | +- activestorage |
| 8 | +- rails |
| 9 | +advisory: |
| 10 | + gem: activestorage |
| 11 | + framework: rails |
| 12 | + cve: 2026-66066 |
| 13 | + ghsa: xr9x-r78c-5hrm |
| 14 | + url: https://www.cve.org/CVERecord/SearchResults?query=CVE-2026-66066 |
| 15 | + title: Possible arbitrary file read and remote code execution in Active Storage |
| 16 | + variant processing |
| 17 | + date: 2026-07-29 |
| 18 | + description: |- |
| 19 | + ## Impact |
| 20 | +
|
| 21 | + In its default configuration, a Rails application that displays image |
| 22 | + variants may allow an unauthenticated attacker to read arbitrary files |
| 23 | + from the server, including the process environment. That environment |
| 24 | + typically holds secret_key_base and often credentials for external |
| 25 | + systems, which may in turn allow escalation to remote code execution |
| 26 | + or lateral movement to those systems. |
| 27 | +
|
| 28 | + ## Affected applications |
| 29 | +
|
| 30 | + An application is affected if it meets all of these requirements: |
| 31 | +
|
| 32 | + * Uses libvips for Active Storage image processing. This is |
| 33 | + config.active_storage.variant_processor = :vips, which |
| 34 | + load_defaults 7.0 set and no later default has changed. |
| 35 | + * Allows image uploads from untrusted users. |
| 36 | + Generating variants is not a separate requirement. |
| 37 | +
|
| 38 | + ## Workarounds |
| 39 | +
|
| 40 | + If libvips < 8.13 is being used, there are no workarounds available |
| 41 | + other than removing the dependency on libvips from the application. |
| 42 | + Some applications may have ruby-vips declared as a dependency only |
| 43 | + for image analysis, and those applications may be able to simply |
| 44 | + remove ruby-vips from the Gemfile to remove libvips from the |
| 45 | + application. Applications that do not use Active Storage can remove |
| 46 | + ruby-vips from the Gemfile to avoid the boot-time checks. |
| 47 | +
|
| 48 | + If libvips >= 8.13 is present on the system, applications can disable |
| 49 | + the unfuzzed operations without upgrading Rails by setting the |
| 50 | + VIPS_BLOCK_UNTRUSTED environment variable, which libvips reads while |
| 51 | + initializing. |
| 52 | +
|
| 53 | + Applications also running ruby-vips >= 2.2.1 or later can instead call |
| 54 | + Vips.block_untrusted(true) from an initializer. |
| 55 | +
|
| 56 | + ## Credit |
| 57 | +
|
| 58 | + This issue was responsibly reported by 0xacb, s3np41k1r1t0 and castilho |
| 59 | + from Ethiack, and RyotaK from GMO Flatt Security Inc.. |
| 60 | + cvss_v4: 9.5 |
| 61 | + patched_versions: |
| 62 | + - "~> 7.2.3, >= 7.2.3.2" |
| 63 | + - "~> 8.0.5, >= 8.0.5.1" |
| 64 | + - ">= 8.1.3.1" |
| 65 | + related: |
| 66 | + url: |
| 67 | + - https://www.cve.org/CVERecord/SearchResults?query=CVE-2026-66066 |
| 68 | + - https://rubygems.org/gems/activesupport/versions/8.1.3.1 - https://github.com/rails/rails/releases/tag/v8.1.3.1 |
| 69 | + - https://rubygems.org/gems/activesupport/versions/8.0.5.1 - https://github.com/rails/rails/releases/tag/v8.0.5.1 |
| 70 | + - https://rubygems.org/gems/activesupport/versions/7.2.3.2 - https://github.com/rails/rails/releases/tag/v7.2.3.2 |
| 71 | + - https://blog.flatt.tech/entry/kindarails2shell_rails |
| 72 | + - https://ethiack.com/info-hub/research/kindarails2shell-rails-rce-cve |
| 73 | + - https://github.com/rails/rails/security/advisories/GHSA-xr9x-r78c-5hrm |
| 74 | + notes: | |
| 75 | + - CVE is reserved, but not published. |
| 76 | + - cvss_v4 from project GHSA |
| 77 | + - From GHSA: "Details will be disclosed no later than 2026-08-28, |
| 78 | + via the Rails Security Announcements forum." |
| 79 | +--- |
0 commit comments