Broken Function Level Authorization

Broken Function Level Authorization in Ruby on Rails [CVE-2006-4112]

[Updated Mar 2026] Updated CVE-2006-4112

Overview

CVE-2006-4112 describes an unspecified vulnerability in Rails 1.1.0 through 1.1.5 where the dependency resolution and routing logic can be abused by crafted URLs to execute arbitrary Ruby code. This could cause denial of service (application hang) or data loss and is noted as distinct from CVE-2006-4111. In real-world scenarios, such issues arise when routing code improperly evaluates or resolves parts of a URL, granting an attacker the ability to trigger unsafe code paths. The vulnerability effectively undermines function-level access controls by exploiting the routing layer to reach code paths that should be off-limits. Patch coverage was released to address these routing/dependency resolution weaknesses.

Affected Versions

1.1.0-1.1.5

Code Fix Example

Ruby on Rails API Security Remediation
Vulnerable (illustrative, non-operational pattern):

# Vulnerable (illustrative) pattern: dynamic controller resolution from user input
class Router
  def self.route(path)
    controller_name, action = path.split('/')[0,2]
    # Dangerous: constructing a constant from user-supplied input
    controller_class = Object.const_get("#{controller_name.capitalize}Controller")
    controller_class.new.send(action)
  end
end

# Fixed: explicit whitelist and Rails routing best practices
ALLOWED_CONTROLLERS = %w[UsersController SessionsController ProductsController]

class Router
  def self.route(path)
    controller_name, action = path.split('/')[0,2]
    controller_class_name = "#{controller_name.capitalize}Controller"
    unless ALLOWED_CONTROLLERS.include?(controller_class_name)
      raise "Not Found"
    end
    controller_class = Object.const_get(controller_class_name)
    # Use a safe call instead of arbitrary dynamic dispatch
    controller_class.new.public_send(action)
  end
end

CVE References

Choose which optional cookies to allow. You can change this any time.