RubySec

Providing security resources for the Ruby community

GHSA-wm3x-v3qw-4jh3 (actionpack): Possible Strong Parameters bypass in Parameters#each_key in Action Pack

Possible Strong Parameters bypass in Parameters#each_key in Action Pack

Published: November 04, 2026

SECURITY IDENTIFIERS

GEM

actionpack

FRAMEWORK

Ruby on Rails

SEVERITY

CVSS v3.x: 7.5 (High)

PATCHED VERSIONS

~> 8.0.5, >= 8.0.5.2 >= 8.1.4.1

DESCRIPTION

Impact

ActionController::Parameters#each_key delegates to the internal ActiveSupport::HashWithIndifferentAccess that holds the request parameters, so when called with a block it returns that hash instead of the Parameters instance. The hash does not respond to permitted?, so Active Model mass assignment (new, assign_attributes, update) accepts it without raising ActiveModel::ForbiddenAttributesError. An application that passes the return value of each_key to mass assignment could allow a remote, unauthenticated attacker to set attributes that the application does not permit, such as an authorization flag.

This is an incomplete fix of CVE-2020-8164, which made each, each_pair and each_value return the Parameters instance but left each_key delegated.

Details

The fixed releases define Parameters#each_key to yield each key and return the Parameters instance when given a block, as each, each_pair and each_value do, and to return an Enumerator without one. Code that used the return value of each_key as a hash now receives the Parameters instance, which mass assignment rejects unless it is permitted.

Affected applications

An application is affected if it passes the return value of ActionController::Parameters#each_key, called with a block, to mass assignment. Rails itself makes no such call.

Workarounds

Do not use the return value of each_key. Call it for its block only, and pass the permitted Parameters instance to mass assignment.

Releases

The fixed releases are available at the normal locations.

Patches for those who cannot upgrade at once:

  • 8.1: https://github.com/rails/rails/commit/8ba746e0a786458c281060823f2ccc5c5f6312ac.patch
  • 8.0: https://github.com/rails/rails/commit/2fc8838300133931e19eed3ea6cee76a7e83f19c.patch

Versions affected

  • actionpack < 8.0.5.2
  • actionpack >= 8.1, < 8.1.4.1

Credit

This issue was responsibly reported by HackerOne researcher smlee.

RELATED