metasploit_data_models 4.0.1 → 4.1.3

Sign up to get free protection for your applications and to get access to all the features.
metadata CHANGED
@@ -1,13 +1,10 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: metasploit_data_models
3
3
  version: !ruby/object:Gem::Version
4
- version: 4.0.1
4
+ version: 4.1.3
5
5
  platform: ruby
6
6
  authors:
7
- - Samuel Huckins
8
- - Luke Imhoff
9
- - David 'thelightcosine' Maloney
10
- - Trevor 'burlyscudd' Rosen
7
+ - Metasploit Hackers
11
8
  autorequire:
12
9
  bindir: bin
13
10
  cert_chain:
@@ -67,20 +64,20 @@ cert_chain:
67
64
  -----END CERTIFICATE-----
68
65
  - |
69
66
  -----BEGIN CERTIFICATE-----
70
- MIIFIzCCBAugAwIBAgIQDX9ZkVJ2eNVTlibR5ALyJTANBgkqhkiG9w0BAQsFADBy
67
+ MIIFIzCCBAugAwIBAgIQCMePMbkSxvnPeJhYXIfaxzANBgkqhkiG9w0BAQsFADBy
71
68
  MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3
72
69
  d3cuZGlnaWNlcnQuY29tMTEwLwYDVQQDEyhEaWdpQ2VydCBTSEEyIEFzc3VyZWQg
73
- SUQgQ29kZSBTaWduaW5nIENBMB4XDTE5MTAxNjAwMDAwMFoXDTIwMTAxOTEyMDAw
70
+ SUQgQ29kZSBTaWduaW5nIENBMB4XDTIwMTAwNzAwMDAwMFoXDTIzMTEwNjEyMDAw
74
71
  MFowYDELMAkGA1UEBhMCVVMxFjAUBgNVBAgTDU1hc3NhY2h1c2V0dHMxDzANBgNV
75
72
  BAcTBkJvc3RvbjETMBEGA1UEChMKUmFwaWQ3IExMQzETMBEGA1UEAxMKUmFwaWQ3
76
- IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBANHnKegPAghKuZk4
77
- Gy1jKaZEXbWc4fxioTemv/F1yIYzAjCWP65qjKtyeeFDe4/kJzG9nseF9oa93YBf
78
- 1nyEqxNSZMw/sCAZ87lOl713dRi73uxOoszy2PT5xEB+Q5R6cbzExkWG2zrLdXDr
79
- so0Bd6VHw+IsAoBBkAq5FrZOJQYGn5VY20xw/2DqtCeoW4QDWyqTnbJmwO9tZrfr
80
- 3Le2crfk2eOgafaPNhLon5uuIKCZsk2YkUSNURSS3M7gosMwU9Gg4JTBi7X5+oww
81
- rY43dJT28YklxmNVu8o5kJxW4dqLKJLOIgSXZ63nceT/EaCSg7DcofHNcUzejFwb
82
- M7Zbb2kCAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
83
- dQ5YMB0GA1UdDgQWBBR18CAeMsIEU+0pXal/XXw9LCtMADAOBgNVHQ8BAf8EBAMC
73
+ IExMQzCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBALNTz4zvAy7h/vQp
74
+ 4dr1txXHlABAagkwYYwTMCtHs5PXsJITx/5SAjx5swuaLfze5kPBNF2YImvFlOXY
75
+ WaB+0PsOnXnaARsDZU683xFlj8izU6IN6VrAHzDLKFBzruJENrOJD/ikbEtbjO/q
76
+ gFbmS9J9v5ohG/pcRSS0t4ZPAwymf8eCp6QsvOKK/Aymp1RhlRaP8N6N5CIpkhz1
77
+ 9p968iCE+DjOXVYxcWE+jE/7uB1dbgrXykNBujMSS3GULOvVEY28n6NCmrPlo23g
78
+ yRjYVJ2Vy14nBqnxDZ/yRIfWRVjWoT9TsAEbe9gY29oDpSCSs4wSmLQd5zGCpZ9h
79
+ r0HDFB8CAwEAAaOCAcUwggHBMB8GA1UdIwQYMBaAFFrEuXsqCqOl6nEDwGD5LfZl
80
+ dQ5YMB0GA1UdDgQWBBTLBL7DTwumVEKtdCdpHVYMXOFeDzAOBgNVHQ8BAf8EBAMC
84
81
  B4AwEwYDVR0lBAwwCgYIKwYBBQUHAwMwdwYDVR0fBHAwbjA1oDOgMYYvaHR0cDov
85
82
  L2NybDMuZGlnaWNlcnQuY29tL3NoYTItYXNzdXJlZC1jcy1nMS5jcmwwNaAzoDGG
86
83
  L2h0dHA6Ly9jcmw0LmRpZ2ljZXJ0LmNvbS9zaGEyLWFzc3VyZWQtY3MtZzEuY3Js
@@ -89,14 +86,14 @@ cert_chain:
89
86
  JAYIKwYBBQUHMAGGGGh0dHA6Ly9vY3NwLmRpZ2ljZXJ0LmNvbTBOBggrBgEFBQcw
90
87
  AoZCaHR0cDovL2NhY2VydHMuZGlnaWNlcnQuY29tL0RpZ2lDZXJ0U0hBMkFzc3Vy
91
88
  ZWRJRENvZGVTaWduaW5nQ0EuY3J0MAwGA1UdEwEB/wQCMAAwDQYJKoZIhvcNAQEL
92
- BQADggEBAFpzR9s7lcYKDzSJucOHztEPj+iSIeCzxEw34NTE9M2AfkYIu82c4r2a
93
- bzIGmzZWiCGufjOp0gF5xW6sSSJ9n0TqH0nhHhvjtZQkmkGtOBbN1zeYDFS2ozAp
94
- sljF/g68Y1eYs3NaFf7kQUa6vb6RdjW3J8M9AQ8gthBt7gr/guVxd/gJUYbdDdBX
95
- cWfJJi/X7GVBOBmmvA43qoKideuhOBrVGBHvIF/yO9p23dIiUrGmW9kxXCSxgute
96
- JI/W23RbIRksG2pioMhd4dCXq3FLLlkOV1YfCwWixNB+iIhQPPZVaPNfgPhCn4Dt
97
- DeGjje/qA4fkLtRmOtb9PUBq3ToRDE4=
89
+ BQADggEBAN+GL5/myPWg7oH4mVrG7/OhXF1MoYQF0ddaNiqaweEHMuKJBQCVZRbL
90
+ 37HojoKXXv2yyRJBCeTB+ojrxX+5PdLVZa0ss7toWzJ2A1poPXZ1eZvm5xeFD32z
91
+ YQaTmmNWNI3PCDTyJ2PXUc+bDiNNwcZ7yc5o78UNRvp9Jxghya17Q76c9Ov9wvnv
92
+ dxxQKWGOQy0m4fBrkyjAyH9Djjn81RbQrqYgPuhd5nD0HjN3VUQLhQbIJrk9TVs0
93
+ EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
94
+ 9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
98
95
  -----END CERTIFICATE-----
99
- date: 2020-04-14 00:00:00.000000000 Z
96
+ date: 2021-04-08 00:00:00.000000000 Z
100
97
  dependencies:
101
98
  - !ruby/object:Gem::Dependency
102
99
  name: metasploit-yard
@@ -158,16 +155,16 @@ dependencies:
158
155
  name: yard
159
156
  requirement: !ruby/object:Gem::Requirement
160
157
  requirements:
161
- - - "<"
158
+ - - ">="
162
159
  - !ruby/object:Gem::Version
163
- version: 0.8.7.4
160
+ version: '0'
164
161
  type: :development
165
162
  prerelease: false
166
163
  version_requirements: !ruby/object:Gem::Requirement
167
164
  requirements:
168
- - - "<"
165
+ - - ">="
169
166
  - !ruby/object:Gem::Version
170
- version: 0.8.7.4
167
+ version: '0'
171
168
  - !ruby/object:Gem::Dependency
172
169
  name: pry
173
170
  requirement: !ruby/object:Gem::Requirement
@@ -230,14 +227,14 @@ dependencies:
230
227
  requirements:
231
228
  - - ">="
232
229
  - !ruby/object:Gem::Version
233
- version: '0'
230
+ version: '3.1'
234
231
  type: :runtime
235
232
  prerelease: false
236
233
  version_requirements: !ruby/object:Gem::Requirement
237
234
  requirements:
238
235
  - - ">="
239
236
  - !ruby/object:Gem::Version
240
- version: '0'
237
+ version: '3.1'
241
238
  - !ruby/object:Gem::Dependency
242
239
  name: railties
243
240
  requirement: !ruby/object:Gem::Requirement
@@ -252,6 +249,20 @@ dependencies:
252
249
  - - "~>"
253
250
  - !ruby/object:Gem::Version
254
251
  version: 5.2.2
252
+ - !ruby/object:Gem::Dependency
253
+ name: webrick
254
+ requirement: !ruby/object:Gem::Requirement
255
+ requirements:
256
+ - - ">="
257
+ - !ruby/object:Gem::Version
258
+ version: '0'
259
+ type: :runtime
260
+ prerelease: false
261
+ version_requirements: !ruby/object:Gem::Requirement
262
+ requirements:
263
+ - - ">="
264
+ - !ruby/object:Gem::Version
265
+ version: '0'
255
266
  - !ruby/object:Gem::Dependency
256
267
  name: recog
257
268
  requirement: !ruby/object:Gem::Requirement
@@ -311,19 +322,16 @@ dependencies:
311
322
  description: Implements minimal ActiveRecord models and database helper code used
312
323
  in both the Metasploit Framework (MSF) and Metasploit commercial editions.
313
324
  email:
314
- - shuckins@rapid7.com
315
- - luke_imhoff@rapid7.com
316
- - dmaloney@rapid7.com
317
- - trevor_rosen@rapid7.com
325
+ - msfdev@metasploit.com
318
326
  executables: []
319
327
  extensions: []
320
328
  extra_rdoc_files: []
321
329
  files:
322
330
  - ".coveralls.yml"
331
+ - ".github/workflows/verify.yml"
323
332
  - ".gitignore"
324
333
  - ".rspec"
325
334
  - ".simplecov"
326
- - ".travis.yml"
327
335
  - ".yardopts"
328
336
  - CHANGELOG.md
329
337
  - CONTRIBUTING.md
@@ -408,11 +416,6 @@ files:
408
416
  - app/models/metasploit_data_models/search/visitor/method.rb
409
417
  - app/models/metasploit_data_models/search/visitor/relation.rb
410
418
  - app/models/metasploit_data_models/search/visitor/where.rb
411
- - app/validators/ip_format_validator.rb
412
- - app/validators/parameters_validator.rb
413
- - app/validators/password_is_strong_validator.rb
414
- - bin/mdm_console
415
- - bin/rails
416
419
  - config/initializers/arel_helper.rb
417
420
  - config/initializers/ipaddr.rb
418
421
  - config/locales/en.yml
@@ -649,8 +652,6 @@ files:
649
652
  - spec/app/models/metasploit_data_models/search/visitor/method_spec.rb
650
653
  - spec/app/models/metasploit_data_models/search/visitor/relation_spec.rb
651
654
  - spec/app/models/metasploit_data_models/search/visitor/where_spec.rb
652
- - spec/app/validators/parameters_validator_spec.rb
653
- - spec/app/validators/password_is_strong_validator_spec.rb
654
655
  - spec/dummy/Rakefile
655
656
  - spec/dummy/app/assets/config/manifest.js
656
657
  - spec/dummy/app/assets/javascripts/application.js
@@ -668,7 +669,7 @@ files:
668
669
  - spec/dummy/config/application.rb
669
670
  - spec/dummy/config/boot.rb
670
671
  - spec/dummy/config/database.yml.example
671
- - spec/dummy/config/database.yml.travis
672
+ - spec/dummy/config/database.yml.github_actions
672
673
  - spec/dummy/config/environment.rb
673
674
  - spec/dummy/config/environments/development.rb
674
675
  - spec/dummy/config/environments/production.rb
@@ -777,7 +778,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
777
778
  requirements:
778
779
  - - ">="
779
780
  - !ruby/object:Gem::Version
780
- version: '2.1'
781
+ version: '2.4'
781
782
  required_rubygems_version: !ruby/object:Gem::Requirement
782
783
  requirements:
783
784
  - - ">="
metadata.gz.sig CHANGED
Binary file
data/.travis.yml DELETED
@@ -1,22 +0,0 @@
1
- dist: trusty
2
- sudo: false
3
- group: stable
4
- cache: bundler
5
- language: ruby
6
- addons:
7
- postgresql: '9.6'
8
- apt:
9
- packages:
10
- - libpcap-dev
11
- - graphviz
12
- rvm:
13
- - 2.6.5
14
- before_script:
15
- - cp spec/dummy/config/database.yml.travis spec/dummy/config/database.yml
16
- - bundle exec rake --version
17
- - bundle exec rake db:create db:migrate
18
- script:
19
- # Disabling this check because it is proving unreliable
20
- #- git diff --exit-code spec/dummy/db/structure.sql
21
- - bundle exec rake spec
22
- - bundle exec rake yard
@@ -1,22 +0,0 @@
1
- require "ipaddr"
2
-
3
- # Validates that attribute is a valid IPv4 or IPv6 address.
4
- class IpFormatValidator < ActiveModel::EachValidator
5
- # Validates that `attribute`'s `value` on `object` is a valid IPv4 or IPv6 address.
6
- #
7
- # @return [void]
8
- def validate_each(object, attribute, value)
9
- error_message_block = lambda{ object.errors.add attribute, " must be a valid IPv4 or IPv6 address" }
10
- begin
11
- if value.is_a? IPAddr
12
- potential_ip = value.dup
13
- else
14
- potential_ip = IPAddr.new(value)
15
- end
16
-
17
- error_message_block.call unless potential_ip.ipv4? || potential_ip.ipv6?
18
- rescue ArgumentError
19
- error_message_block.call
20
- end
21
- end
22
- end
@@ -1,129 +0,0 @@
1
- # Validates that attribute's value is Array<Array(String, String)> which is the only valid type signature for serialized
2
- # parameters.
3
- class ParametersValidator < ActiveModel::EachValidator
4
- #
5
- # CONSTANTS
6
- #
7
-
8
- # Sentence explaining the valid type signature for parameters.
9
- TYPE_SIGNATURE_SENTENCE = 'Valid parameters are an Array<Array(String, String)>.'
10
-
11
- #
12
- # Instance Methods
13
- #
14
-
15
- # Validates that `attribute`'s `value` on `record` is `Array<Array(String, String)>` which is the only valid type
16
- # signature for serialized parameters.
17
- #
18
- # @return [void]
19
- def validate_each(record, attribute, value)
20
- if value.is_a? Array
21
- value.each_with_index do |element, index|
22
- if element.is_a? Array
23
- if element.length != 2
24
- extreme = :few
25
-
26
- if element.length > 2
27
- extreme = :many
28
- end
29
-
30
- length_error = length_error_at(
31
- :extreme => extreme,
32
- :element => element,
33
- :index => index
34
- )
35
-
36
- record.errors.add attribute, length_error
37
- else
38
- parameter_name = element.first
39
-
40
- if parameter_name.is_a? String
41
- unless parameter_name.present?
42
- error = error_at(
43
- :element => element,
44
- :index => index,
45
- :prefix => "has blank parameter name"
46
- )
47
- record.errors.add attribute, error
48
- end
49
- else
50
- error = error_at(
51
- :element => element,
52
- :index => index,
53
- :prefix => "has non-String parameter name (#{parameter_name.inspect})"
54
- )
55
- record.errors.add attribute, error
56
- end
57
-
58
- parameter_value = element.second
59
-
60
- unless parameter_value.is_a? String
61
- error = error_at(
62
- :element => element,
63
- :index => index,
64
- :prefix => "has non-String parameter value (#{parameter_value.inspect})"
65
- )
66
- record.errors.add attribute, error
67
- end
68
- end
69
- else
70
- error = error_at(
71
- :element => element,
72
- :index => index,
73
- :prefix => 'has non-Array'
74
- )
75
- record.errors.add attribute, error
76
- end
77
- end
78
- else
79
- record.errors.add attribute, "is not an Array. #{TYPE_SIGNATURE_SENTENCE}"
80
- end
81
- end
82
-
83
- private
84
-
85
- def error_at(options={})
86
- options.assert_valid_keys(:element, :index, :prefix)
87
- prefix = options.fetch(:prefix)
88
-
89
- clause = location_clause(
90
- :element => options[:element],
91
- :index => options[:index]
92
- )
93
- sentence = "#{prefix} #{clause}."
94
-
95
- sentences = [
96
- sentence,
97
- TYPE_SIGNATURE_SENTENCE
98
- ]
99
-
100
- error = sentences.join(" ")
101
-
102
- error
103
- end
104
-
105
- def length_error_at(options={})
106
- options.assert_valid_keys(:element, :extreme, :index)
107
- extreme = options.fetch(:extreme)
108
-
109
- prefix = "has too #{extreme} elements"
110
- error = error_at(
111
- :element => options[:element],
112
- :index => options[:index],
113
- :prefix => prefix
114
- )
115
-
116
- error
117
- end
118
-
119
- def location_clause(options={})
120
- options.assert_valid_keys(:element, :index)
121
-
122
- element = options.fetch(:element)
123
- index = options.fetch(:index)
124
-
125
- clause = "at index #{index} (#{element.inspect})"
126
-
127
- clause
128
- end
129
- end
@@ -1,117 +0,0 @@
1
- # Validates that
2
- class PasswordIsStrongValidator < ActiveModel::EachValidator
3
- #
4
- # CONSTANTS
5
- #
6
-
7
- # Known passwords that should NOT be allowed and should be considered weak.
8
- COMMON_PASSWORDS = %w{
9
- password pass root admin metasploit
10
- msf 123456 qwerty abc123 letmein monkey link182 demo
11
- changeme test1234 rapid7
12
- }
13
-
14
- # Special characters that are considered to strength passwords and are required once in a strong password.
15
- SPECIAL_CHARS = %q{!@"#$%&'()*+,-./:;<=>?[\\]^_`{|}~ }
16
-
17
- # Validates that the `attribute`'s `value` on `record` contains letters, numbers, and at least one special character
18
- # without containing the `record.username`, any {COMMON_PASSWORDS} or repetition.
19
- def validate_each(record, attribute, value)
20
- return if value.blank?
21
-
22
- if is_simple?(value)
23
- record.errors[attribute] << "must contain letters, numbers, and at least one special character"
24
- end
25
-
26
- if contains_username?(record.username, value)
27
- record.errors[attribute] << "must not contain the username"
28
- end
29
-
30
- if is_common_password?(value)
31
- record.errors[attribute] << "must not be a common password"
32
- end
33
-
34
- if contains_repetition?(value)
35
- record.errors[attribute] << "must not be a predictable sequence of characters"
36
- end
37
- end
38
-
39
- private
40
-
41
- def is_simple?(password)
42
- not (password =~ /[A-Za-z]/ and password =~ /[0-9]/ and password =~ /[#{Regexp.escape(SPECIAL_CHARS)}]/)
43
- end
44
-
45
- def contains_username?(username, password)
46
- !!(password =~ /#{username}/i)
47
- end
48
-
49
- def is_common_password?(password)
50
- COMMON_PASSWORDS.each do |pw|
51
- common_pw = [pw] # pw + "!", pw + "1", pw + "12", pw + "123", pw + "1234"]
52
- common_pw += mutate_pass(pw)
53
- common_pw.each do |common_pass|
54
- if password.downcase =~ /#{common_pass}[\d!]*/
55
- return true
56
- end
57
- end
58
- end
59
- false
60
- end
61
-
62
- def mutate_pass(password)
63
- mutations = {
64
- 'a' => '@',
65
- 'o' => '0',
66
- 'e' => '3',
67
- 's' => '$',
68
- 't' => '7',
69
- 'l' => '1'
70
- }
71
-
72
- iterations = mutations.keys.dup
73
- results = []
74
-
75
- # Find PowerSet of all possible mutation combinations
76
- iterations = iterations.inject([[]]){|c,y|r=[];c.each{|i|r<<i;r<<i+[y]};r}
77
-
78
- # Iterate through combinations to create each possible mutation
79
- iterations.each do |iteration|
80
- next if iteration.flatten.empty?
81
- first = iteration.shift
82
- intermediate = password.gsub(/#{first}/i, mutations[first])
83
- iteration.each do |mutator|
84
- next unless mutator.kind_of? String
85
- intermediate.gsub!(/#{mutator}/i, mutations[mutator])
86
- end
87
- results << intermediate
88
- end
89
-
90
- return results
91
- end
92
-
93
-
94
-
95
- def contains_repetition?(password)
96
- # Password repetition (quite basic) -- no "aaaaaa" or "ababab" or "abcabc" or
97
- # "abcdabcd" (but note that the user can use "aaaaaab" or something).
98
-
99
- if password.scan(/./).uniq.size < 2
100
- return true
101
- end
102
-
103
- if (password.size % 2 == 0) and (password.scan(/../).uniq.size < 2)
104
- return true
105
- end
106
-
107
- if (password.size % 3 == 0) and (password.scan(/.../).uniq.size < 2)
108
- return true
109
- end
110
-
111
- if (password.size % 4 == 0) and (password.scan(/..../).uniq.size < 2)
112
- return true
113
- end
114
-
115
- false
116
- end
117
- end