This repository has been archived by the owner on Apr 17, 2018. It is now read-only.
Security vulnerability fixed - it is possible to cause the WHERE clause of a query to be omitted #15
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Rack parses some request value as
[nil]
(an array containing the valuenil
). When this value is used in a DataMapper query, DM executes the query without a where clause.An example might be resetting the password of a user account for a given email:
If the user crafts a request that Rack parses
params[:email]
to[nil]
, no WHERE clause is applied to the query (you would expectWHERE email IN (NULL)
. This becomes particularly bad with an#all
query, which would simply return all records in the database.The issue stems for the use of
!value.any?
, instead ofvalue.empty?
to check if theIN
clause has no values in it. This is incorrect, since#any?
returns false of the array contains only falsy values.AFAIK, AR was affected by a similar bug that is now fixed: http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=675429 and http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=675396