Skip to content
Snippets Groups Projects
Commit 9770c57f authored by Brian Neel's avatar Brian Neel
Browse files

Re-enable SqlInjection and CommandInjection

parent b612a47d
No related branches found
No related tags found
No related merge requests found
Showing
with 69 additions and 29 deletions
Loading
Loading
@@ -514,8 +514,11 @@ codeclimate:
services:
- docker:dind
script:
- cp .rubocop.yml .rubocop.yml.bak
- grep -v "rubocop-gitlab-security" .rubocop.yml.bak > .rubocop.yml
- docker run --env CODECLIMATE_CODE="$PWD" --volume "$PWD":/code --volume /var/run/docker.sock:/var/run/docker.sock --volume /tmp/cc:/tmp/cc codeclimate/codeclimate analyze -f json > raw_codeclimate.json
- cat raw_codeclimate.json | docker run -i stedolan/jq -c 'map({check_name,fingerprint,location})' > codeclimate.json
- mv .rubocop.yml.bak .rubocop.yml
artifacts:
paths: [codeclimate.json]
 
Loading
Loading
require:
- rubocop-rspec
- rubocop-gitlab-security
- ./rubocop/rubocop
 
inherit_from: .rubocop_todo.yml
Loading
Loading
@@ -1156,3 +1157,35 @@ RSpec/SubjectStub:
# Prefer using verifying doubles over normal doubles.
RSpec/VerifiedDoubles:
Enabled: false
# GitlabSecurity ##############################################################
GitlabSecurity/DeepMunge:
Enabled: true
Exclude:
- 'spec/**/*'
- 'lib/**/*.rake'
GitlabSecurity/PublicSend:
Enabled: true
Exclude:
- 'spec/**/*'
- 'lib/**/*.rake'
GitlabSecurity/RedirectToParamsUpdate:
Enabled: true
Exclude:
- 'spec/**/*'
- 'lib/**/*.rake'
GitlabSecurity/SqlInjection:
Enabled: true
Exclude:
- 'spec/**/*'
- 'lib/**/*.rake'
GitlabSecurity/SystemCommandInjection:
Enabled: true
Exclude:
- 'spec/**/*'
- 'lib/**/*.rake'
Loading
Loading
@@ -341,6 +341,7 @@ group :development, :test do
 
gem 'rubocop', '~> 0.49.1', require: false
gem 'rubocop-rspec', '~> 1.15.1', require: false
gem 'rubocop-gitlab-security', '~> 0.0.6', require: false
gem 'scss_lint', '~> 0.54.0', require: false
gem 'haml_lint', '~> 0.26.0', require: false
gem 'simplecov', '~> 0.14.0', require: false
Loading
Loading
Loading
Loading
@@ -742,7 +742,8 @@ GEM
ruby-progressbar (~> 1.7)
unicode-display_width (~> 1.0, >= 1.0.1)
rubocop-rspec (1.15.1)
rubocop (>= 0.42.0)
rubocop-gitlab-security (0.0.6)
rubocop (>= 0.47.0)
ruby-fogbugz (0.2.1)
crack (~> 0.4)
ruby-prof (0.16.2)
Loading
Loading
@@ -1089,6 +1090,7 @@ DEPENDENCIES
rspec_profiling (~> 0.0.5)
rubocop (~> 0.49.1)
rubocop-rspec (~> 1.15.1)
rubocop-gitlab-security (~> 0.0.6)
ruby-fogbugz (~> 0.2.1)
ruby-prof (~> 0.16.2)
ruby_parser (~> 3.8)
Loading
Loading
Loading
Loading
@@ -68,15 +68,15 @@ class Import::GithubController < Import::BaseController
end
 
def new_import_url
public_send("new_import_#{provider}_url")
public_send("new_import_#{provider}_url") # rubocop:disable GitlabSecurity/PublicSend
end
 
def status_import_url
public_send("status_import_#{provider}_url")
public_send("status_import_#{provider}_url") # rubocop:disable GitlabSecurity/PublicSend
end
 
def callback_import_url
public_send("callback_import_#{provider}_url")
public_send("callback_import_#{provider}_url") # rubocop:disable GitlabSecurity/PublicSend
end
 
def provider_unauthorized
Loading
Loading
Loading
Loading
@@ -234,7 +234,7 @@ module IssuablesHelper
end
 
def issuables_count_for_state(issuable_type, state, finder: nil)
finder ||= public_send("#{issuable_type}_finder")
finder ||= public_send("#{issuable_type}_finder") # rubocop:disable GitlabSecurity/PublicSend
cache_key = finder.state_counter_cache_key
 
@counts ||= {}
Loading
Loading
Loading
Loading
@@ -43,11 +43,11 @@ module LabelsHelper
def label_filter_path(subject, label, type: :issue)
case subject
when Group
send("#{type.to_s.pluralize}_group_path",
send("#{type.to_s.pluralize}_group_path", # rubocop:disable GitlabSecurity/PublicSend
subject,
label_name: [label.name])
when Project
send("namespace_project_#{type.to_s.pluralize}_path",
send("namespace_project_#{type.to_s.pluralize}_path", # rubocop:disable GitlabSecurity/PublicSend
subject.namespace,
subject,
label_name: [label.name])
Loading
Loading
Loading
Loading
@@ -58,7 +58,7 @@ module Spammable
options.fetch(:spam_title, false)
end
 
public_send(attr.first) if attr && respond_to?(attr.first.to_sym)
public_send(attr.first) if attr && respond_to?(attr.first.to_sym) # rubocop:disable GitlabSecurity/PublicSend
end
 
def spam_description
Loading
Loading
@@ -66,12 +66,12 @@ module Spammable
options.fetch(:spam_description, false)
end
 
public_send(attr.first) if attr && respond_to?(attr.first.to_sym)
public_send(attr.first) if attr && respond_to?(attr.first.to_sym) # rubocop:disable GitlabSecurity/PublicSend
end
 
def spammable_text
result = self.class.spammable_attrs.map do |attr|
public_send(attr.first)
public_send(attr.first) # rubocop:disable GitlabSecurity/PublicSend
end
 
result.reject(&:blank?).join("\n")
Loading
Loading
Loading
Loading
@@ -44,7 +44,8 @@ module TokenAuthenticatable
end
 
define_method("ensure_#{token_field}!") do
send("reset_#{token_field}!") if read_attribute(token_field).blank?
send("reset_#{token_field}!") if read_attribute(token_field).blank? # rubocop:disable GitlabSecurity/PublicSend
read_attribute(token_field)
end
 
Loading
Loading
Loading
Loading
@@ -162,7 +162,7 @@ class MergeRequest < ActiveRecord::Base
target = unscoped.where(target_project_id: relation).select(:id)
union = Gitlab::SQL::Union.new([source, target])
 
where("merge_requests.id IN (#{union.to_sql})")
where("merge_requests.id IN (#{union.to_sql})") # rubocop:disable GitlabSecurity/SqlInjection
end
 
WIP_REGEX = /\A\s*(\[WIP\]\s*|WIP:\s*|WIP\s+)+\s*/i.freeze
Loading
Loading
Loading
Loading
@@ -26,7 +26,7 @@ class MergeRequestDiffCommit < ActiveRecord::Base
 
def to_hash
Gitlab::Git::Commit::SERIALIZE_KEYS.each_with_object({}) do |key, hash|
hash[key] = public_send(key)
hash[key] = public_send(key) # rubocop:disable GitlabSecurity/PublicSend
end
end
 
Loading
Loading
Loading
Loading
@@ -66,6 +66,6 @@ class NotificationSetting < ActiveRecord::Base
alias_method :failed_pipeline?, :failed_pipeline
 
def event_enabled?(event)
respond_to?(event) && !!public_send(event)
respond_to?(event) && !!public_send(event) # rubocop:disable GitlabSecurity/PublicSend
end
end
Loading
Loading
@@ -415,7 +415,7 @@ class Project < ActiveRecord::Base
 
union = Gitlab::SQL::Union.new([projects, namespaces])
 
where("projects.id IN (#{union.to_sql})")
where("projects.id IN (#{union.to_sql})") # rubocop:disable GitlabSecurity/SqlInjection
end
 
def search_by_title(query)
Loading
Loading
@@ -825,7 +825,7 @@ class Project < ActiveRecord::Base
 
if template.nil?
# If no template, we should create an instance. Ex `build_gitlab_ci_service`
public_send("build_#{service_name}_service")
public_send("build_#{service_name}_service") # rubocop:disable GitlabSecurity/PublicSend
else
Service.build_from_template(id, template)
end
Loading
Loading
@@ -1326,7 +1326,7 @@ class Project < ActiveRecord::Base
end
 
def append_or_update_attribute(name, value)
old_values = public_send(name.to_s)
old_values = public_send(name.to_s) # rubocop:disable GitlabSecurity/PublicSend
 
if Project.reflect_on_association(name).try(:macro) == :has_many && old_values.any?
update_attribute(name, old_values + value)
Loading
Loading
Loading
Loading
@@ -55,7 +55,7 @@ class ProjectFeature < ActiveRecord::Base
end
 
def access_level(feature)
public_send(ProjectFeature.access_level_attribute(feature))
public_send(ProjectFeature.access_level_attribute(feature)) # rubocop:disable GitlabSecurity/PublicSend
end
 
def builds_enabled?
Loading
Loading
@@ -80,7 +80,7 @@ class ProjectFeature < ActiveRecord::Base
# which cannot be higher than repository access level
def repository_children_level
validator = lambda do |field|
level = public_send(field) || ProjectFeature::ENABLED
level = public_send(field) || ProjectFeature::ENABLED # rubocop:disable GitlabSecurity/PublicSend
not_allowed = level > repository_access_level
self.errors.add(field, "cannot have higher visibility level than repository access level") if not_allowed
end
Loading
Loading
Loading
Loading
@@ -14,7 +14,7 @@ class ProjectStatistics < ActiveRecord::Base
def refresh!(only: nil)
STATISTICS_COLUMNS.each do |column, generator|
if only.blank? || only.include?(column)
public_send("update_#{column}")
public_send("update_#{column}") # rubocop:disable GitlabSecurity/PublicSend
end
end
 
Loading
Loading
Loading
Loading
@@ -300,7 +300,7 @@ class Repository
 
expire_method_caches(to_refresh)
 
to_refresh.each { |method| send(method) }
to_refresh.each { |method| send(method) } # rubocop:disable GitlabSecurity/PublicSend
end
 
def expire_branch_cache(branch_name = nil)
Loading
Loading
Loading
Loading
@@ -528,7 +528,7 @@ class User < ActiveRecord::Base
union = Gitlab::SQL::Union
.new([groups.select(:id), authorized_projects.select(:namespace_id)])
 
Group.where("namespaces.id IN (#{union.to_sql})")
Group.where("namespaces.id IN (#{union.to_sql})") # rubocop:disable GitlabSecurity/SqlInjection
end
 
# Returns a relation of groups the user has access to, including their parent
Loading
Loading
@@ -719,8 +719,8 @@ class User < ActiveRecord::Base
 
def sanitize_attrs
%w[username skype linkedin twitter].each do |attr|
value = public_send(attr)
public_send("#{attr}=", Sanitize.clean(value)) if value.present?
value = public_send(attr) # rubocop:disable GitlabSecurity/PublicSend
public_send("#{attr}=", Sanitize.clean(value)) if value.present? # rubocop:disable GitlabSecurity/PublicSend
end
end
 
Loading
Loading
@@ -779,7 +779,7 @@ class User < ActiveRecord::Base
 
def with_defaults
User.defaults.each do |k, v|
public_send("#{k}=", v)
public_send("#{k}=", v) # rubocop:disable GitlabSecurity/PublicSend
end
 
self
Loading
Loading
@@ -919,7 +919,7 @@ class User < ActiveRecord::Base
def ci_authorized_runners
@ci_authorized_runners ||= begin
runner_ids = Ci::RunnerProject
.where("ci_runner_projects.project_id IN (#{ci_projects_union.to_sql})")
.where("ci_runner_projects.project_id IN (#{ci_projects_union.to_sql})") # rubocop:disable GitlabSecurity/SqlInjection
.select(:runner_id)
Ci::Runner.specific.where(id: runner_ids)
end
Loading
Loading
Loading
Loading
@@ -35,6 +35,6 @@ class AnalyticsBuildEntity < Grape::Entity
private
 
def url_to(route, build, id = nil)
public_send("#{route}_url", build.project.namespace, build.project, id || build)
public_send("#{route}_url", build.project.namespace, build.project, id || build) # rubocop:disable GitlabSecurity/PublicSend
end
end
Loading
Loading
@@ -24,6 +24,6 @@ class AnalyticsIssueEntity < Grape::Entity
private
 
def url_to(route, id)
public_send("#{route}_url", request.project.namespace, request.project, id)
public_send("#{route}_url", request.project.namespace, request.project, id) # rubocop:disable GitlabSecurity/PublicSend
end
end
Loading
Loading
@@ -46,6 +46,6 @@ class JobEntity < Grape::Entity
end
 
def path_to(route, build)
send("#{route}_path", build.project.namespace, build.project, build)
send("#{route}_path", build.project.namespace, build.project, build) # rubocop:disable GitlabSecurity/PublicSend
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment