Injection

Injection in Ruby on Rails remediation [CVE-2011-0448]

[Updated March 2026] Updated CVE-2011-0448

Overview

CVE-2011-0448 affects Ruby on Rails 3.0.x prior to 3.0.4 and is categorized as CWE-89 (SQL Injection). The vulnerability occurs when code passes user-supplied input directly to SQL LIMIT clauses without enforcing that the value is numeric. Since LIMIT expects an integer, a non-numeric or crafted string can alter the resulting SQL, leading to data exposure, query tampering, or degraded availability in some setups. This vulnerability could be exploited by remote attackers who can influence the queries executed by the application through simple parameters in the request, for example by providing a malicious value for a limit parameter that is interpolated into the SQL string. Patch in Rails 3.0.4 and later enforces numeric limits by coercing inputs to integers and by using the safer ActiveRecord query interface. The fix reduces the attack surface by ensuring only numeric values are used for LIMIT. As a remediation, developers should replace unsafe patterns like find(:all, :limit => params[:limit]) with safe constructs such as limit(params[:limit].to_i) or limit(limit).where(...), adding default values and range validation. Upgrading to Rails 3.0.4+ is strongly recommended and automated tests should verify behavior with invalid or missing input.

Affected Versions

Rails 3.0.0 - 3.0.3 (before 3.0.4)

Code Fix Example

Ruby on Rails API Security Remediation
Vulnerable:
class ArticlesController < ApplicationController
  def index
    @articles = Article.find(:all, :limit => params[:limit])
  end
end

Fixed:
class ArticlesController < ApplicationController
  def index
    limit = params[:limit].to_i
    @articles = Article.limit(limit).where(published: true)
  end
end

CVE References

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