pwn 0.5.171 → 0.5.172

Sign up to get free protection for your applications and to get access to all the features.
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