metasploit_data_models 4.0.1 → 4.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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