pwn 0.5.543 → 0.5.546
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 +4 -4
- data/Gemfile +0 -1
- data/README.md +3 -3
- data/Rakefile +1 -1
- data/lib/pwn/ai/agent/vuln_gen.rb +61 -0
- data/lib/pwn/ai/agent.rb +1 -0
- data/lib/pwn/version.rb +1 -1
- data/spec/lib/pwn/ai/agent/vuln_gen_spec.rb +20 -0
- data/spec/lib/pwn/ai/agent_spec.rb +1 -1
- data/third_party/pwn_rdoc.jsonl +23 -1
- metadata +3 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 34ca1351b29912cd044d8e4292edf889671ff7d85c3a9182a490d01d76b2f090
|
|
4
|
+
data.tar.gz: 2c3b2a78840db9a71157bfb3b12989f265c704c5974b7743351981e5a4d51dad
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: a7d5fb3fa68334caa81ba313e923e6f3acdade24ad4261d30a02bab95b753d8def34ebb4624b6243181d7aa3e7a1140f6ec7d619ef7a4506f56f03cddedad630
|
|
7
|
+
data.tar.gz: fb111ab08c77c8b1c60a62d834b8df6275a825542163361a9f9b04acbaab817426075d24913bc2cde8828bd41266af20ee598973ab69e75a71cd4d5ecf7f0efa
|
data/Gemfile
CHANGED
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.
|
|
40
|
+
pwn[v0.5.546]:001 >>> PWN.help
|
|
41
41
|
```
|
|
42
42
|
|
|
43
43
|
[](https://youtu.be/G7iLUY4FzsI)
|
|
@@ -52,7 +52,7 @@ $ rvm use ruby-4.0.1@pwn
|
|
|
52
52
|
$ gem uninstall --all --executables pwn
|
|
53
53
|
$ gem install --verbose pwn
|
|
54
54
|
$ pwn
|
|
55
|
-
pwn[v0.5.
|
|
55
|
+
pwn[v0.5.546]: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-4.0.1@pwn
|
|
|
62
62
|
$ rvmsudo gem uninstall --all --executables pwn
|
|
63
63
|
$ rvmsudo gem install --verbose pwn
|
|
64
64
|
$ pwn
|
|
65
|
-
pwn[v0.5.
|
|
65
|
+
pwn[v0.5.546]: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:
|
data/Rakefile
CHANGED
|
@@ -0,0 +1,61 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
module PWN
|
|
4
|
+
module AI
|
|
5
|
+
module Agent
|
|
6
|
+
# This module is an AI agent designed to analyze generic vulnerability descriptions and generate detailed security findings, including business impact, remediation recommendations, CVSS scoring, CWE categorization, and relevant NIST 800-53 controls. It leverages the PWN::AI::Introspection.reflect_on method to process the input request and produce comprehensive markdown-formatted findings.
|
|
7
|
+
module VulnGen
|
|
8
|
+
# Supported Method Parameters::
|
|
9
|
+
# ai_analysis = PWN::AI::Agent::VulnGen.analyze(
|
|
10
|
+
# request: 'required - high level description of vulnerability discovered (e.g. "Discovered a SQLi vulnerability in /login"'
|
|
11
|
+
# )
|
|
12
|
+
|
|
13
|
+
public_class_method def self.analyze(opts = {})
|
|
14
|
+
request = opts[:request]
|
|
15
|
+
raise 'ERROR: request parameter is required' if request.nil? || request.empty?
|
|
16
|
+
|
|
17
|
+
system_role_content = '
|
|
18
|
+
_ALWAYS_ Generate markdown security findings for the message provided with the following content:
|
|
19
|
+
|
|
20
|
+
1. Detailed Finding Description: This should be a deep, detailed technical description that should include exploit proof-of-concepts when possible.
|
|
21
|
+
|
|
22
|
+
2. Business Impact: This should describe, in business terms, the importance of fixing the issue. Reputational and/or financial impact should be considered for this section.
|
|
23
|
+
|
|
24
|
+
3. Remediation Recommendations: Targeted towards technical engineers that can ascertain a reasonable approach to fix the vulnerability based upon common security remediation patterns. Be sure to consider compensating controls / stop gaps that can be implemented (e.g. WAF, additional logging, etc.) until such time the vulnerability can be fixed. Provide examples in cases where code fixes may be required.
|
|
25
|
+
|
|
26
|
+
4. CVSS Score (Severity), Base CVSS Vector string as /AV:`N|L|A|P`/AC:`L|H`/PR:`N|L|H`/UI:`N|R`/S:`U|C`/C:`N|L|H`/I:`N|L|H`/A:`N|L|H`, and first.org CVSS calculator URI as https://www.first.org/cvss/calculator/3-1#CVSS:3.1/AV:`N|L|A|P`/AC:`L|H`/PR:`N|L|H`/UI:`N|R`/S:`U|C`/C:`N|L|H`/I:`N|L|H`/A:`N|L|H`. The Vector string must be formatted like: `/AV:%s/AC:%s/PR:%s/UI:%s/S:%s/C:%s/I:%s/A:%s`. Ensure the score and severity aligns with the vector string calculation.
|
|
27
|
+
|
|
28
|
+
5. CWE Category, Brief CWE description, and CWE URI
|
|
29
|
+
|
|
30
|
+
6. NIST 800-53 Security Control that is impacted by this vulnerability.
|
|
31
|
+
'
|
|
32
|
+
|
|
33
|
+
PWN::AI::Introspection.reflect_on(
|
|
34
|
+
system_role_content: system_role_content,
|
|
35
|
+
request: request,
|
|
36
|
+
suppress_pii_warning: true
|
|
37
|
+
)
|
|
38
|
+
rescue StandardError => e
|
|
39
|
+
raise e.backtrace
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# Author(s):: 0day Inc. <support@0dayinc.com>
|
|
43
|
+
|
|
44
|
+
public_class_method def self.authors
|
|
45
|
+
"AUTHOR(S):
|
|
46
|
+
0day Inc. <support@0dayinc.com>
|
|
47
|
+
"
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# Display Usage for this Module
|
|
51
|
+
|
|
52
|
+
public_class_method def self.help
|
|
53
|
+
puts "USAGE:
|
|
54
|
+
|
|
55
|
+
#{self}.authors
|
|
56
|
+
"
|
|
57
|
+
end
|
|
58
|
+
end
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
end
|
data/lib/pwn/ai/agent.rb
CHANGED
data/lib/pwn/version.rb
CHANGED
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# frozen_string_literal: true
|
|
2
|
+
|
|
3
|
+
require 'spec_helper'
|
|
4
|
+
|
|
5
|
+
describe PWN::AI::Agent::VulnGen do
|
|
6
|
+
it 'analyze method should exist' do
|
|
7
|
+
analyze_response = PWN::AI::Agent::VulnGen
|
|
8
|
+
expect(analyze_response).to respond_to :analyze
|
|
9
|
+
end
|
|
10
|
+
|
|
11
|
+
it 'should display information for authors' do
|
|
12
|
+
authors_response = PWN::AI::Agent::VulnGen
|
|
13
|
+
expect(authors_response).to respond_to :authors
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
it 'should display information for existing help method' do
|
|
17
|
+
help_response = PWN::AI::Agent::VulnGen
|
|
18
|
+
expect(help_response).to respond_to :help
|
|
19
|
+
end
|
|
20
|
+
end
|
data/third_party/pwn_rdoc.jsonl
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
{"messages":[{"role":"user","content":"PWN.help Usage"},{"role":"assistant","content":"`PWN.help`: "}]}
|
|
2
2
|
{"messages":[{"role":"user","content":"PWN::AI.help Usage"},{"role":"assistant","content":"`PWN::AI.help`: "}]}
|
|
3
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent.help`: "}]}
|
|
4
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Assembly.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Assembly.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::Assembly.analyze(\n\nrequest: 'required - the assembly opcodes or instructions to be analyzed',\ntype: 'required - :opcodes_to_asm|:asm_to_opcodes - specify the type of analysis to perform',\narch: 'required - name of arch returned from `PWN::Plugins::Assembly.list_supported_archs` (e.g., :i386|:i686|:x86|:x64|:arm|:arm64, etc.)',\nendian: 'required - the endianness of the assembly code (e.g., :little|:big)'\n\n)\n"}]}
|
|
5
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Assembly.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Assembly.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
6
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::Assembly.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::Assembly.help`: "}]}
|
|
7
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BTC.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BTC.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::BTC.analyze(\n\nrequest: 'required - latest block information retrieved from a bitcoin node via `PWN::Blockchain::BTC.get_latest_block`'\n\n)\n"}]}
|
|
8
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BTC.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BTC.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
9
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BTC.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BTC.help`: "}]}
|
|
10
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BurpSuite.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BurpSuite.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::BurpSuite.analyze(\n\nrequest: 'required HTTP request/response pair or WebSocket message as a string'\n\n)\n"}]}
|
|
11
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BurpSuite.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BurpSuite.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
12
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::BurpSuite.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::BurpSuite.help`: "}]}
|
|
13
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::GQRX.analyze(\n\nrequest: 'required - A string containing the signal data captured by GQRX that you want to analyze. This data should be in a format that can be interpreted by the AI for analysis, such as raw signal data, frequency information, or any relevant metadata associated with the capture.',\nlocation: 'required - A string containing a city, state, country, or GPS coordinates where the signal data was captured. This information will be used to provide context for the analysis and to determine if the frequency is licensed or unlicensed based on FCC records.'\n\n)\n"}]}
|
|
14
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
15
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::GQRX.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::GQRX.help`: "}]}
|
|
16
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::HackerOne.analyze(\n\nrequest: 'required - dataset to analyze, such as bounty program details, scope details, or hacktivity details'\ntype: 'required - type of analysis to perform, such as :bounty_programs, :scope_details, or :hacktivity'\n\n)\n"}]}
|
|
17
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
18
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::HackerOne.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::HackerOne.help`: "}]}
|
|
19
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::SAST.analyze(\n\nrequest: 'required - A string containing the source code snippet to be analyzed for SAST antipatterns and vulnerabilities.'\n\n)\n"}]}
|
|
20
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
21
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::SAST.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::SAST.help`: "}]}
|
|
22
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.analyze Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.analyze`: Supported Method Parameters\n\nai_analysis = PWN::AI::Agent::TransparentBrowser.analyze(\n\nrequest: 'required - current step in the JavaScript debugging session to analyze',\nsource_to_review: 'required - the block of JavaScript code in which the current step resides'\n\n)\n"}]}
|
|
23
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.authors Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
24
|
+
{"messages":[{"role":"user","content":"PWN::AI::Agent::TransparentBrowser.help Usage"},{"role":"assistant","content":"`PWN::AI::Agent::TransparentBrowser.help`: "}]}
|
|
3
25
|
{"messages":[{"role":"user","content":"PWN::AI::Grok.authors Usage"},{"role":"assistant","content":"`PWN::AI::Grok.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
4
26
|
{"messages":[{"role":"user","content":"PWN::AI::Grok.chat Usage"},{"role":"assistant","content":"`PWN::AI::Grok.chat`: Supported Method Parameters\n\nresponse = PWN::AI::Grok.chat(\n\nrequest: 'required - message to Grok'\nmodel: 'optional - model to use for text generation (defaults to PWN::Env[:ai][:grok][:model])',\ntemp: 'optional - creative response float (deafults to PWN::Env[:ai][:grok][:temp])',\nsystem_role_content: 'optional - context to set up the model behavior for conversation (Default: PWN::Env[:ai][:grok][:system_role_content])',\nresponse_history: 'optional - pass response back in to have a conversation',\nspeak_answer: 'optional speak answer using PWN::Plugins::Voice.text_to_speech (Default: nil)',\ntimeout: 'optional timeout in seconds (defaults to 300)',\nspinner: 'optional - display spinner (defaults to false)'\n\n)\n"}]}
|
|
5
27
|
{"messages":[{"role":"user","content":"PWN::AI::Grok.get_models Usage"},{"role":"assistant","content":"`PWN::AI::Grok.get_models`: Supported Method Parameters\n\nmodels = PWN::AI::Grok.get_models\n"}]}
|
|
@@ -1042,7 +1064,7 @@
|
|
|
1042
1064
|
{"messages":[{"role":"user","content":"PWN::Plugins::Vsphere.login Usage"},{"role":"assistant","content":"`PWN::Plugins::Vsphere.login`: Supported Method Parameters\n\nvsphere_obj = PWN::Plugins::Vsphere.login(\n\nhost: 'required - vsphere host or ip',\nusername: 'required - username',\npassword: 'optional - password (will prompt if nil)',\ninsecure: 'optional - ignore ssl checks (defaults to false)\n\n)\n"}]}
|
|
1043
1065
|
{"messages":[{"role":"user","content":"PWN::Plugins::Vsphere.logout Usage"},{"role":"assistant","content":"`PWN::Plugins::Vsphere.logout`: Supported Method Parameters\n\nPWN::Plugins::HackerOne.logout(\n\nvsphere_obj: 'required vsphere_obj returned from #login method'\n\n)\n"}]}
|
|
1044
1066
|
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.authors Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.authors`: Author(s)\n\n0day Inc. <support@0dayinc.com>\n"}]}
|
|
1045
|
-
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.calc_addr_offset Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.calc_addr_offset`: Supported Method Parameters\n\nhex_offset = PWN::Plugins::XXD.calc_addr_offset(\n\nstart_addr: 'required - start address to evaluate',\ntarget_addr: 'required - memory address to set breakpoint'\n\n) ^^^ Instructions for #{self}.calc_addr_offset: This is useful for calculating address offsets of known functions in debuggers to set breakpoints of instructions that are not known at runtime.\n\nSet a breakpoint at main and record its address - this is the start_addr. For example in r2: “‘ [0x00001050]> db main [0x00001050]> ood [0x7fd16122b360]> dc INFO: hit breakpoint at: 0x562e8547d139 [0x562e8547d139]> db “`\n\nPopulate start_addr w/ address (i.e. ‘0x562e8547d139’) of a known function (i.e. main)\n\nStep down to the instruction where you want to set a breakpoint. Record its address… this is the target_addr. “‘ [0x562e8547d139]> v <step through to the target instruction via F7/F8> “`\n\nGet the hex offset value by calling PWN::Plugins::XXD.calc_addr_offset method\n\nFuture breakpoints can be calculated by adding the hex offset to the updated start_addr (which changes every time the binary is executed). If the offset returned is 0x00000ec2
|
|
1067
|
+
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.calc_addr_offset Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.calc_addr_offset`: Supported Method Parameters\n\nhex_offset = PWN::Plugins::XXD.calc_addr_offset(\n\nstart_addr: 'required - start address to evaluate',\ntarget_addr: 'required - memory address to set breakpoint'\n\n) ^^^ Instructions for #{self}.calc_addr_offset: This is useful for calculating address offsets of known functions in debuggers to set breakpoints of instructions that are not known at runtime.\n\nSet a breakpoint at main and record its address - this is the start_addr. For example in r2: “‘ [0x00001050]> db main [0x00001050]> ood [0x7fd16122b360]> dc INFO: hit breakpoint at: 0x562e8547d139 [0x562e8547d139]> db “`\n\nPopulate start_addr w/ address (i.e. ‘0x562e8547d139’) of a known function (i.e. main)\n\nStep down to the instruction where you want to set a breakpoint. Record its address… this is the target_addr. “‘ [0x562e8547d139]> v <step through to the target instruction via F7/F8> “`\n\nGet the hex offset value by calling PWN::Plugins::XXD.calc_addr_offset method\n\nFuture breakpoints can be calculated by adding the hex offset to the updated start_addr (which changes every time the binary is executed). If the offset returned is ‘0x00000ec2`, a breakpoint for the target instruction can be set in r2 via: “` [0x00001050]> ood [0x7f1a45bea360]> db main [0x7f1a45bea360]> db (main)+0x00000ec2 [0x7f1a45bea360]> db 0x558eebd75139 - 0x558eebd7513a 1 –x sw break enabled valid … 0x558eebd75ffb - 0x558eebd75ffc 1 –x sw break enabled valid … [0x7f1a45bea360]> dc INFO: hit breakpoint at: 0x55ee0a0e5139 [0x55ee0a0e5139]> dc INFO: hit breakpoint at: 0x5558c3101ffb [0x5558c3101ffb]> v <step through via F7, F8, F9, etc. to get to desired instruction> “`\n\n"}]}
|
|
1046
1068
|
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.dump Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.dump`: Supported Method Parameters\n\nhexdump = PWN::Plugins::XXD.dump(\n\nfile: 'required - path to binary file to dump',\nhashed: 'optional - return hexdump as hash instead of string (default: false)'\n\n)\n"}]}
|
|
1047
1069
|
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.fill_range_w_byte Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.fill_range_w_byte`: Supported Method Parameters\n\nhexdump = PWN::Plugins::XXD.fill_range_w_byte(\n\nhexdump: 'required - hexdump returned from #dump method',\nstart_addr: 'required - start address to fill with byte',\nend_addr: 'required - end address to fill with byte',\nbyte: 'required - byte to fill range with'\n\n)\n"}]}
|
|
1048
1070
|
{"messages":[{"role":"user","content":"PWN::Plugins::XXD.help Usage"},{"role":"assistant","content":"`PWN::Plugins::XXD.help`: "}]}
|
metadata
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: pwn
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version: 0.5.
|
|
4
|
+
version: 0.5.546
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- 0day Inc.
|
|
@@ -1766,6 +1766,7 @@ files:
|
|
|
1766
1766
|
- lib/pwn/ai/agent/hacker_one.rb
|
|
1767
1767
|
- lib/pwn/ai/agent/sast.rb
|
|
1768
1768
|
- lib/pwn/ai/agent/transparent_browser.rb
|
|
1769
|
+
- lib/pwn/ai/agent/vuln_gen.rb
|
|
1769
1770
|
- lib/pwn/ai/grok.rb
|
|
1770
1771
|
- lib/pwn/ai/introspection.rb
|
|
1771
1772
|
- lib/pwn/ai/ollama.rb
|
|
@@ -2133,6 +2134,7 @@ files:
|
|
|
2133
2134
|
- spec/lib/pwn/ai/agent/hacker_one_spec.rb
|
|
2134
2135
|
- spec/lib/pwn/ai/agent/sast_spec.rb
|
|
2135
2136
|
- spec/lib/pwn/ai/agent/transparent_browser_spec.rb
|
|
2137
|
+
- spec/lib/pwn/ai/agent/vuln_gen_spec.rb
|
|
2136
2138
|
- spec/lib/pwn/ai/agent_spec.rb
|
|
2137
2139
|
- spec/lib/pwn/ai/grok_spec.rb
|
|
2138
2140
|
- spec/lib/pwn/ai/introspection_spec.rb
|