immunio 1.1.6 → 1.1.7

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 26f001c2c60f9b1529d0b5e98c0352b7171f0efc
4
- data.tar.gz: b4ce5d424d95435e048057766fbff2f86862c2cc
3
+ metadata.gz: b00b1a9669f4e9f0ec6b571a88b2d1df883cbf94
4
+ data.tar.gz: 6fdf549ca4de7c8bf912a1fdcaf7bc00521c4e4b
5
5
  SHA512:
6
- metadata.gz: 63ca57ac77abbd1488c5dd425a91c3faa95c7ae87ccd43798279246f013dac88c957fccc200876cdd8b7077748452819986ddb95ba0a534274808ee89ed9630d
7
- data.tar.gz: 8fb5fc3f10c09fabe8cbbac5cb288e7563b37fbe6f60c51a3f68801f2a19fdcf592498c71cfda0d0d116ec13dfa5b9a82b4e77e47750c6221b9da00bb812b231
6
+ metadata.gz: d947098d70f20d0a073789d8742570bb64373fce01429f2207133ac603d612d25534dd362dad87ebfacb57ed0bde6c34038355e336238b28b42a0678bed42f7d
7
+ data.tar.gz: f4a9b98cce16ba098561bb64bafcadf5fe50f1f9becbbc87549c5df9234f1f55062715274a59c44eadcb37088dc60a19bfe61ce44d59214f5056e9d733579b62
@@ -14,11 +14,13 @@ module Immunio
14
14
  class Plugin
15
15
  attr_reader :status
16
16
  attr_accessor :version
17
+ attr_accessor :hooks
17
18
 
18
- def initialize(name)
19
+ def initialize(name, hooks = [])
19
20
  @name = name
20
21
  @status = 'pending'
21
22
  @version = nil
23
+ @hooks = hooks
22
24
  end
23
25
 
24
26
  def loaded!(version)
@@ -38,14 +40,15 @@ module Immunio
38
40
  end
39
41
 
40
42
  def inspect
41
- "<#{self.class} name=#{@name.inspect} status=#{@status.inspect} version=#{@version.inspect}>"
43
+ "<#{self.class} name=#{@name.inspect} status=#{@status.inspect} version=#{@version.inspect} hooks=#{@hooks.inspect}>"
42
44
  end
43
45
 
44
46
  def to_msgpack(packer)
45
- packer.write_map_header 2
47
+ packer.write_map_header 3
46
48
  # `name` is provided as the key in `registered`
47
49
  packer.write('status').write(@status)
48
50
  packer.write('version').write(@version)
51
+ packer.write('hooks').write(@hooks)
49
52
  end
50
53
 
51
54
  def self.registered
@@ -76,7 +79,7 @@ module Immunio
76
79
  enabled = true
77
80
  end
78
81
 
79
- plugin = registered[name] = new(name)
82
+ plugin = registered[name] = new(name, options.fetch(:hooks, []))
80
83
 
81
84
  unless enabled # plugin is disabled
82
85
  plugin.disabled!
@@ -91,4 +94,4 @@ module Immunio
91
94
  end
92
95
  end
93
96
  end
94
- end
97
+ end
@@ -29,7 +29,9 @@ module Immunio
29
29
  end
30
30
  end
31
31
 
32
- Immunio::Plugin.load 'ActionDispatch (Cookie)' do |plugin|
32
+ Immunio::Plugin.load 'ActionDispatch (Cookie)',
33
+ hooks: %w( bad_cookie ) do |plugin|
34
+
33
35
  class ActionDispatch::Cookies
34
36
  if defined? SignedCookieJar
35
37
  SignedCookieJar.send :include, Immunio::CookieHooks
@@ -47,5 +49,6 @@ Immunio::Plugin.load 'ActionDispatch (Cookie)' do |plugin|
47
49
  UpgradeLegacyEncryptedCookieJar.send :include, Immunio::CookieHooks
48
50
  end
49
51
  end
52
+
50
53
  plugin.loaded! ActionPack::VERSION::STRING
51
54
  end
@@ -533,14 +533,23 @@ end
533
533
 
534
534
  # Load the plugins
535
535
 
536
- Immunio::Plugin.load 'Erubis', feature: 'xss' do |plugin|
536
+ Immunio::Plugin.load(
537
+ 'Erubis',
538
+ feature: 'xss',
539
+ hooks: %w( template_render_done template_render_var )) do |plugin|
540
+
537
541
  ActionView::Template::Handlers::Erubis.send :include, Immunio::ErubisHooks
542
+
538
543
  plugin.loaded! Rails.version
539
544
  end
540
545
 
541
546
  ActiveSupport.on_load(:after_initialize) do
542
547
  # Wait after Rails initialization to patch custom template engines.
543
- Immunio::Plugin.load 'Haml', feature: 'xss' do |plugin|
548
+ Immunio::Plugin.load(
549
+ 'Haml',
550
+ feature: 'xss',
551
+ hooks: %w( template_render_done template_render_var )) do |plugin|
552
+
544
553
  if defined? Haml::Compiler
545
554
  Haml::Compiler.send :include, Immunio::HamlHooks
546
555
  plugin.loaded! Haml::VERSION
@@ -552,7 +561,11 @@ ActiveSupport.on_load(:after_initialize) do
552
561
  end
553
562
 
554
563
  # Hook into rendering process of Rails.
555
- Immunio::Plugin.load 'ActionView', feature: 'xss' do |plugin|
564
+ Immunio::Plugin.load(
565
+ 'ActionView',
566
+ feature: 'xss',
567
+ hooks: %w( template_render_done template_render_var )) do |plugin|
568
+
556
569
  ActionView::TemplateRenderer.send :include, Immunio::TemplateRendererHooks
557
570
  ActionView::Template.send :include, Immunio::TemplateHooks
558
571
  ActionController::Caching::Fragments.send(
@@ -1,4 +1,5 @@
1
- # Register callbacks to Authlogic (https://github.com/binarylogic/authlogic). A popular authentication system.
1
+ # Register callbacks to Authlogic (https://github.com/binarylogic/authlogic).
2
+ # A popular authentication system.
2
3
 
3
4
  begin
4
5
  require "authlogic"
@@ -6,7 +7,10 @@ rescue LoadError # rubocop:disable Lint/HandleExceptions
6
7
  # Ignore
7
8
  end
8
9
 
9
- Immunio::Plugin.load 'Authlogic' do |plugin|
10
+ Immunio::Plugin.load(
11
+ 'Authlogic',
12
+ hooks: %w( authenticate framework_login framework_user )) do |plugin|
13
+
10
14
  if defined? Authlogic
11
15
  module Immunio
12
16
  module Authlogic
@@ -27,10 +31,12 @@ Immunio::Plugin.load 'Authlogic' do |plugin|
27
31
  info = {plugin: "authlogic"}
28
32
 
29
33
  if defined?(:record) && record
30
- # record is set when already logged in, e.g. you are now logging out
34
+ # record is set when already logged in,
35
+ # e.g. you are now logging out
31
36
  info[:user_record] = record
32
37
  elsif defined?(:attempted_record) && attempted_record
33
- # attempted_record is set when attempting to log in and the user record has been fetched
38
+ # attempted_record is set when attempting to log in and the
39
+ # user record has been fetched
34
40
  info[:user_record] = attempted_record
35
41
  end
36
42
 
@@ -45,7 +51,9 @@ Immunio::Plugin.load 'Authlogic' do |plugin|
45
51
 
46
52
  def immunio_login
47
53
  Immunio::Request.time "plugin", "#{Module.nesting[0]}::#{__method__}" do
48
- Immunio.logger.debug {"Authlogic instrumentation fired for login with opts #{opts}"}
54
+ Immunio.logger.debug do
55
+ "Authlogic instrumentation fired for login with opts #{opts}"
56
+ end
49
57
  Immunio.login opts
50
58
  end
51
59
  end
@@ -53,7 +61,9 @@ Immunio::Plugin.load 'Authlogic' do |plugin|
53
61
  def immunio_check_failed_login
54
62
  if errors.any?
55
63
  Immunio::Request.time "plugin", "#{Module.nesting[0]}::#{__method__}" do
56
- Immunio.logger.debug { "Authlogic instrumentation fired for before_failure with opts #{opts}" }
64
+ Immunio.logger.debug do
65
+ "Authlogic instrumentation fired for before_failure with opts #{opts}"
66
+ end
57
67
  Immunio.failed_login opts
58
68
  end
59
69
  end
@@ -61,14 +71,18 @@ Immunio::Plugin.load 'Authlogic' do |plugin|
61
71
 
62
72
  def immunio_logout
63
73
  Immunio::Request.time "plugin", "#{Module.nesting[0]}::#{__method__}" do
64
- Immunio.logger.debug { "Authlogic instrumentation fired for logout with opts #{opts}" }
74
+ Immunio.logger.debug do
75
+ "Authlogic instrumentation fired for logout with opts #{opts}"
76
+ end
65
77
  Immunio.logout opts
66
78
  end
67
79
  end
68
80
 
69
81
  def immunio_set_user
70
82
  Immunio::Request.time "plugin", "#{Module.nesting[0]}::#{__method__}" do
71
- Immunio.logger.debug { "Authlogic instrumentation fired for after_set_user with opts #{opts}" }
83
+ Immunio.logger.debug do
84
+ "Authlogic instrumentation fired for after_set_user with opts #{opts}"
85
+ end
72
86
  Immunio.set_user opts
73
87
  end
74
88
  end
@@ -81,4 +95,4 @@ Immunio::Plugin.load 'Authlogic' do |plugin|
81
95
 
82
96
  plugin.loaded! Gem.loaded_specs['authlogic'].version.to_s
83
97
  end
84
- end
98
+ end
@@ -23,7 +23,10 @@ module Immunio
23
23
  end
24
24
  end
25
25
 
26
- Immunio::Plugin.load 'ActionController (CSRF)' do |plugin|
26
+ Immunio::Plugin.load 'ActionController (CSRF)',
27
+ hooks: %w( framework_csrf_check ) do |plugin|
28
+
27
29
  ActionController::Base.send :include, Immunio::CsrfHook
30
+
28
31
  plugin.loaded! ActionPack::VERSION::STRING
29
32
  end
@@ -6,7 +6,15 @@ rescue LoadError # rubocop:disable Lint/HandleExceptions
6
6
  # Ignore
7
7
  end
8
8
 
9
- Immunio::Plugin.load 'Devise' do |plugin|
9
+ Immunio::Plugin.load 'Devise',
10
+ hooks: [
11
+ 'authenticate',
12
+ 'framework_login',
13
+ 'framework_user',
14
+ 'framework_logout',
15
+ 'framework_password_reset'
16
+ ] do |plugin|
17
+
10
18
  if defined? Devise
11
19
  module Immunio
12
20
  # Hook into password recovery feature to trigger the `framework_password_reset` hook.
@@ -19,7 +27,9 @@ Immunio::Plugin.load 'Devise' do |plugin|
19
27
 
20
28
  def send_reset_password_instructions_with_immunio(attributes={})
21
29
  Request.time "plugin", "#{Module.nesting[0]}::#{__method__}" do
22
- Immunio.logger.debug { "Devise instrumentation fired for send_reset_password_instructions" }
30
+ Immunio.logger.debug do
31
+ "Devise instrumentation fired for send_reset_password_instructions"
32
+ end
23
33
 
24
34
  recoverable = find_or_initialize_with_errors(reset_password_keys, attributes, :not_found)
25
35
 
@@ -42,4 +52,4 @@ Immunio::Plugin.load 'Devise' do |plugin|
42
52
  require 'devise/version'
43
53
  plugin.loaded! Devise::VERSION
44
54
  end
45
- end
55
+ end
@@ -52,8 +52,9 @@ module Immunio
52
52
  end
53
53
 
54
54
  def hostname_ip
55
- # SocketError is raised if we can't fetch the hostname with `Socket.gethostname`.
56
- Addrinfo.getaddrinfo(hostname, nil).first.ip_address rescue SocketError
55
+ # Return nil if we can't fetch the hostname with `Socket.gethostname`,
56
+ # for example if there is no public IPV4 interface.
57
+ Addrinfo.getaddrinfo(hostname, nil).first.ip_address rescue nil
57
58
  end
58
59
 
59
60
  def plugins
@@ -37,8 +37,12 @@ module Immunio
37
37
  end
38
38
  end
39
39
 
40
- Immunio::Plugin.load 'Kernel (Eval)', feature: 'eval' do |plugin|
40
+ Immunio::Plugin.load 'Kernel (Eval)',
41
+ feature: 'eval',
42
+ hooks: %w( eval ) do |plugin|
43
+
41
44
  Kernel.send :include, Immunio::KernelEvalHook
42
45
  Kernel.extend Immunio::KernelEvalHook
46
+
43
47
  plugin.loaded! RUBY_VERSION
44
48
  end
@@ -100,14 +100,18 @@ module Immunio
100
100
  end
101
101
 
102
102
  # Add FileIO hooks if enabled
103
- Immunio::Plugin.load 'IO', feature: 'file_io' do |plugin|
103
+ Immunio::Plugin.load 'IO', feature: 'file_io', hooks: %w( file_io ) do |plugin|
104
+
104
105
  IO.extend Immunio::IOClassHooks
105
106
  File.extend Immunio::FileClassHooks
106
107
  plugin.loaded! RUBY_VERSION
107
108
  end
108
109
 
109
110
  # Add Kernel hooks if enabled
110
- Immunio::Plugin.load 'Kernel (shell_command)', feature: 'shell_command' do |plugin|
111
+ Immunio::Plugin.load 'Kernel (shell_command)',
112
+ feature: 'shell_command',
113
+ hooks: %w( shell_io ) do |plugin|
114
+
111
115
  # Both are necessary to hook calling both Kernel.open() and open() etc.
112
116
  Kernel.send :include, Immunio::KernelModuleHooks
113
117
  Kernel.extend Immunio::KernelModuleHooks
@@ -22,7 +22,7 @@ module Immunio
22
22
  loptions = loptions.call
23
23
  end
24
24
  if loptions.is_a? String then
25
- strict_context, loose_context, stack = Immunio::Context.context() # rubocop:disable Lint/UselessAssignment
25
+ _strict_context, loose_context, stack = Immunio::Context.context()
26
26
  Immunio.run_hook! "redirect", "framework_redirect",
27
27
  destination_url: loptions,
28
28
  context_key: loose_context,
@@ -36,7 +36,10 @@ module Immunio
36
36
  end
37
37
  end
38
38
 
39
- Immunio::Plugin.load 'ActionController (Redirect)', feature: 'redirect' do |plugin|
39
+ Immunio::Plugin.load 'ActionController (Redirect)',
40
+ feature: 'redirect',
41
+ hooks: %w( framework_redirect ) do |plugin|
42
+
40
43
  ActionController::Base.send :include, Immunio::RedirectHook
41
44
 
42
45
  plugin.loaded! ActionPack::VERSION::STRING
@@ -6,12 +6,21 @@ rescue LoadError # rubocop:disable Lint/HandleExceptions
6
6
  # Ignore
7
7
  end
8
8
 
9
- Immunio::Plugin.load 'Warden' do |plugin|
9
+ Immunio::Plugin.load 'Warden',
10
+ hooks: [
11
+ 'authenticate',
12
+ 'framework_login',
13
+ 'framework_user',
14
+ 'framework_logout'
15
+ ] do |plugin|
16
+
10
17
  if defined?(Warden::Manager)
11
18
  class Warden::Manager
12
19
  after_authentication do |user|
13
20
  Immunio::Request.time "plugin", "Warden::Manager.after_authentication" do
14
- Immunio.logger.debug { "Warden instrumentation fired for after_authentication" }
21
+ Immunio.logger.debug do
22
+ "Warden instrumentation fired for after_authentication"
23
+ end
15
24
  Immunio.login user_record: user, plugin: "warden"
16
25
  end
17
26
  end
@@ -37,7 +46,9 @@ Immunio::Plugin.load 'Warden' do |plugin|
37
46
  Immunio.logger.debug { "Warden instrumentation fired for before_failure" }
38
47
  Immunio.failed_login info
39
48
  else
40
- Immunio.logger.debug { "Failed to find user info for Warden failure, ignoring instead of reporting as failed login" }
49
+ Immunio.logger.debug do
50
+ "Failed to find user info for Warden failure, ignoring instead of reporting as failed login"
51
+ end
41
52
  end
42
53
  end
43
54
  end
@@ -71,4 +82,4 @@ Immunio::Plugin.load 'Warden' do |plugin|
71
82
  require 'warden/version'
72
83
  plugin.loaded! Warden::VERSION
73
84
  end
74
- end
85
+ end
data/lib/immunio/rails.rb CHANGED
@@ -7,7 +7,18 @@ require_relative "plugins/warden"
7
7
 
8
8
  module Immunio
9
9
  class Engine < ::Rails::Engine
10
- Immunio::Plugin.load 'Middlewares' do |plugin|
10
+ Immunio::Plugin.load 'Middlewares',
11
+ hooks: [
12
+ 'http_request_start',
13
+ 'http_request_finish',
14
+ 'http_response_start',
15
+ 'http_request_body_chunk',
16
+ 'http_response_body_chunk',
17
+ 'exception',
18
+ 'framework_route',
19
+ 'framework_session',
20
+ ] do |plugin|
21
+
11
22
  config.app_middleware.insert 0, HTTPFinisher
12
23
  config.app_middleware.insert_before ActionDispatch::ShowExceptions, HTTPTracker
13
24
  config.app_middleware.insert_after ActionDispatch::DebugExceptions, ExceptionHandler
@@ -17,7 +28,10 @@ module Immunio
17
28
 
18
29
  config.action_dispatch.rescue_responses.merge!('Immunio::RequestBlocked' => :forbidden)
19
30
 
20
- Immunio::Plugin.load 'ActionRecord', feature: 'sqli' do |plugin|
31
+ Immunio::Plugin.load 'ActionRecord',
32
+ feature: 'sqli',
33
+ hooks: %w( sql_execute ) do |plugin|
34
+
21
35
  initializer "immunio.active_record", after: "active_record.initialize_database" do
22
36
  ActiveSupport.on_load(:active_record) do
23
37
  require_relative "plugins/active_record"
@@ -1,5 +1,5 @@
1
1
  module Immunio
2
2
  AGENT_TYPE = "agent-ruby"
3
- VERSION = "1.1.6"
3
+ VERSION = "1.1.7"
4
4
  VM_VERSION = "2.2.0"
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: immunio
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.6
4
+ version: 1.1.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Immunio
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-01-11 00:00:00.000000000 Z
11
+ date: 2017-01-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails