Security1 distinct publisher2 min readPublished
Rapid7 reproduced the Active Storage arbitrary file read on five Rails versions, then walked it through leaked signing material into remote code execution. Any app on 7.0 defaults taking untrusted uploads is a patch-now case.
The Watch · Security desk

security
Active Storage routed stranger-supplied uploads into libvips MATLAB and NIfTI loaders1 distinct publisher
build
Answering one hardcoded address gives you root on 20+ Zbtlink router models1 distinct publisher
security
Sixteen Metasploit modules reduce this quarter's advisories to one-command checks1 distinct publisher
security
Rails patches arbitrary file read and RCE in Active Storage variant processing1 distinct publisher
Compiled by The WatchSomething wrong?How this is made
Two independent parsing disagreements make this chain reliable. Rails decides a blob is an image by reading a database column, while libvips decides which parser to run by reading the bytes on disk [9]. Then libvips and libmatio disagree with each other about the same MAT header: libvips checks only the first ten bytes for "MATLAB 5.0", libmatio takes the format version from bytes 124 and 125 [9]. A file crafted to satisfy both reaches HDF5 external storage, where the dataset content is pulled from a path and offset the attacker picked and comes back rendered as pixels in the PNG representation [10].
The trust boundary breaks at the front door. In Rails 8.0.5 the standard direct-upload controller creates the blob record before the storage service ever sees the file, taking content_type from the request and writing it straight to the record [8]. Rapid7 is explicit that this particular representation chain is narrower than the advisory: the deployed libvips build has to expose matload with MAT 7.3/HDF5 support, the application has to preserve the attacker-supplied content_type, and the attacker has to be able to trigger a representation, for example with a genuine variation_key from the same application [11] [7]. The underlying failure is broader than those conditions. Active Storage handed untrusted uploads to libvips operations that libvips had already marked unsafe for untrusted content [12].
Order of operations matters for triage. A vulnerable application discloses arbitrary files before the attacker has recovered any Rails secret or forged any token [6], and the file read is what exposes the signing material that turns the bug into code execution [14]. The whole chain runs in a single visit.
On version math: the advisory's floor is 7.2.3.2, with everything below it in range [2], and two of the five targets Rapid7 reproduced against were 6.0.6.1 and 6.1.7.10 [4]. No 6.x fixed release is named, so a Rails 6 application that opted into Vips remediates by moving branches or by dropping the processor, not by a point upgrade [1].
One limit on this reading: the technical post routes affected versions, mitigation guidance, and current exploitation status to Rapid7's separate Emergent Threat Response entry [13]. Treat in-the-wild status as unread here, and check whether your own direct-upload route requires authentication, because the writeup does not settle that for a default app.
Ranked by verification strength, evidence, and original report placement.
On July 29, 2026, the Ruby on Rails project published a security advisory for CVE-2026-66066, an arbitrary file read in Active Storage applications that use the Vips image processor with untrusted uploads.
The affected Active Storage ranges are < 7.2.3.2, >= 8.0 and < 8.0.5.1, and >= 8.1 and < 8.1.3.1.
Vips is the default Active Storage variant processor for applications that load Rails 7.0 or later defaults; Rails 6 applications are affected only when they explicitly configure Vips.
Rapid7 reproduced the published chain against Rails 6.0.6.1, 6.1.7.10, 7.2.3.1, 8.0.5 and 8.1.3, and confirmed that patched 7.2.3.2, 8.0.5.1 and 8.1.3.1 targets block the crafted representation.
Rapid7 validated a remote code execution path that uses only JSON-compatible Hash, Array and String values in a signed variation, reaching Kernel#spawn or Kernel#eval through ImageProcessing's chain builder; it worked when Rails was configured with config.active_support.message_serializer = :json.
A vulnerable application can disclose arbitrary files before the attacker has recovered a Rails secret or forged a token.
Distinct publishers with included, body-backed reporting in this cluster.
1 article · August 31, 2026
Follow any of these and your For You feed starts watching them — no settings page required.
Evidence-backed comparisons of source perspectives and observed adoption signals. Read the methodology
Which Builder, Operator, and Investor concerns the observed source mix emphasized—not a truth score.
Evidence, demonstrated adoption, hype gap, incentives, and confidence are assessed independently, each on its own current evidence. How these are measured.
Rigorous, but one voice
Every technical assertion traces back to a single Rapid7 write-up — one that shows its work rather than asserting it. Rapid7 quotes the DirectUploadsController source from Rails 8.0.5 verbatim, names the five versions it reproduced against and the three it verified as patched, and pins the mechanism on a byte-offset disagreement between libvips (first ten bytes) and libmatio (bytes 124-125). Missing is anyone outside the firm who has run the same steps.
Ecosystem response, no field data
The concrete real-world footprint here is the ecosystem's reaction, not usage telemetry: the Rails project shipped the advisory and the fixed 7.2.3.2 / 8.0.5.1 / 8.1.3.1 releases, and Rapid7 reproduced the chain end to end. What no one quantifies is how many deployed apps run the vulnerable Vips-on-7.0-defaults setup or whether anyone is exploiting it in the wild.
Loud name, honest caveats
The 'KindaRails2Shell' branding and the walk to Kernel#spawn read dramatic, but Rapid7 does its own de-hyping: it flags that the headline code-execution path needed a non-default JSON serializer and that the MAT/HDF5 route needs a libvips built with MAT 7.3 support plus a preserved content_type. The claims and their caveats travel together, so the gap is small — a slight tilt toward alarm from the framing, not the facts.
Vendor showcasing its work
Rapid7 sells vulnerability management and threat intelligence and routes the operational guidance through its own Emergent Threat Response channel — publishing a named, weaponized exploit chain is squarely how the firm demonstrates that capability. The research reads as sound, but the incentive to make it land loudly is built into who is telling it.
Credible, self-reported
The facts are specific and come from a security vendor that plainly did the work, which lifts confidence; the single-source, self-reported nature — no outside party has confirmed the reproduction or the RCE path — keeps it below what cross-checking would earn.