rex-socket 0.1.27 → 0.1.31

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.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1c761ab84c205dd7b2046c7249f279f4f9b4ac2ba16168dd4c7cc62e1ac41fb8
4
- data.tar.gz: 4ead3c6958a08e49e7255946a772ee8ba4934de87e3f1e1e96ad94db9399fb69
3
+ metadata.gz: 398f01b37a1c460126d7d3d375f0bf332667e025402c71864637d3c9803de7f4
4
+ data.tar.gz: ee7bb9810a863055fdf614671831ed60ce2397e524f53aa8c5e211bb274670ab
5
5
  SHA512:
6
- metadata.gz: 5b2ddff4009180354ffc849c021da8087855406e0fa2d7c549981cc7bdfc13adc854cda40da406605c513d719327fa2464948f2e24c06a533b248a149e171061
7
- data.tar.gz: 4a862d8480c701c99a28ff67be3db07ecd5803509f18d712f5acfa42bbb432e3022a5797a8847d13e7a989243e19bf4081ad632e7466ee51e5ef29006a5ab39d
6
+ metadata.gz: 404fd949220d753521ba39f90cea3fab95668519a293c496ec5e1689a004467a30ca948cb42fd81744cc56e5a50976a97c96be786403a8f90b84514c52d8330e
7
+ data.tar.gz: 5b940b7536739271b96f9cf97008d3c490a54cdac119b0b9bbe42848c29ee21e78058c989f65c9a50384d0ac291a003f5a86b5a09904cee0c9aca31de9a576ef
checksums.yaml.gz.sig CHANGED
Binary file
data.tar.gz.sig CHANGED
Binary file
data/lib/rex/socket.rb CHANGED
@@ -730,7 +730,7 @@ module Socket
730
730
  # Wrapper around getsockname that stores the local address and local port values.
731
731
  #
732
732
  def getlocalname
733
- if self.localhost.nil? && self.localport.nil?
733
+ if [nil, '0.0.0.0', '::'].include?(self.localhost) && [nil, 0].include?(self.localport)
734
734
  _, self.localhost, self.localport = getsockname
735
735
  end
736
736
 
@@ -110,10 +110,7 @@ class Rex::Socket::Parameters
110
110
  self.sslctx = hash['SSLContext']
111
111
  end
112
112
 
113
- supported_ssl_versions = ['Auto', 'SSL2', 'SSL23', 'TLS1', 'SSL3', :Auto, :SSLv2, :SSLv3, :SSLv23, :TLSv1]
114
- if (hash['SSLVersion'] and supported_ssl_versions.include? hash['SSLVersion'])
115
- self.ssl_version = hash['SSLVersion']
116
- end
113
+ self.ssl_version = hash.fetch('SSLVersion', nil)
117
114
 
118
115
  supported_ssl_verifiers = %W{CLIENT_ONCE FAIL_IF_NO_PEER_CERT NONE PEER}
119
116
  if (hash['SSLVerifyMode'] and supported_ssl_verifiers.include? hash['SSLVerifyMode'])
@@ -383,7 +380,27 @@ class Rex::Socket::Parameters
383
380
 
384
381
  # What version of SSL to use (Auto, SSL2, SSL3, SSL23, TLS1)
385
382
  # @return [String,Symbol]
386
- attr_accessor :ssl_version
383
+ attr_reader :ssl_version
384
+ def ssl_version=(version)
385
+ # Let the caller specify a particular SSL/TLS version
386
+ case version
387
+ when 'SSL2'
388
+ version = :SSLv2
389
+ # 'TLS' will be the new name for autonegotation with newer versions of OpenSSL
390
+ when 'SSL23', 'TLS', 'Auto'
391
+ version = :SSLv23
392
+ when 'SSL3'
393
+ version = :SSLv3
394
+ when 'TLS1','TLS1.0'
395
+ version = :TLSv1
396
+ when 'TLS1.1'
397
+ version = :TLSv1_1
398
+ when 'TLS1.2'
399
+ version = :TLSv1_2
400
+ end
401
+
402
+ @ssl_version = version
403
+ end
387
404
 
388
405
  # What specific SSL Cipher(s) to use, may be a string containing the cipher
389
406
  # name or an array of strings containing cipher names e.g.
@@ -84,27 +84,27 @@ class RangeWalker
84
84
 
85
85
  # Handle IPv6 CIDR first
86
86
  if arg.include?(':') && arg.include?('/')
87
- return false if (new_ranges = parse_ipv6_cidr(arg)) == nil
87
+ next if (new_ranges = parse_ipv6_cidr(arg)).nil?
88
88
 
89
89
  # Handle plain IPv6 next (support ranges, but not CIDR)
90
90
  elsif arg.include?(':')
91
- return false if (new_ranges = parse_ipv6(arg)) == nil
91
+ next if (new_ranges = parse_ipv6(arg)).nil?
92
92
 
93
93
  # Handle IPv4 CIDR
94
94
  elsif arg.include?("/")
95
- return false if (new_ranges = parse_ipv4_cidr(arg)) == nil
95
+ next if (new_ranges = parse_ipv4_cidr(arg)).nil?
96
96
 
97
97
  # Handle hostnames
98
98
  elsif arg =~ /[^-0-9,.*]/
99
- return false if (new_ranges = parse_hostname(arg)) == nil
99
+ next if (new_ranges = parse_hostname(arg)).nil?
100
100
 
101
101
  # Handle IPv4 ranges
102
102
  elsif arg =~ MATCH_IPV4_RANGE
103
103
  # Then it's in the format of 1.2.3.4-5.6.7.8
104
- return false if (new_ranges = parse_ipv4_ranges(arg)) == nil
104
+ next if (new_ranges = parse_ipv4_ranges(arg)).nil?
105
105
 
106
106
  else
107
- new_ranges = expand_nmap(arg)
107
+ next if (new_ranges = expand_nmap(arg)).nil?
108
108
  end
109
109
 
110
110
  ranges += new_ranges
@@ -134,7 +134,7 @@ class RangeWalker
134
134
  #
135
135
  # @return [Hash<Symbol, String>] The next host in the range
136
136
  def next_host
137
- return false if not valid?
137
+ return unless valid?
138
138
 
139
139
  if (@curr_addr > @ranges[@curr_range_index].stop)
140
140
  # Then we are at the end of this range. Grab the next one.
@@ -247,7 +247,7 @@ class RangeWalker
247
247
  def expand_cidr(arg)
248
248
  start,stop = Rex::Socket.cidr_crack(arg)
249
249
  if !start or !stop
250
- return false
250
+ return
251
251
  end
252
252
  range = Range.new
253
253
  range.start = Rex::Socket.addr_atoi(start)
@@ -275,18 +275,16 @@ class RangeWalker
275
275
  #
276
276
  def expand_nmap(arg)
277
277
  # Can't really do anything with IPv6
278
- return false if arg.include?(":")
278
+ return if arg.include?(":")
279
279
 
280
280
  # nmap calls these errors, but it's hard to catch them with our
281
281
  # splitting below, so short-cut them here
282
- return false if arg.include?(",-") or arg.include?("-,")
282
+ return if arg.include?(",-") or arg.include?("-,")
283
283
 
284
284
  bytes = []
285
285
  sections = arg.split('.')
286
- if sections.length != 4
287
- # Too many or not enough dots
288
- return false
289
- end
286
+ return unless sections.length == 4 # Too many or not enough dots
287
+
290
288
  sections.each { |section|
291
289
  if section.empty?
292
290
  # pretty sure this is an unintentional artifact of the C
@@ -300,7 +298,7 @@ class RangeWalker
300
298
  # I think this ought to be 1-254, but this is how nmap does it.
301
299
  section = "0-255"
302
300
  elsif section.include?("*")
303
- return false
301
+ return
304
302
  end
305
303
 
306
304
  # Break down the sections into ranges like so
@@ -317,18 +315,18 @@ class RangeWalker
317
315
  # if the upper bound is empty, stop at 255
318
316
  #
319
317
  bounds = r.split('-', -1)
320
- return false if (bounds.length > 2)
318
+ return if (bounds.length > 2)
321
319
 
322
320
  bounds[0] = 0 if bounds[0].nil? or bounds[0].empty?
323
321
  bounds[1] = 255 if bounds[1].nil? or bounds[1].empty?
324
322
  bounds.map!{|b| b.to_i}
325
- return false if bounds[0] > bounds[1]
323
+ return if bounds[0] > bounds[1]
326
324
  else
327
325
  # Then it's a single value
328
326
  bounds[0] = r.to_i
329
327
  end
330
- return false if bounds[0] > 255 or (bounds[1] and bounds[1] > 255)
331
- return false if bounds[1] and bounds[0] > bounds[1]
328
+ return if bounds[0] > 255 or (bounds[1] and bounds[1] > 255)
329
+ return if bounds[1] and bounds[0] > bounds[1]
332
330
  if bounds[1]
333
331
  bounds[0].upto(bounds[1]) do |i|
334
332
  sets.push(i)
@@ -401,7 +399,7 @@ class RangeWalker
401
399
  return if !valid_cidr_chars?(arg)
402
400
 
403
401
  ip_part, mask_part = arg.split("/")
404
- return false unless (0..32).include? mask_part.to_i
402
+ return unless (0..32).include? mask_part.to_i
405
403
  if ip_part =~ /^\d{1,3}(\.\d{1,3}){1,3}$/
406
404
  return unless Rex::Socket.is_ipv4?(ip_part)
407
405
  end
@@ -11,6 +11,9 @@ require 'openssl'
11
11
  ###
12
12
  module Rex::Socket::Ssl
13
13
 
14
+ # Default to SSLv23 (automatically negotiate)
15
+ DEFAULT_SSL_VERSION = :SSLv23
16
+
14
17
  module CertProvider
15
18
 
16
19
  def self.ssl_generate_subject(cn: nil, org: nil, loc: nil, st: nil)
@@ -122,7 +125,14 @@ module Rex::Socket::Ssl
122
125
  key, cert, chain = ssl_generate_certificate(cert_vars: {cn: params.ssl_cn})
123
126
  end
124
127
 
125
- ctx = OpenSSL::SSL::SSLContext.new()
128
+ version = params&.ssl_version || DEFAULT_SSL_VERSION
129
+ # Raise an error if no selected versions are supported
130
+ unless Rex::Socket::SslTcp.system_ssl_methods.include? version
131
+ raise ArgumentError,
132
+ "This version of Ruby does not support the requested SSL/TLS version #{version}"
133
+ end
134
+
135
+ ctx = OpenSSL::SSL::SSLContext.new(version)
126
136
  ctx.key = key
127
137
  ctx.cert = cert
128
138
  ctx.extra_chain_cert = chain
@@ -65,35 +65,14 @@ begin
65
65
  def initsock(params = nil)
66
66
  super
67
67
 
68
- # Default to SSLv23 (automatically negotiate)
69
- version = :SSLv23
70
-
71
- # Let the caller specify a particular SSL/TLS version
72
- if params
73
- case params.ssl_version
74
- when 'SSL2', :SSLv2
75
- version = :SSLv2
76
- # 'TLS' will be the new name for autonegotation with newer versions of OpenSSL
77
- when 'SSL23', :SSLv23, 'TLS', 'Auto'
78
- version = :SSLv23
79
- when 'SSL3', :SSLv3
80
- version = :SSLv3
81
- when 'TLS1','TLS1.0', :TLSv1
82
- version = :TLSv1
83
- when 'TLS1.1', :TLSv1_1
84
- version = :TLSv1_1
85
- when 'TLS1.2', :TLSv1_2
86
- version = :TLSv1_2
87
- end
88
- end
89
-
68
+ version = params&.ssl_version || Rex::Socket::Ssl::DEFAULT_SSL_VERSION
90
69
  # Raise an error if no selected versions are supported
91
70
  unless Rex::Socket::SslTcp.system_ssl_methods.include? version
92
71
  raise ArgumentError,
93
- "This version of Ruby does not support the requested SSL/TLS version #{params.ssl_version}"
72
+ "This version of Ruby does not support the requested SSL/TLS version #{version}"
94
73
  end
95
74
 
96
- # Try intializing the socket with this SSL/TLS version
75
+ # Try initializing the socket with this SSL/TLS version
97
76
  # This will throw an exception if it fails
98
77
  initsock_with_ssl_version(params, version)
99
78
 
@@ -1,5 +1,5 @@
1
1
  module Rex
2
2
  module Socket
3
- VERSION = "0.1.27"
3
+ VERSION = "0.1.31"
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rex-socket
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.27
4
+ version: 0.1.31
5
5
  platform: ruby
6
6
  authors:
7
7
  - Metasploit Hackers
@@ -93,7 +93,7 @@ cert_chain:
93
93
  EknWpNgVhohbot1lfVAMmIhdtOVaRVcQQixWPwprDj/ydB8ryDMDosIMcw+fkoXU
94
94
  9GJsSaSRRYQ9UUkVL27b64okU8D48m8=
95
95
  -----END CERTIFICATE-----
96
- date: 2021-03-24 00:00:00.000000000 Z
96
+ date: 2021-08-05 00:00:00.000000000 Z
97
97
  dependencies:
98
98
  - !ruby/object:Gem::Dependency
99
99
  name: rake
metadata.gz.sig CHANGED
Binary file