pwn 0.5.171 → 0.5.172

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: a0ba45977e6b882046ff2e106aac51f68b2a3b02ca5a7b1f456ca4dba60c700f
4
- data.tar.gz: d2403e95658aa3a25042090535b37078a8d73e9d856c58328b57607627009c53
3
+ metadata.gz: 7a28028e7963e92af030938974180fd92e06a97a26356b503605587d62d5c70b
4
+ data.tar.gz: e6d967fd284c4bde42b12430d247033814e1c3d3cc6a160cf66bee3b902991ff
5
5
  SHA512:
6
- metadata.gz: 1f431eeb61b4fa7e462b800c8a540ecf7aeec0b1174773953d0125477d7fe402da5f4a4ec0166f338fe0678ed04e6e0d12351522c5b8fe31fb4a7ecbf49018cd
7
- data.tar.gz: ce1bff0fae0ad0aa18d2a3f4a5df1d085c248301a5a1fb661818197f175dc42575f87fef6c4dead341c94039002d0f4ec71fac9021c4198c81bc610b4c828e3a
6
+ metadata.gz: 68abce7493b7babaa9f2265da24497f9a3d521d1d608098426db9b9288104c4aa2def7c1a35be2ff3a58d46fa2e0e36b0638d5c323f796b51a77c53d81947009
7
+ data.tar.gz: 0db2a7cb852145907eec23779ded6cdaeb9286a9bdbf0847b81b02dde64536c2cf119ae5a8b7da13958d0bd85a53afe0672962f5fc19d2b9dd0fcc67757ab108
data/.rubocop_todo.yml CHANGED
@@ -1,6 +1,6 @@
1
1
  # This configuration was generated by
2
2
  # `rubocop --auto-gen-config`
3
- # on 2024-06-17 17:41:04 UTC using RuboCop version 1.64.1.
3
+ # on 2024-06-20 17:51:21 UTC using RuboCop version 1.64.1.
4
4
  # The point is for the user to remove these configuration records
5
5
  # one by one as the offenses are removed from the code base.
6
6
  # Note that changes in the inspected code, or installation of new
@@ -41,7 +41,7 @@ Lint/NestedMethodDefinition:
41
41
  Exclude:
42
42
  - 'lib/pwn/plugins/repl.rb'
43
43
 
44
- # Offense count: 307
44
+ # Offense count: 311
45
45
  # This cop supports unsafe autocorrection (--autocorrect-all).
46
46
  # Configuration parameters: AutoCorrect.
47
47
  Lint/UselessAssignment:
@@ -81,7 +81,7 @@ Metrics/MethodLength:
81
81
  Exclude:
82
82
  - 'lib/pwn/banner/code_cave.rb'
83
83
 
84
- # Offense count: 9
84
+ # Offense count: 10
85
85
  # Configuration parameters: CountComments, Max, CountAsOne.
86
86
  Metrics/ModuleLength:
87
87
  Exclude:
@@ -94,6 +94,7 @@ Metrics/ModuleLength:
94
94
  - 'lib/pwn/plugins/open_ai.rb'
95
95
  - 'lib/pwn/plugins/packet.rb'
96
96
  - 'lib/pwn/plugins/repl.rb'
97
+ - 'lib/pwn/plugins/transparent_browser.rb'
97
98
 
98
99
  # Offense count: 1
99
100
  # This cop supports safe autocorrection (--autocorrect).
data/Gemfile CHANGED
@@ -20,7 +20,7 @@ gem 'barby', '0.6.9'
20
20
  gem 'base32', '0.3.4'
21
21
  gem 'brakeman', '6.1.2'
22
22
  gem 'bson', '5.0.0'
23
- gem 'bundler', '>=2.5.13'
23
+ gem 'bundler', '>=2.5.14'
24
24
  gem 'bundler-audit', '0.9.1'
25
25
  gem 'bunny', '2.22.0'
26
26
  gem 'colorize', '1.1.0'
@@ -43,7 +43,7 @@ gem 'jenkins_api_client2', '1.9.0'
43
43
  gem 'js-beautify', '0.1.8'
44
44
  gem 'json', '2.7.2'
45
45
  gem 'jsonpath', '1.1.5'
46
- gem 'jwt', '2.8.1'
46
+ gem 'jwt', '2.8.2'
47
47
  gem 'libusb', '0.7.1'
48
48
  gem 'luhn', '1.0.2'
49
49
  gem 'mail', '2.8.1'
@@ -85,7 +85,7 @@ gem 'ruby-nmap', '1.0.3'
85
85
  gem 'ruby-saml', '1.16.0'
86
86
  gem 'rvm', '1.11.3.9'
87
87
  gem 'savon', '2.15.0'
88
- gem 'selenium-devtools', '0.125.0'
88
+ gem 'selenium-devtools', '0.126.0'
89
89
  gem 'serialport', '1.3.2'
90
90
  # gem 'sinatra', '4.0.0'
91
91
  gem 'slack-ruby-client', '2.3.0'
data/README.md CHANGED
@@ -37,7 +37,7 @@ $ cd /opt/pwn
37
37
  $ ./install.sh
38
38
  $ ./install.sh ruby-gem
39
39
  $ pwn
40
- pwn[v0.5.171]:001 >>> PWN.help
40
+ pwn[v0.5.172]: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.3.3@pwn
52
52
  $ gem uninstall --all --executables pwn
53
53
  $ gem install --verbose pwn
54
54
  $ pwn
55
- pwn[v0.5.171]:001 >>> PWN.help
55
+ pwn[v0.5.172]:001 >>> PWN.help
56
56
  ```
57
57
 
58
58
  If you're using a multi-user install of RVM do:
@@ -62,7 +62,7 @@ $ rvm use ruby-3.3.3@pwn
62
62
  $ rvmsudo gem uninstall --all --executables pwn
63
63
  $ rvmsudo gem install --verbose pwn
64
64
  $ pwn
65
- pwn[v0.5.171]:001 >>> PWN.help
65
+ pwn[v0.5.172]:001 >>> PWN.help
66
66
  ```
67
67
 
68
68
  PWN periodically upgrades to the latest version of Ruby which is reflected in `/opt/pwn/.ruby-version`. The easiest way to upgrade to the latest version of Ruby from a previous PWN installation is to run the following script:
@@ -2,11 +2,13 @@
2
2
 
3
3
  require 'em/pure_ruby'
4
4
  require 'faye/websocket'
5
+ require 'openssl'
5
6
  require 'rest-client'
7
+ require 'securerandom'
6
8
  require 'selenium/webdriver'
7
9
  require 'selenium/devtools'
8
10
  require 'socksify'
9
- require 'openssl'
11
+ require 'timeout'
10
12
  require 'watir'
11
13
 
12
14
  module PWN
@@ -20,6 +22,21 @@ module PWN
20
22
  module TransparentBrowser
21
23
  @@logger = PWN::Plugins::PWNLogger.create
22
24
 
25
+ # Supported Method Parameters::
26
+ # verify_devtools_browser(
27
+ # browser_obj: 'required - browser_obj returned from #open method',
28
+ # supported: 'optional - array of supported browser types (defaults to [:chrome, :headless_chrome, :firefox, :headless_firefox])'
29
+ # )
30
+ private_class_method def self.verify_devtools_browser(opts = {})
31
+ browser_obj = opts[:browser_obj]
32
+ supported = opts[:supported] ||= %i[chrome headless_chrome firefox headless_firefox]
33
+
34
+ browser_type = browser_obj[:type]
35
+ raise "ERROR: browser_type must be #{supported}" unless supported.include?(browser_type)
36
+ rescue StandardError => e
37
+ raise e
38
+ end
39
+
23
40
  # Supported Method Parameters::
24
41
  # browser_obj1 = PWN::Plugins::TransparentBrowser.open(
25
42
  # browser_type: 'optional - :firefox|:chrome|:headless|:rest|:websocket (defaults to :chrome)',
@@ -261,41 +278,30 @@ module PWN
261
278
  return nil
262
279
  end
263
280
 
264
- browser_obj[:devtools] = browser_obj[:browser].driver.devtools if with_devtools && (browser_obj[:type] == :chrome || browser_obj[:type] == :headless_chrome || browser_obj[:type] == :firefox || browser_obj[:type] == :headless_firefox)
265
-
266
- browser_obj
267
- rescue StandardError => e
268
- raise e
269
- end
270
-
271
- # Supported Method Parameters::
272
- # console_resp = PWN::Plugins::TransparentBrowser.devtools_console(
273
- # browser_obj: browser_obj1,
274
- # js: 'required - JavaScript expression to evaluate'
275
- # )
276
-
277
- public_class_method def self.devtools_console(opts = {})
278
- browser_obj = opts[:browser_obj]
279
281
  browser_type = browser_obj[:type]
282
+ supported = %i[chrome headless_chrome firefox headless_firefox]
283
+ if with_devtools && supported.include?(browser_type)
284
+ browser_obj[:browser].goto('about:blank')
285
+ rand_tab = SecureRandom.hex(8)
286
+ browser_obj[:browser].execute_script("document.title = '#{rand_tab}'")
287
+
288
+ browser_obj[:devtools] = browser_obj[:browser].driver.devtools
289
+
290
+ # browser_obj[:devtools].send_cmd('DOM.enable')
291
+ # browser_obj[:devtools].send_cmd('Log.enable')
292
+ # browser_obj[:devtools].send_cmd('Network.enable')
293
+ # browser_obj[:devtools].send_cmd('Page.enable')
294
+ # browser_obj[:devtools].send_cmd('Runtime.enable')
295
+ # browser_obj[:devtools].send_cmd('Security.enable')
296
+
297
+ # if browser_type == :chrome || browser_type == :headless_chrome
298
+ # browser_obj[:devtools].send_cmd('Debugger.enable')
299
+ # browser_obj[:devtools].send_cmd('DOMStorage.enable')
300
+ # browser_obj[:devtools].send_cmd('DOMSnapshot.enable')
301
+ # end
302
+ end
280
303
 
281
- valid_browser_types = %i[chrome headless_chrome firefox headless_firefox]
282
- raise 'ERROR: browser_type must be :chrome, :headless_chrome, :firefox, or :headless_firefox' unless valid_browser_types.include?(browser_type)
283
-
284
- js = opts[:js] ||= "alert('ACK from => #{self}')"
285
-
286
- devtools = browser_obj[:devtools]
287
- devtools.send_cmd('Runtime.enable')
288
- devtools.send_cmd('Console.enable')
289
- devtools.send_cmd('DOM.enable')
290
- devtools.send_cmd('Page.enable')
291
- devtools.send_cmd('Log.enable')
292
- devtools.send_cmd('Debugger.enable')
293
-
294
- js_exp = {
295
- expression: js
296
- }
297
-
298
- devtools.send_cmd('Runtime.evaluate', **js_exp)
304
+ browser_obj
299
305
  rescue StandardError => e
300
306
  raise e
301
307
  end
@@ -388,6 +394,218 @@ module PWN
388
394
  raise e
389
395
  end
390
396
 
397
+ # Supported Method Parameters::
398
+ # console_resp = PWN::Plugins::TransparentBrowser.console(
399
+ # browser_obj: browser_obj1,
400
+ # js: 'required - JavaScript expression to evaluate'
401
+ # )
402
+
403
+ public_class_method def self.console(opts = {})
404
+ browser_obj = opts[:browser_obj]
405
+ verify_devtools_browser(browser_obj: browser_obj)
406
+
407
+ js = opts[:js] ||= "alert('ACK from => #{self}')"
408
+
409
+ browser = browser_obj[:browser]
410
+ case js
411
+ when 'debugger', 'debugger;', 'debugger()', 'debugger();'
412
+ Timeout.timeout(1) { console_resp = browser.execute_script('debugger') }
413
+ when 'clear', 'clear;', 'clear()', 'clear();'
414
+ console_resp = browser.execute_script('console.clear()')
415
+ else
416
+ console_resp = browser.execute_script("console.log(#{js})")
417
+ end
418
+
419
+ console_resp
420
+ rescue Timeout::Error, Timeout::ExitException
421
+ console_resp
422
+ rescue StandardError => e
423
+ raise e
424
+ end
425
+
426
+ # Supported Method Parameters::
427
+ # tabs = PWN::Plugins::TransparentBrowser.list_tabs(
428
+ # browser_obj: 'required - browser_obj returned from #open method)'
429
+ # )
430
+
431
+ public_class_method def self.list_tabs(opts = {})
432
+ browser_obj = opts[:browser_obj]
433
+ verify_devtools_browser(browser_obj: browser_obj)
434
+
435
+ browser = browser_obj[:browser]
436
+ browser.windows.map do |tab|
437
+ active = false
438
+ active = true if browser.title == tab.title && browser.url == tab.url
439
+ { title: tab.title, url: tab.url, active: active }
440
+ end
441
+ rescue StandardError => e
442
+ raise e
443
+ end
444
+
445
+ # Supported Method Parameters::
446
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.switch_tab(
447
+ # browser_obj: 'required - browser_obj returned from #open method)',
448
+ # keyword: 'required - keyword in title or url used to switch tabs'
449
+ # )
450
+
451
+ public_class_method def self.switch_tab(opts = {})
452
+ browser_obj = opts[:browser_obj]
453
+ verify_devtools_browser(browser_obj: browser_obj)
454
+
455
+ keyword = opts[:keyword]
456
+ raise 'ERROR: keyword parameter is required' if keyword.nil?
457
+
458
+ browser = browser_obj[:browser]
459
+ all_tabs = browser.windows
460
+ all_tabs.select { |tab| tab.use if tab.title.include?(keyword) || tab.url.include?(keyword) }
461
+ rescue StandardError => e
462
+ raise e
463
+ end
464
+
465
+ # Supported Method Parameters::
466
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.new_tab(
467
+ # browser_obj: 'required - browser_obj returned from #open method)',
468
+ # url: 'optional - URL to navigate to after opening new tab (Defaults to nil)'
469
+ # )
470
+
471
+ public_class_method def self.new_tab(opts = {})
472
+ browser_obj = opts[:browser_obj]
473
+ verify_devtools_browser(browser_obj: browser_obj)
474
+
475
+ url = opts[:url]
476
+
477
+ browser = browser_obj[:browser]
478
+ browser.execute_script('window.open()')
479
+ switch_tab(browser_obj: browser_obj, keyword: 'about:blank')
480
+ rand_tab = SecureRandom.hex(8)
481
+ browser.execute_script("document.title = '#{rand_tab}'")
482
+ browser.goto(url) unless url.nil?
483
+ rescue StandardError => e
484
+ raise e
485
+ end
486
+
487
+ # Supported Method Parameters::
488
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.close_tab(
489
+ # browser_obj: 'required - browser_obj returned from #open method)'
490
+ # keyword: 'required - keyword in title or url used to close tabs'
491
+ # )
492
+
493
+ public_class_method def self.close_tab(opts = {})
494
+ browser_obj = opts[:browser_obj]
495
+ verify_devtools_browser(browser_obj: browser_obj)
496
+
497
+ keyword = opts[:keyword]
498
+ raise 'ERROR: keyword parameter is required' if keyword.nil?
499
+
500
+ browser = browser_obj[:browser]
501
+ all_tabs = browser.windows
502
+ all_tabs.select { |tab| tab.close if tab.title.include?(keyword) || tab.url.include?(keyword) }
503
+ rescue StandardError => e
504
+ raise e
505
+ end
506
+
507
+ # Supported Method Parameters::
508
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.debugger(
509
+ # browser_obj: 'required - browser_obj returned from #open method)',
510
+ # action: 'optional - action to take :pause|:resume (Defaults to :pause)',
511
+ # url: 'optional - URL to navigate to after pausing debugger (Defaults to nil)'
512
+ # )
513
+
514
+ public_class_method def self.debugger(opts = {})
515
+ browser_obj = opts[:browser_obj]
516
+ supported = %i[chrome headless_chrome]
517
+ verify_devtools_browser(browser_obj: browser_obj, supported: supported)
518
+ browser = browser_obj[:browser]
519
+ action = opts[:action] ||= :pause
520
+ url = opts[:url]
521
+
522
+ devtools = browser_obj[:devtools]
523
+
524
+ case action.to_s.downcase.to_sym
525
+ when :pause
526
+ console('browser_obj': browser_obj, js: 'debugger')
527
+
528
+ # devtools.send_cmd('Debugger.enable')
529
+ # devtools.send_cmd(
530
+ # 'Debugger.setInstrumentationBreakpoint',
531
+ # instrumentation: 'beforeScriptExecution'
532
+ # )
533
+
534
+ # devtools.send_cmd(
535
+ # 'EventBreakpoints.setInstrumentationBreakpoint',
536
+ # eventName: 'load'
537
+ # )
538
+
539
+ # devtools.send_cmd(
540
+ # 'Debugger.setPauseOnExceptions',
541
+ # state: 'all'
542
+ # )
543
+
544
+ begin
545
+ Timeout.timeout(1) do
546
+ browser.refresh if url.nil?
547
+ browser.goto(url) unless url.nil?
548
+ end
549
+ rescue Timeout::Error
550
+ url
551
+ end
552
+ when :resume
553
+ devtools.send_cmd('Debugger.resume')
554
+ else
555
+ raise 'ERROR: action parameter must be :pause or :resume'
556
+ end
557
+ rescue StandardError => e
558
+ raise e
559
+ end
560
+
561
+ # Supported Method Parameters::
562
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.step_into(
563
+ # browser_obj: 'required - browser_obj returned from #open method)'
564
+ # )
565
+
566
+ public_class_method def self.step_into(opts = {})
567
+ browser_obj = opts[:browser_obj]
568
+ supported = %i[chrome headless_chrome]
569
+ verify_devtools_browser(browser_obj: browser_obj, supported: supported)
570
+
571
+ devtools = browser_obj[:devtools]
572
+ devtools.send_cmd('Debugger.stepInto')
573
+ rescue StandardError => e
574
+ raise e
575
+ end
576
+
577
+ # Supported Method Parameters::
578
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.step_out(
579
+ # browser_obj: 'required - browser_obj returned from #open method)'
580
+ # )
581
+
582
+ public_class_method def self.step_out(opts = {})
583
+ browser_obj = opts[:browser_obj]
584
+ supported = %i[chrome headless_chrome]
585
+ verify_devtools_browser(browser_obj: browser_obj, supported: supported)
586
+
587
+ devtools = browser_obj[:devtools]
588
+ devtools.send_cmd('Debugger.stepOut')
589
+ rescue StandardError => e
590
+ raise e
591
+ end
592
+
593
+ # Supported Method Parameters::
594
+ # browser_obj1 = PWN::Plugins::TransparentBrowser.step_over(
595
+ # browser_obj: 'required - browser_obj returned from #open method)'
596
+ # )
597
+
598
+ public_class_method def self.step_over(opts = {})
599
+ browser_obj = opts[:browser_obj]
600
+ supported = %i[chrome headless_chrome]
601
+ verify_devtools_browser(browser_obj: browser_obj, supported: supported)
602
+
603
+ devtools = browser_obj[:devtools]
604
+ devtools.send_cmd('Debugger.stepOver')
605
+ rescue StandardError => e
606
+ raise e
607
+ end
608
+
391
609
  # Supported Method Parameters::
392
610
  # browser_obj1 = PWN::Plugins::TransparentBrowser.close(
393
611
  # browser_obj: 'required - browser_obj returned from #open method)'
@@ -513,11 +731,6 @@ module PWN
513
731
  * End of DevTools Examples
514
732
  ********************************************************
515
733
 
516
- console_resp = #{self}.devtools_console(
517
- browser_obj: 'required - browser_obj returned from #open method)',
518
- js: 'required - JavaScript expression to evaluate'
519
- )
520
-
521
734
  browser_obj1 = #{self}.dump_links(
522
735
  browser_obj: 'required - browser_obj returned from #open method)'
523
736
  )
@@ -532,6 +745,47 @@ module PWN
532
745
  rand_sleep_float: 'optional - float timing in between keypress (defaults to 0.09)'
533
746
  ) {|char| browser_obj1.text_field(name: \"search\").send_keys(char) }
534
747
 
748
+ console_resp = #{self}.console(
749
+ browser_obj: 'required - browser_obj returned from #open method)',
750
+ js: 'required - JavaScript expression to evaluate'
751
+ )
752
+
753
+ tabs = #{self}.list_tabs(
754
+ browser_obj: 'required - browser_obj returned from #open method)'
755
+ )
756
+
757
+ browser_obj1 = #{self}.switch_tab(
758
+ browser_obj: 'required - browser_obj returned from #open method)',
759
+ keyword: 'required - keyword in title or url used to switch tabs'
760
+ )
761
+
762
+ browser_obj1 = #{self}.new_tab(
763
+ browser_obj: 'required - browser_obj returned from #open method)'
764
+ )
765
+
766
+ browser_obj1 = #{self}.close_tab(
767
+ browser_obj: 'required - browser_obj returned from #open method)',
768
+ keyword: 'required - keyword in title or url used to close tabs'
769
+ )
770
+
771
+ browser_obj1 = #{self}.debugger(
772
+ browser_obj: 'required - browser_obj returned from #open method)',
773
+ action: 'optional - action to take :pause|:resume (Defaults to :pause)',
774
+ url: 'optional - URL to navigate to after pausing debugger (Defaults to nil)'
775
+ )
776
+
777
+ browser_obj1 = #{self}.step_into(
778
+ browser_obj: 'required - browser_obj returned from #open method)'
779
+ )
780
+
781
+ browser_obj1 = #{self}.step_out(
782
+ browser_obj: 'required - browser_obj returned from #open method)'
783
+ )
784
+
785
+ browser_obj1 = #{self}.step_over(
786
+ browser_obj: 'required - browser_obj returned from #open method)'
787
+ )
788
+
535
789
  browser_obj1 = #{self}.close(
536
790
  browser_obj: 'required - browser_obj returned from #open method)'
537
791
  )
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.5.171'
4
+ VERSION = '0.5.172'
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.5.171
4
+ version: 0.5.172
5
5
  platform: ruby
6
6
  authors:
7
7
  - 0day Inc.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2024-06-17 00:00:00.000000000 Z
11
+ date: 2024-06-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: activesupport
@@ -128,14 +128,14 @@ dependencies:
128
128
  requirements:
129
129
  - - ">="
130
130
  - !ruby/object:Gem::Version
131
- version: 2.5.13
131
+ version: 2.5.14
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - ">="
137
137
  - !ruby/object:Gem::Version
138
- version: 2.5.13
138
+ version: 2.5.14
139
139
  - !ruby/object:Gem::Dependency
140
140
  name: bundler-audit
141
141
  requirement: !ruby/object:Gem::Requirement
@@ -436,14 +436,14 @@ dependencies:
436
436
  requirements:
437
437
  - - '='
438
438
  - !ruby/object:Gem::Version
439
- version: 2.8.1
439
+ version: 2.8.2
440
440
  type: :runtime
441
441
  prerelease: false
442
442
  version_requirements: !ruby/object:Gem::Requirement
443
443
  requirements:
444
444
  - - '='
445
445
  - !ruby/object:Gem::Version
446
- version: 2.8.1
446
+ version: 2.8.2
447
447
  - !ruby/object:Gem::Dependency
448
448
  name: libusb
449
449
  requirement: !ruby/object:Gem::Requirement
@@ -1024,14 +1024,14 @@ dependencies:
1024
1024
  requirements:
1025
1025
  - - '='
1026
1026
  - !ruby/object:Gem::Version
1027
- version: 0.125.0
1027
+ version: 0.126.0
1028
1028
  type: :runtime
1029
1029
  prerelease: false
1030
1030
  version_requirements: !ruby/object:Gem::Requirement
1031
1031
  requirements:
1032
1032
  - - '='
1033
1033
  - !ruby/object:Gem::Version
1034
- version: 0.125.0
1034
+ version: 0.126.0
1035
1035
  - !ruby/object:Gem::Dependency
1036
1036
  name: serialport
1037
1037
  requirement: !ruby/object:Gem::Requirement
@@ -2320,7 +2320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
2320
2320
  - !ruby/object:Gem::Version
2321
2321
  version: '0'
2322
2322
  requirements: []
2323
- rubygems_version: 3.5.13
2323
+ rubygems_version: 3.5.14
2324
2324
  signing_key:
2325
2325
  specification_version: 4
2326
2326
  summary: Automated Security Testing for CI/CD Pipelines & Beyond