pwn 0.4.729 → 0.4.730

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: 342b2e93bde34396f0881a3ca94d5940a83e397b1c2e129944d9cb4e1761b38d
4
- data.tar.gz: 9f608f6bacfd4ebb42516f3594b74140c6b07055d5500d14959a1b3e13083e08
3
+ metadata.gz: e7ccbfda03fe5f76d3a1c43c7bd628330c0e9c4d757ab402beb87aa1f6237c95
4
+ data.tar.gz: 07762b592179600911181ba24343235292eb879cd6b0690b77cc22d75e27c9e8
5
5
  SHA512:
6
- metadata.gz: 2bfe0361b99bcea9fe446f7f3df17654a8b0128c6fcce8ae6c11028d41cd3f0ca59452fb6363aba58fe37c05262d59e27f45c3e1967a2fa9f9c92d87019b076f
7
- data.tar.gz: 4572649902d6fac50fc7b87504893c530368b106e6c086fd8756109aecb13eec5a6d710d79c827b816c009478c5667e2d9fbc26f2b2226c6020783f62e8654ad
6
+ metadata.gz: 999906828628de7f537713a86a33a182897e1850762619c013d34cbda799af3eba0b14d27c257dbf8d13b10796431ea1afe78bc72ac385164c124ff12bc9ce78
7
+ data.tar.gz: 4f64da54f1a20cffb3c1fa2af71bb1c79c85a47073a7cdd0d6a49be7ae79bdc19fc8deb7aaab90ce9ac6b4986fe15df3dfff5f5bc6fce2a1d3eed01599cf609d
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ rvm use ruby-3.2.2@pwn
37
37
  $ rvm list gemsets
38
38
  $ gem install --verbose pwn
39
39
  $ pwn
40
- pwn[v0.4.729]:001 >>> PWN.help
40
+ pwn[v0.4.730]:001 >>> PWN.help
41
41
  ```
42
42
 
43
43
  [![Installing the pwn Security Automation Framework](https://raw.githubusercontent.com/0dayInc/pwn/master/documentation/pwn_install.png)](https://youtu.be/G7iLUY4FzsI)
@@ -52,7 +52,7 @@ $ rvm use ruby-3.2.2@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.4.729]:001 >>> PWN.help
55
+ pwn[v0.4.730]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
 
@@ -17,6 +17,7 @@ module PWN
17
17
  # http_method: 'optional HTTP method (defaults to GET)
18
18
  # rest_call: 'required rest call to make per the schema',
19
19
  # params: 'optional params passed in the URI or HTTP Headers',
20
+ # http_headers: 'optional HTTP headers sent in HTTP methods that support it e.g. POST'
20
21
  # http_body: 'optional HTTP body sent in HTTP methods that support it e.g. POST'
21
22
  # )
22
23
 
@@ -42,78 +43,46 @@ module PWN
42
43
  spinner.auto_spin
43
44
 
44
45
  case http_method
45
- when :delete
46
+ when :delete, :get
47
+ headers = opts[:http_headers]
48
+ headers ||= {
49
+ content_type: content_type,
50
+ authorization: "Bearer #{token}",
51
+ params: params
52
+ }
46
53
  response = rest_client.execute(
47
- method: :delete,
54
+ method: http_method,
48
55
  url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
49
- headers: {
50
- content_type: content_type,
51
- authorization: "Bearer #{token}",
52
- params: params
53
- },
56
+ headers: headers,
54
57
  verify_ssl: false
55
58
  )
56
59
 
57
- when :get
58
- response = rest_client.execute(
59
- method: :get,
60
- url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
61
- headers: {
62
- content_type: content_type,
63
- authorization: "Bearer #{token}",
64
- params: params
65
- },
66
- verify_ssl: false
67
- )
68
-
69
- when :post
60
+ when :post, :put
61
+ headers = opts[:http_headers]
70
62
  if http_body.key?(:multipart)
63
+ headers ||= {
64
+ authorization: "Bearer #{token}"
65
+ }
71
66
  response = rest_client.execute(
72
67
  method: :post,
73
68
  url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
74
- headers: {
75
- authorization: "Bearer #{token}"
76
- },
77
- payload: http_body,
78
- verify_ssl: false
79
- )
80
- else
81
- response = rest_client.execute(
82
- method: :post,
83
- url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
84
- headers: {
85
- content_type: content_type,
86
- authorization: "Bearer #{token}"
87
- },
88
- payload: http_body.to_json,
89
- verify_ssl: false
90
- )
91
- end
92
-
93
- when :put
94
- if http_body.key?(:multipart)
95
- response = rest_client.execute(
96
- method: :put,
97
- url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
98
- headers: {
99
- authorization: "Bearer #{token}"
100
- },
69
+ headers: headers,
101
70
  payload: http_body,
102
71
  verify_ssl: false
103
72
  )
104
73
  else
74
+ headers ||= {
75
+ content_type: content_type,
76
+ authorization: "Bearer #{token}"
77
+ }
105
78
  response = rest_client.execute(
106
- method: :post,
79
+ method: http2_method,
107
80
  url: "#{base_bd_bin_analysis_api_uri}/#{rest_call}",
108
- headers: {
109
- content_type: content_type,
110
- authorization: "Bearer #{token}"
111
- },
81
+ headers: headers,
112
82
  payload: http_body.to_json,
113
83
  verify_ssl: false
114
84
  )
115
85
  end
116
-
117
86
  else
118
87
  raise @@logger.error("Unsupported HTTP Method #{http_method} for #{self} Plugin")
119
88
  end
@@ -147,6 +116,77 @@ module PWN
147
116
  raise e
148
117
  end
149
118
 
119
+ # Supported Method Parameters::
120
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_apps_by_group(
121
+ # token: 'required - Bearer token',
122
+ # group_id: 'required - group id'
123
+ # )
124
+
125
+ public_class_method def self.get_apps_by_group(opts = {})
126
+ token = opts[:token]
127
+ group_id = opts[:group_id]
128
+
129
+ response = bd_bin_analysis_rest_call(
130
+ token: token,
131
+ rest_call: "apps/#{group_id}"
132
+ )
133
+
134
+ JSON.parse(response, symbolize_names: true)
135
+ rescue StandardError => e
136
+ raise e
137
+ end
138
+
139
+ # Supported Method Parameters::
140
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.upload_file(
141
+ # token: 'required - Bearer token',
142
+ # file: 'required - file to upload'
143
+ # )
144
+
145
+ public_class_method def self.upload_file(opts = {})
146
+ token = opts[:token]
147
+ file = opts[:file]
148
+ raise "ERROR: #{file} not found." unless File.exist?(file)
149
+
150
+ http_headers = {
151
+ authorization: "Bearer #{token}"
152
+ }
153
+
154
+ http_body = {
155
+ multipart: true,
156
+ file: File.new(file, 'rb')
157
+ }
158
+
159
+ response = bd_bin_analysis_rest_call(
160
+ http_method: :post,
161
+ token: token,
162
+ rest_call: 'files',
163
+ http_headers: http_headers,
164
+ http_body: http_body
165
+ )
166
+
167
+ JSON.parse(response, symbolize_names: true)
168
+ rescue StandardError => e
169
+ raise e
170
+ end
171
+
172
+ # Supported Method Parameters::
173
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_tasks(
174
+ # token: 'required - Bearer token'
175
+ # )
176
+
177
+ public_class_method def self.get_tasks(opts = {})
178
+ token = opts[:token]
179
+
180
+ response = bd_bin_analysis_rest_call(
181
+ token: token,
182
+ rest_call: 'tasks'
183
+ )
184
+
185
+ JSON.parse(response, symbolize_names: true)
186
+ rescue StandardError => e
187
+ raise e
188
+ end
189
+
150
190
  # Supported Method Parameters::
151
191
  # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_groups(
152
192
  # token: 'required - Bearer token'
@@ -166,18 +206,67 @@ module PWN
166
206
  end
167
207
 
168
208
  # Supported Method Parameters::
169
- # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_apps_by_group(
209
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.create_group(
170
210
  # token: 'required - Bearer token',
171
- # group_id: 'required - group id'
211
+ # name: 'required - group name',
212
+ # desc: 'optional - group description',
213
+ # parent: 'optional - parent group id',
214
+ # delete_binary: 'optional - delete binary after analysis C|Y|N (Default: C== company default)',
215
+ # binary_cleanup_age: 'optional - after how long the binary will be deleted in seconds (Default: 604_800 / 1 week)',
216
+ # product_cleanup_age: 'optional - after how long the product will be deleted in seconds (Default: 604_800 / 1 week)',
217
+ # file_download_enabled: 'optional - allow download of uploaded binaries from group (Default: false),
218
+ # low_risk_tolerance: 'optional - low risk tolerance nil|true|false (Default: nil == company default)',
219
+ # include_historical_vulns: 'optional - include historical vulns nil|true|false (Default: nil == company default)',
220
+ # cvss3_fallback: 'optional - cvss3 fallback nil|true|false (Default: nil == company default)',
221
+ # assume_unknown_version_as_latest: 'optional - assume unknown version as latest nil|true|false (Default: nil == company default)',
222
+ # custom_data: 'optional - custom data hash (see group metadata for details)',
223
+ # scan_infoleak: 'optional - scan infoleak nil|true|false (Default: nil == company default)',
224
+ # code_analysis: 'optional - code analysis nil|true|false (Default: nil == company default)',
225
+ # scan_code_similarity: 'optional - scan code similarity nil|true|false (Default: nil == company default)'
172
226
  # )
173
227
 
174
- public_class_method def self.apps_by_group(opts = {})
228
+ public_class_method def self.create_group(opts = {})
175
229
  token = opts[:token]
176
- group_id = opts[:group_id]
230
+ name = opts[:name]
231
+ desc = opts[:desc]
232
+ parent = opts[:parent]
233
+ delete_binary = opts[:delete_binary] ||= 'C'
234
+ binary_cleanup_age = opts[:binary_cleanup_age] ||= 604_800
235
+ product_cleanup_age = opts[:product_cleanup_age] ||= 604_800
236
+ file_download_enabled = opts[:file_download_enabled] ||= false
237
+ low_risk_tolerance = opts[:low_risk_tolerance]
238
+ include_historical_vulns = opts[:include_historical_vulns]
239
+ cvss3_fallback = opts[:cvss3_fallback]
240
+ assume_unknown_version_as_latest = opts[:assume_unknown_version_as_latest]
241
+ custom_data = opts[:custom_data]
242
+ scan_infoleak = opts[:scan_infoleak]
243
+ code_analysis = opts[:code_analysis]
244
+ scan_code_similarity = opts[:scan_code_similarity]
245
+
246
+ http_headers = {
247
+ authorization: "Bearer #{token}",
248
+ name: name,
249
+ description: desc,
250
+ parent: parent,
251
+ delete_binary_after_scan: delete_binary,
252
+ binary_cleanup_age: binary_cleanup_age,
253
+ product_cleanup_age: product_cleanup_age,
254
+ file_download_enabled: file_download_enabled,
255
+ low_risk_tolerance: low_risk_tolerance,
256
+ include_historical_vulnerabilities: include_historical_vulns,
257
+ cvss3_fallback: cvss3_fallback,
258
+ assume_unknown_version_as_latest: assume_unknown_version_as_latest,
259
+ custom_data: custom_data,
260
+ scan_infoleak: scan_infoleak,
261
+ code_analysis: code_analysis,
262
+ scan_code_similarity: scan_code_similarity
263
+ }
177
264
 
178
265
  response = bd_bin_analysis_rest_call(
266
+ http_method: :post,
179
267
  token: token,
180
- rest_call: "apps/#{group_id}"
268
+ rest_call: 'groups',
269
+ http_headers: http_headers
181
270
  )
182
271
 
183
272
  JSON.parse(response, symbolize_names: true)
@@ -206,31 +295,178 @@ module PWN
206
295
  end
207
296
 
208
297
  # Supported Method Parameters::
209
- # response = PWN::Plugins::BlackDuckBinaryAnalysis.upload_file(
210
- # token: 'required - Bearer token',
211
- # file: 'required - file to upload',
212
- # purpose: 'optional - intended purpose of the uploaded documents (defaults to fine-tune'
298
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_licenses(
299
+ # token: 'required - Bearer token'
213
300
  # )
214
301
 
215
- public_class_method def self.upload_file(opts = {})
302
+ public_class_method def self.get_licenses(opts = {})
216
303
  token = opts[:token]
217
- file = opts[:file]
218
- raise "ERROR: #{file} not found." unless File.exist?(file)
219
304
 
220
- purpose = opts[:purpose]
221
- purpose ||= 'fine-tune'
305
+ response = bd_bin_analysis_rest_call(
306
+ token: token,
307
+ rest_call: 'licenses'
308
+ )
222
309
 
223
- http_body = {
224
- multipart: true,
225
- file: File.new(file, 'rb'),
226
- purpose: purpose
227
- }
310
+ JSON.parse(response, symbolize_names: true)
311
+ rescue StandardError => e
312
+ raise e
313
+ end
314
+
315
+ # Supported Method Parameters::
316
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_component_licenses(
317
+ # token: 'required - Bearer token'
318
+ # )
319
+
320
+ public_class_method def self.get_component_licenses(opts = {})
321
+ token = opts[:token]
228
322
 
229
323
  response = bd_bin_analysis_rest_call(
230
- http_method: :post,
231
324
  token: token,
232
- rest_call: 'files',
233
- http_body: http_body
325
+ rest_call: 'component-licenses'
326
+ )
327
+
328
+ JSON.parse(response, symbolize_names: true)
329
+ rescue StandardError => e
330
+ raise e
331
+ end
332
+
333
+ # Supported Method Parameters::
334
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_tags(
335
+ # token: 'required - Bearer token'
336
+ # )
337
+
338
+ public_class_method def self.get_tags(opts = {})
339
+ token = opts[:token]
340
+
341
+ response = bd_bin_analysis_rest_call(
342
+ token: token,
343
+ rest_call: 'tags'
344
+ )
345
+
346
+ JSON.parse(response, symbolize_names: true)
347
+ rescue StandardError => e
348
+ raise e
349
+ end
350
+
351
+ # Supported Method Parameters::
352
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_vulnerabilities(
353
+ # token: 'required - Bearer token'
354
+ # )
355
+
356
+ public_class_method def self.get_vulnerabilities(opts = {})
357
+ token = opts[:token]
358
+
359
+ response = bd_bin_analysis_rest_call(
360
+ token: token,
361
+ rest_call: 'vulnerabilities'
362
+ )
363
+
364
+ JSON.parse(response, symbolize_names: true)
365
+ rescue StandardError => e
366
+ raise e
367
+ end
368
+
369
+ # Supported Method Parameters::
370
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_components(
371
+ # token: 'required - Bearer token'
372
+ # )
373
+
374
+ public_class_method def self.get_components(opts = {})
375
+ token = opts[:token]
376
+
377
+ response = bd_bin_analysis_rest_call(
378
+ token: token,
379
+ rest_call: 'components'
380
+ )
381
+
382
+ JSON.parse(response, symbolize_names: true)
383
+ rescue StandardError => e
384
+ raise e
385
+ end
386
+
387
+ # Supported Method Parameters::
388
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_vendor_vulns(
389
+ # token: 'required - Bearer token'
390
+ # )
391
+
392
+ public_class_method def self.get_vendor_vulns(opts = {})
393
+ token = opts[:token]
394
+
395
+ response = bd_bin_analysis_rest_call(
396
+ token: token,
397
+ rest_call: 'teacher/api/vulns'
398
+ )
399
+
400
+ JSON.parse(response, symbolize_names: true)
401
+ rescue StandardError => e
402
+ raise e
403
+ end
404
+
405
+ # Supported Method Parameters::
406
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_audit_trail(
407
+ # token: 'required - Bearer token'
408
+ # )
409
+
410
+ public_class_method def self.get_audit_trail(opts = {})
411
+ token = opts[:token]
412
+
413
+ response = bd_bin_analysis_rest_call(
414
+ token: token,
415
+ rest_call: 'audit-trail'
416
+ )
417
+
418
+ JSON.parse(response, symbolize_names: true)
419
+ rescue StandardError => e
420
+ raise e
421
+ end
422
+
423
+ # Supported Method Parameters::
424
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_status(
425
+ # token: 'required - Bearer token'
426
+ # )
427
+
428
+ public_class_method def self.get_status(opts = {})
429
+ token = opts[:token]
430
+
431
+ response = bd_bin_analysis_rest_call(
432
+ token: token,
433
+ rest_call: 'status'
434
+ )
435
+
436
+ JSON.parse(response, symbolize_names: true)
437
+ rescue StandardError => e
438
+ raise e
439
+ end
440
+
441
+ # Supported Method Parameters::
442
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_service_info(
443
+ # token: 'required - Bearer token'
444
+ # )
445
+
446
+ public_class_method def self.get_service_info(opts = {})
447
+ token = opts[:token]
448
+
449
+ response = bd_bin_analysis_rest_call(
450
+ token: token,
451
+ rest_call: 'service/info'
452
+ )
453
+
454
+ JSON.parse(response, symbolize_names: true)
455
+ rescue StandardError => e
456
+ raise e
457
+ end
458
+
459
+ # Supported Method Parameters::
460
+ # response = PWN::Plugins::BlackDuckBinaryAnalysis.get_service_version(
461
+ # token: 'required - Bearer token'
462
+ # )
463
+
464
+ public_class_method def self.get_service_version(opts = {})
465
+ token = opts[:token]
466
+
467
+ response = bd_bin_analysis_rest_call(
468
+ token: token,
469
+ rest_call: 'service/version'
234
470
  )
235
471
 
236
472
  JSON.parse(response, symbolize_names: true)
@@ -254,23 +490,86 @@ module PWN
254
490
  token: 'required - Bearer token'
255
491
  )
256
492
 
257
- response = #{self}.get_groups(
493
+ response = #{self}.upload_file(
494
+ token: 'required - Black Duck Binary Analysis API token',
495
+ file: 'required - file to upload'
496
+ )
497
+
498
+ response = #{self}.get_tasks(
258
499
  token: 'required - Bearer token'
259
500
  )
260
501
 
261
- response = #{self}.get_group_details(
502
+ response = #{self}.get_apps_by_group(
262
503
  token: 'required - Bearer token',
263
504
  group_id: 'required - group id'
264
505
  )
265
506
 
266
- response = #{self}.get_apps_by_group(
507
+ response = #{self}.get_groups(
508
+ token: 'required - Bearer token'
509
+ )
510
+
511
+ response = #{self}.create_group(
512
+ token: 'required - Bearer token',
513
+ name: 'required - group name',
514
+ desc: 'optional - group description',
515
+ parent: 'optional - parent group id',
516
+ delete_binary: 'optional - delete binary after analysis C|Y|N (Default: C== company default)',
517
+ binary_cleanup_age: 'optional - after how long the binary will be deleted in seconds (Default: 604_800 / 1 week)',
518
+ product_cleanup_age: 'optional - after how long the product will be deleted in seconds (Default: 604_800 / 1 week)',
519
+ file_download_enabled: 'optional - allow download of uploaded binaries from group (Default: false),
520
+ low_risk_tolerance: 'optional - low risk tolerance nil|true|false (Default: nil == company default)',
521
+ include_historical_vulns: 'optional - include historical vulns nil|true|false (Default: nil == company default)',
522
+ cvss3_fallback: 'optional - cvss3 fallback nil|true|false (Default: nil == company default)',
523
+ assume_unknown_version_as_latest: 'optional - assume unknown version as latest nil|true|false (Default: nil == company default)',
524
+ custom_data: 'optional - custom data hash (see group metadata for details)',
525
+ scan_infoleak: 'optional - scan infoleak nil|true|false (Default: nil == company default)',
526
+ code_analysis: 'optional - code analysis nil|true|false (Default: nil == company default)',
527
+ scan_code_similarity: 'optional - scan code similarity nil|true|false (Default: nil == company default)'
528
+ )
529
+
530
+ response = #{self}.get_group_details(
267
531
  token: 'required - Bearer token',
268
532
  group_id: 'required - group id'
269
533
  )
270
534
 
271
- response = #{self}.upload_file(
272
- token: 'required - Black Duck Binary Analysis API token',
273
- file: 'required - file to upload'
535
+ response = #{self}.get_licenses(
536
+ token: 'required - Bearer token'
537
+ )
538
+
539
+ response = #{self}.get_component_licenses(
540
+ token: 'required - Bearer token'
541
+ )
542
+
543
+ response = #{self}.get_tags(
544
+ token: 'required - Bearer token'
545
+ )
546
+
547
+ response = #{self}.get_vulnerabilities(
548
+ token: 'required - Bearer token'
549
+ )
550
+
551
+ response = #{self}.get_components(
552
+ token: 'required - Bearer token'
553
+ )
554
+
555
+ response = #{self}.get_vendor_vulns(
556
+ token: 'required - Bearer token'
557
+ )
558
+
559
+ response = #{self}.get_audit_trail(
560
+ token: 'required - Bearer token'
561
+ )
562
+
563
+ response = #{self}.get_status(
564
+ token: 'required - Bearer token'
565
+ )
566
+
567
+ response = #{self}.get_service_info(
568
+ token: 'required - Bearer token'
569
+ )
570
+
571
+ response = #{self}.get_service_version(
572
+ token: 'required - Bearer token'
274
573
  )
275
574
 
276
575
  #{self}.authors
@@ -42,21 +42,9 @@ module PWN
42
42
  spinner.auto_spin
43
43
 
44
44
  case http_method
45
- when :delete
45
+ when :delete, :get
46
46
  response = rest_client.execute(
47
- method: :delete,
48
- url: "#{base_open_ai_api_uri}/#{rest_call}",
49
- headers: {
50
- content_type: content_type,
51
- authorization: "Bearer #{token}",
52
- params: params
53
- },
54
- verify_ssl: false
55
- )
56
-
57
- when :get
58
- response = rest_client.execute(
59
- method: :get,
47
+ method: http2_method,
60
48
  url: "#{base_open_ai_api_uri}/#{rest_call}",
61
49
  headers: {
62
50
  content_type: content_type,
@@ -69,7 +57,7 @@ module PWN
69
57
  when :post
70
58
  if http_body.key?(:multipart)
71
59
  response = rest_client.execute(
72
- method: :post,
60
+ method: http_method,
73
61
  url: "#{base_open_ai_api_uri}/#{rest_call}",
74
62
  headers: {
75
63
  authorization: "Bearer #{token}"
@@ -79,7 +67,7 @@ module PWN
79
67
  )
80
68
  else
81
69
  response = rest_client.execute(
82
- method: :post,
70
+ method: http_method,
83
71
  url: "#{base_open_ai_api_uri}/#{rest_call}",
84
72
  headers: {
85
73
  content_type: content_type,
data/lib/pwn/version.rb CHANGED
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module PWN
4
- VERSION = '0.4.729'
4
+ VERSION = '0.4.730'
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pwn
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.729
4
+ version: 0.4.730
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-06-14 00:00:00.000000000 Z
11
+ date: 2023-06-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport