pwn 0.5.779 → 0.5.781

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.
Files changed (112) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +3 -3
  3. data/documentation/AI-Integration.md +4 -4
  4. data/documentation/AWS.md +10 -9
  5. data/documentation/Agent-Tool-Registry.md +20 -17
  6. data/documentation/Blockchain.md +3 -2
  7. data/documentation/Bounty.md +8 -6
  8. data/documentation/BurpSuite.md +6 -10
  9. data/documentation/CLI-Drivers.md +7 -4
  10. data/documentation/Capability-Broker-Sandbox.md +1 -1
  11. data/documentation/Configuration.md +23 -15
  12. data/documentation/Contributing.md +3 -3
  13. data/documentation/Cron.md +3 -2
  14. data/documentation/Diagrams.md +9 -3
  15. data/documentation/Drivers.md +12 -6
  16. data/documentation/Extrospection.md +25 -5
  17. data/documentation/FFI.md +15 -25
  18. data/documentation/Fuzzing.md +13 -13
  19. data/documentation/General-PWN-Usage.md +7 -4
  20. data/documentation/Harness-Evaluation.md +90 -3
  21. data/documentation/Home.md +6 -5
  22. data/documentation/How-PWN-Works.md +9 -10
  23. data/documentation/Installation.md +12 -11
  24. data/documentation/Metasploit.md +13 -19
  25. data/documentation/Mistakes.md +2 -2
  26. data/documentation/NmapIt.md +6 -3
  27. data/documentation/Operability.md +99 -0
  28. data/documentation/Persistence.md +3 -2
  29. data/documentation/Plugin-Degradation.md +4 -2
  30. data/documentation/Plugins.md +4 -11
  31. data/documentation/Policy-Benchmark.md +4 -0
  32. data/documentation/Reinforcement-Learning.md +19 -3
  33. data/documentation/Reporting.md +6 -5
  34. data/documentation/SAST.md +15 -10
  35. data/documentation/SDR-Decoder-Coverage.md +10 -4
  36. data/documentation/SDR.md +28 -40
  37. data/documentation/Session-Workflow.md +25 -12
  38. data/documentation/Sessions.md +7 -0
  39. data/documentation/Skills-Memory-Learning.md +11 -4
  40. data/documentation/Swarm.md +6 -0
  41. data/documentation/Transparent-Browser.md +1 -1
  42. data/documentation/Troubleshooting.md +6 -3
  43. data/documentation/What-is-PWN.md +4 -4
  44. data/documentation/Why-PWN.md +1 -1
  45. data/documentation/diagrams/agent-tool-registry.svg +219 -180
  46. data/documentation/diagrams/ai-integration-tool-calling.svg +35 -34
  47. data/documentation/diagrams/code-scanning-sast.svg +78 -78
  48. data/documentation/diagrams/cron-scheduling.svg +165 -145
  49. data/documentation/diagrams/dot/_THEME.md +6 -4
  50. data/documentation/diagrams/dot/agent-tool-registry.dot +6 -2
  51. data/documentation/diagrams/dot/ai-integration-tool-calling.dot +1 -1
  52. data/documentation/diagrams/dot/code-scanning-sast.dot +8 -8
  53. data/documentation/diagrams/dot/cron-scheduling.dot +2 -0
  54. data/documentation/diagrams/dot/driver-framework.dot +1 -1
  55. data/documentation/diagrams/dot/extrospection-world-awareness.dot +2 -2
  56. data/documentation/diagrams/dot/fuzzing-workflow.dot +3 -3
  57. data/documentation/diagrams/dot/history-to-drivers.dot +1 -1
  58. data/documentation/diagrams/dot/memory-skills-detailed.dot +3 -3
  59. data/documentation/diagrams/dot/mistakes-negative-feedback.dot +2 -2
  60. data/documentation/diagrams/dot/overall-pwn-architecture.dot +33 -121
  61. data/documentation/diagrams/dot/persistence-filesystem.dot +2 -2
  62. data/documentation/diagrams/dot/plugin-ecosystem.dot +2 -2
  63. data/documentation/diagrams/dot/pwn-ai-feedback-learning-loop.dot +31 -167
  64. data/documentation/diagrams/dot/pwn-repl-prototyping.dot +1 -1
  65. data/documentation/diagrams/dot/reinforcement-learning.dot +15 -7
  66. data/documentation/diagrams/dot/reporting-pipeline.dot +5 -3
  67. data/documentation/diagrams/dot/reverse-engineering-flow.dot +3 -3
  68. data/documentation/diagrams/dot/sdr-radio-flow.dot +5 -5
  69. data/documentation/diagrams/dot/sessions-cron-automation.dot +1 -1
  70. data/documentation/diagrams/dot/swarm-multi-agent.dot +3 -3
  71. data/documentation/diagrams/dot/task-summarizer.dot +2 -2
  72. data/documentation/diagrams/dot/web-application-testing.dot +4 -3
  73. data/documentation/diagrams/dot/zero-day-research-flow.dot +4 -3
  74. data/documentation/diagrams/driver-framework.svg +1 -1
  75. data/documentation/diagrams/extrospection-world-awareness.svg +178 -178
  76. data/documentation/diagrams/fuzzing-workflow.svg +58 -58
  77. data/documentation/diagrams/history-to-drivers.svg +42 -42
  78. data/documentation/diagrams/memory-skills-detailed.svg +210 -210
  79. data/documentation/diagrams/mistakes-negative-feedback.svg +116 -116
  80. data/documentation/diagrams/overall-pwn-architecture.svg +248 -404
  81. data/documentation/diagrams/persistence-filesystem.svg +143 -143
  82. data/documentation/diagrams/plugin-ecosystem.svg +100 -100
  83. data/documentation/diagrams/pwn-ai-feedback-learning-loop.svg +233 -752
  84. data/documentation/diagrams/pwn-repl-prototyping.svg +27 -27
  85. data/documentation/diagrams/reinforcement-learning.svg +295 -221
  86. data/documentation/diagrams/reporting-pipeline.svg +94 -80
  87. data/documentation/diagrams/reverse-engineering-flow.svg +31 -31
  88. data/documentation/diagrams/sdr-radio-flow.svg +157 -155
  89. data/documentation/diagrams/sessions-cron-automation.svg +13 -13
  90. data/documentation/diagrams/swarm-multi-agent.svg +86 -86
  91. data/documentation/diagrams/task-summarizer.svg +57 -57
  92. data/documentation/diagrams/web-application-testing.svg +81 -75
  93. data/documentation/diagrams/zero-day-research-flow.svg +101 -92
  94. data/documentation/pwn-REPL.md +5 -3
  95. data/documentation/pwn-ai-Agent.md +18 -14
  96. data/documentation/pwn_silent_help_learn_demo.gif +0 -0
  97. data/etc/default_skills/pwn/ai/agent/learning/SKILL.md +1 -0
  98. data/lib/pwn/ai/agent/learning.rb +46 -1
  99. data/lib/pwn/ai/agent/loop.rb +6 -3
  100. data/lib/pwn/ai/agent/policy_evaluation.rb +5 -1
  101. data/lib/pwn/ai/agent/reward.rb +9 -0
  102. data/lib/pwn/version.rb +1 -1
  103. data/spec/fixtures/harness/completion_regressions.json +10 -0
  104. data/spec/fixtures/harness/completion_regressions.json.sha256 +1 -0
  105. data/spec/integration/harness_evaluation_spec.rb +13 -0
  106. data/spec/lib/pwn/ai/agent/learning_spec.rb +22 -0
  107. data/spec/lib/pwn/ai/agent/loop_spec.rb +39 -0
  108. data/spec/lib/pwn/ai/agent/policy_evaluation_spec.rb +6 -1
  109. data/spec/lib/pwn/ai/agent/reward_spec.rb +21 -0
  110. data/spec/support/harness/evaluate.rb +1 -1
  111. data/third_party/pwn_rdoc.jsonl +2 -1
  112. metadata +10 -7
@@ -4,13 +4,13 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_AI_Integration Pages: 1 -->
7
- <svg width="798pt" height="580pt"
8
- viewBox="0.00 0.00 798.00 580.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
7
+ <svg width="876pt" height="580pt"
8
+ viewBox="0.00 0.00 876.00 580.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
9
  <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 537.2)">
10
10
  <title>PWN_AI_Integration</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-537.2 754.95,-537.2 754.95,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="164.62" y="-472" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI &#45; Multi&#45;Provider LLM Integration</text>
13
- <text xml:space="preserve" text-anchor="start" x="247.12" y="-460.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">one Agent Loop · six interchangeable engines</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-537.2 832.95,-537.2 832.95,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="203.62" y="-472" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::AI &#45; Multi&#45;Provider LLM Integration</text>
13
+ <text xml:space="preserve" text-anchor="start" x="286.12" y="-460.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">one Agent Loop · six interchangeable engines</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_c</title>
16
16
  <path fill="#2e1065" stroke="#6d28d9" d="M331.5,-8C331.5,-8 483.25,-8 483.25,-8 489.25,-8 495.25,-14 495.25,-20 495.25,-20 495.25,-435 495.25,-435 495.25,-441 489.25,-447 483.25,-447 483.25,-447 331.5,-447 331.5,-447 325.5,-447 319.5,-441 319.5,-435 319.5,-435 319.5,-20 319.5,-20 319.5,-14 325.5,-8 331.5,-8"/>
@@ -18,8 +18,8 @@
18
18
  </g>
19
19
  <g id="clust3" class="cluster">
20
20
  <title>cluster_api</title>
21
- <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M586.25,-24C586.25,-24 699.75,-24 699.75,-24 705.75,-24 711.75,-30 711.75,-36 711.75,-36 711.75,-435 711.75,-435 711.75,-441 705.75,-447 699.75,-447 699.75,-447 586.25,-447 586.25,-447 580.25,-447 574.25,-441 574.25,-435 574.25,-435 574.25,-36 574.25,-36 574.25,-30 580.25,-24 586.25,-24"/>
22
- <text xml:space="preserve" text-anchor="middle" x="643" y="-424" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Provider APIs</text>
21
+ <path fill="#450a0a" stroke="#b91c1c" stroke-dasharray="5,2" d="M586.25,-24C586.25,-24 769.75,-24 769.75,-24 775.75,-24 781.75,-30 781.75,-36 781.75,-36 781.75,-435 781.75,-435 781.75,-441 775.75,-447 769.75,-447 769.75,-447 586.25,-447 586.25,-447 580.25,-447 574.25,-441 574.25,-435 574.25,-435 574.25,-36 574.25,-36 574.25,-30 580.25,-24 586.25,-24"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-424" font-family="sans-Serif" font-size="20.00" fill="#fecaca">Provider APIs</text>
23
23
  </g>
24
24
  <!-- Loop -->
25
25
  <g id="node1" class="node">
@@ -116,77 +116,78 @@
116
116
  <!-- A1 -->
117
117
  <g id="node8" class="node">
118
118
  <title>A1</title>
119
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M671.5,-408C671.5,-408 613.5,-408 613.5,-408 607.5,-408 601.5,-402 601.5,-396 601.5,-396 601.5,-384 601.5,-384 601.5,-378 607.5,-372 613.5,-372 613.5,-372 671.5,-372 671.5,-372 677.5,-372 683.5,-378 683.5,-384 683.5,-384 683.5,-396 683.5,-396 683.5,-402 677.5,-408 671.5,-408"/>
120
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-386.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.openai.com</text>
119
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M761.75,-408C761.75,-408 594.25,-408 594.25,-408 588.25,-408 582.25,-402 582.25,-396 582.25,-396 582.25,-384 582.25,-384 582.25,-378 588.25,-372 594.25,-372 594.25,-372 761.75,-372 761.75,-372 767.75,-372 773.75,-378 773.75,-384 773.75,-384 773.75,-396 773.75,-396 773.75,-402 767.75,-408 761.75,-408"/>
120
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-392.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.openai.com (API key)</text>
121
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-380.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">chatgpt.com/backend&#45;api/codex (OAuth)</text>
121
122
  </g>
122
123
  <!-- OpenAI&#45;&gt;A1 -->
123
124
  <g id="edge7" class="edge">
124
125
  <title>OpenAI&#45;&gt;A1</title>
125
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M434.22,-390C472.21,-390 543.1,-390 591.28,-390"/>
126
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="591.23,-392.8 599.23,-390 591.23,-387.2 591.23,-392.8"/>
126
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M434.17,-390C466.1,-390 521.9,-390 571.97,-390"/>
127
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="571.93,-392.8 579.93,-390 571.93,-387.2 571.93,-392.8"/>
127
128
  </g>
128
129
  <!-- A2 -->
129
130
  <g id="node9" class="node">
130
131
  <title>A2</title>
131
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M677.12,-340C677.12,-340 607.88,-340 607.88,-340 601.88,-340 595.88,-334 595.88,-328 595.88,-328 595.88,-316 595.88,-316 595.88,-310 601.88,-304 607.88,-304 607.88,-304 677.12,-304 677.12,-304 683.12,-304 689.12,-310 689.12,-316 689.12,-316 689.12,-328 689.12,-328 689.12,-334 683.12,-340 677.12,-340"/>
132
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-318.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.anthropic.com</text>
132
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M712.62,-340C712.62,-340 643.38,-340 643.38,-340 637.38,-340 631.38,-334 631.38,-328 631.38,-328 631.38,-316 631.38,-316 631.38,-310 637.38,-304 643.38,-304 643.38,-304 712.62,-304 712.62,-304 718.62,-304 724.62,-310 724.62,-316 724.62,-316 724.62,-328 724.62,-328 724.62,-334 718.62,-340 712.62,-340"/>
133
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-318.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.anthropic.com</text>
133
134
  </g>
134
135
  <!-- Anthropic&#45;&gt;A2 -->
135
136
  <g id="edge8" class="edge">
136
137
  <title>Anthropic&#45;&gt;A2</title>
137
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M436.06,-322C472.99,-322 538.61,-322 585.76,-322"/>
138
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="585.56,-324.8 593.56,-322 585.56,-319.2 585.56,-324.8"/>
138
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M435.91,-322C479.6,-322 564.76,-322 621.27,-322"/>
139
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="621.16,-324.8 629.16,-322 621.16,-319.2 621.16,-324.8"/>
139
140
  </g>
140
141
  <!-- A3 -->
141
142
  <g id="node10" class="node">
142
143
  <title>A3</title>
143
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M657.5,-272C657.5,-272 627.5,-272 627.5,-272 621.5,-272 615.5,-266 615.5,-260 615.5,-260 615.5,-248 615.5,-248 615.5,-242 621.5,-236 627.5,-236 627.5,-236 657.5,-236 657.5,-236 663.5,-236 669.5,-242 669.5,-248 669.5,-248 669.5,-260 669.5,-260 669.5,-266 663.5,-272 657.5,-272"/>
144
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-256.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.x.ai</text>
145
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-244.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">auth.x.ai</text>
144
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M693,-272C693,-272 663,-272 663,-272 657,-272 651,-266 651,-260 651,-260 651,-248 651,-248 651,-242 657,-236 663,-236 663,-236 693,-236 693,-236 699,-236 705,-242 705,-248 705,-248 705,-260 705,-260 705,-266 699,-272 693,-272"/>
145
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-256.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">api.x.ai</text>
146
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-244.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">auth.x.ai</text>
146
147
  </g>
147
148
  <!-- Grok&#45;&gt;A3 -->
148
149
  <g id="edge9" class="edge">
149
150
  <title>Grok&#45;&gt;A3</title>
150
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M455.43,-254C499.74,-254 564.85,-254 605.14,-254"/>
151
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="605.09,-256.8 613.09,-254 605.09,-251.2 605.09,-256.8"/>
151
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M455.37,-254C508.23,-254 592.5,-254 640.46,-254"/>
152
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="640.44,-256.8 648.44,-254 640.44,-251.2 640.44,-256.8"/>
152
153
  </g>
153
154
  <!-- A4 -->
154
155
  <g id="node11" class="node">
155
156
  <title>A4</title>
156
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M680.5,-204C680.5,-204 604.5,-204 604.5,-204 598.5,-204 592.5,-198 592.5,-192 592.5,-192 592.5,-180 592.5,-180 592.5,-174 598.5,-168 604.5,-168 604.5,-168 680.5,-168 680.5,-168 686.5,-168 692.5,-174 692.5,-180 692.5,-180 692.5,-192 692.5,-192 692.5,-198 686.5,-204 680.5,-204"/>
157
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-188.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generativelanguage</text>
158
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-176.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">.googleapis.com</text>
157
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M716,-204C716,-204 640,-204 640,-204 634,-204 628,-198 628,-192 628,-192 628,-180 628,-180 628,-174 634,-168 640,-168 640,-168 716,-168 716,-168 722,-168 728,-174 728,-180 728,-180 728,-192 728,-192 728,-198 722,-204 716,-204"/>
158
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-188.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generativelanguage</text>
159
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-176.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">.googleapis.com</text>
159
160
  </g>
160
161
  <!-- Gemini&#45;&gt;A4 -->
161
162
  <g id="edge10" class="edge">
162
163
  <title>Gemini&#45;&gt;A4</title>
163
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M434.22,-186C469.87,-186 534.49,-186 582.13,-186"/>
164
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="582.06,-188.8 590.06,-186 582.06,-183.2 582.06,-188.8"/>
164
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M434.17,-186C476.43,-186 560.51,-186 617.76,-186"/>
165
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="617.45,-188.8 625.45,-186 617.45,-183.2 617.45,-188.8"/>
165
166
  </g>
166
167
  <!-- A5 -->
167
168
  <g id="node12" class="node">
168
169
  <title>A5</title>
169
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M672.62,-136C672.62,-136 612.38,-136 612.38,-136 606.38,-136 600.38,-130 600.38,-124 600.38,-124 600.38,-112 600.38,-112 600.38,-106 606.38,-100 612.38,-100 612.38,-100 672.62,-100 672.62,-100 678.62,-100 684.62,-106 684.62,-112 684.62,-112 684.62,-124 684.62,-124 684.62,-130 678.62,-136 672.62,-136"/>
170
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-114.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">localhost:11434</text>
170
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M708.12,-136C708.12,-136 647.88,-136 647.88,-136 641.88,-136 635.88,-130 635.88,-124 635.88,-124 635.88,-112 635.88,-112 635.88,-106 641.88,-100 647.88,-100 647.88,-100 708.12,-100 708.12,-100 714.12,-100 720.12,-106 720.12,-112 720.12,-112 720.12,-124 720.12,-124 720.12,-130 714.12,-136 708.12,-136"/>
171
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-114.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">localhost:11434</text>
171
172
  </g>
172
173
  <!-- Ollama&#45;&gt;A5 -->
173
174
  <g id="edge11" class="edge">
174
175
  <title>Ollama&#45;&gt;A5</title>
175
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M483.73,-115.3C518.59,-115.9 559.03,-116.59 590.24,-117.12"/>
176
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="590.01,-119.92 598.06,-117.26 590.11,-114.32 590.01,-119.92"/>
176
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M483.56,-115.12C528.85,-115.8 585.22,-116.64 625.41,-117.23"/>
177
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="625.25,-120.03 633.29,-117.35 625.33,-114.43 625.25,-120.03"/>
177
178
  </g>
178
179
  <!-- A6 -->
179
180
  <g id="node13" class="node">
180
181
  <title>A6</title>
181
- <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M677.5,-68C677.5,-68 607.5,-68 607.5,-68 601.5,-68 595.5,-62 595.5,-56 595.5,-56 595.5,-44 595.5,-44 595.5,-38 601.5,-32 607.5,-32 607.5,-32 677.5,-32 677.5,-32 683.5,-32 689.5,-38 689.5,-44 689.5,-44 689.5,-56 689.5,-56 689.5,-62 683.5,-68 677.5,-68"/>
182
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-52.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Open WebUI host</text>
183
- <text xml:space="preserve" text-anchor="middle" x="642.5" y="-40.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">/api/v1 + /ollama</text>
182
+ <path fill="#fda4af" stroke="#334155" stroke-width="1.3" d="M713,-68C713,-68 643,-68 643,-68 637,-68 631,-62 631,-56 631,-56 631,-44 631,-44 631,-38 637,-32 643,-32 643,-32 713,-32 713,-32 719,-32 725,-38 725,-44 725,-44 725,-56 725,-56 725,-62 719,-68 713,-68"/>
183
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-52.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Open WebUI host</text>
184
+ <text xml:space="preserve" text-anchor="middle" x="678" y="-40.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">/api/v1 + /ollama</text>
184
185
  </g>
185
186
  <!-- OpenWebUI&#45;&gt;A6 -->
186
187
  <g id="edge12" class="edge">
187
188
  <title>OpenWebUI&#45;&gt;A6</title>
188
- <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M462.65,-40.81C499.54,-42.71 548.07,-45.2 585.26,-47.11"/>
189
- <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="584.85,-49.89 592.98,-47.51 585.14,-44.3 584.85,-49.89"/>
189
+ <path fill="none" stroke="#fb7185" stroke-width="1.3" d="M462.66,-40.44C508.62,-42.49 574.02,-45.41 620.46,-47.48"/>
190
+ <polygon fill="#fb7185" stroke="#fb7185" stroke-width="1.3" points="620.28,-50.27 628.4,-47.83 620.53,-44.68 620.28,-50.27"/>
190
191
  </g>
191
192
  <!-- Cfg -->
192
193
  <g id="node14" class="node">
@@ -4,169 +4,169 @@
4
4
  <!-- Generated by graphviz version 14.1.2 (0)
5
5
  -->
6
6
  <!-- Title: PWN_SAST Pages: 1 -->
7
- <svg width="818pt" height="484pt"
8
- viewBox="0.00 0.00 818.00 484.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
- <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 441.2)">
7
+ <svg width="857pt" height="575pt"
8
+ viewBox="0.00 0.00 857.00 575.00" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
9
+ <g id="graph0" class="graph" transform="scale(1 1) rotate(0) translate(43.2 532.2)">
10
10
  <title>PWN_SAST</title>
11
- <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-441.2 775.2,-441.2 775.2,43.2 -43.2,43.2"/>
12
- <text xml:space="preserve" text-anchor="start" x="138" y="-376" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::SAST &#45; Static Application Security Testing</text>
13
- <text xml:space="preserve" text-anchor="start" x="229.88" y="-364.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">48 rules · multi&#45;language · bin/pwn_sast · Reports::SAST</text>
11
+ <polygon fill="#0f172a" stroke="none" points="-43.2,43.2 -43.2,-532.2 814.08,-532.2 814.08,43.2 -43.2,43.2"/>
12
+ <text xml:space="preserve" text-anchor="start" x="157.44" y="-467" font-family="sans-Serif" font-weight="bold" font-size="20.00" fill="#e2e8f0">PWN::SAST &#45; Static Application Security Testing</text>
13
+ <text xml:space="preserve" text-anchor="start" x="240.69" y="-455.55" font-family="sans-Serif" font-size="11.00" fill="#94a3b8">48 modules · multi&#45;language · bin/pwn_sast · Reports::SAST</text>
14
14
  <g id="clust1" class="cluster">
15
15
  <title>cluster_engine</title>
16
- <path fill="#022c22" stroke="#047857" d="M178,-138C178,-138 290.75,-138 290.75,-138 296.75,-138 302.75,-144 302.75,-150 302.75,-150 302.75,-274 302.75,-274 302.75,-280 296.75,-286 290.75,-286 290.75,-286 178,-286 178,-286 172,-286 166,-280 166,-274 166,-274 166,-150 166,-150 166,-144 172,-138 178,-138"/>
17
- <text xml:space="preserve" text-anchor="middle" x="234.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">SAST Engine</text>
16
+ <path fill="#022c22" stroke="#047857" d="M193.62,-229C193.62,-229 306.38,-229 306.38,-229 312.38,-229 318.38,-235 318.38,-241 318.38,-241 318.38,-365 318.38,-365 318.38,-371 312.38,-377 306.38,-377 306.38,-377 193.62,-377 193.62,-377 187.62,-377 181.62,-371 181.62,-365 181.62,-365 181.62,-241 181.62,-241 181.62,-235 187.62,-229 193.62,-229"/>
17
+ <text xml:space="preserve" text-anchor="middle" x="250" y="-354" font-family="sans-Serif" font-size="20.00" fill="#a7f3d0">SAST Engine</text>
18
18
  </g>
19
19
  <g id="clust2" class="cluster">
20
20
  <title>cluster_rules</title>
21
- <path fill="#422006" stroke="#a16207" d="M384.75,-8C384.75,-8 538.75,-8 538.75,-8 544.75,-8 550.75,-14 550.75,-20 550.75,-20 550.75,-339 550.75,-339 550.75,-345 544.75,-351 538.75,-351 538.75,-351 384.75,-351 384.75,-351 378.75,-351 372.75,-345 372.75,-339 372.75,-339 372.75,-20 372.75,-20 372.75,-14 378.75,-8 384.75,-8"/>
22
- <text xml:space="preserve" text-anchor="middle" x="461.75" y="-328" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Rule Families (48)</text>
21
+ <path fill="#422006" stroke="#a16207" d="M400.38,-99C400.38,-99 582.12,-99 582.12,-99 588.12,-99 594.12,-105 594.12,-111 594.12,-111 594.12,-430 594.12,-430 594.12,-436 588.12,-442 582.12,-442 582.12,-442 400.38,-442 400.38,-442 394.38,-442 388.38,-436 388.38,-430 388.38,-430 388.38,-111 388.38,-111 388.38,-105 394.38,-99 400.38,-99"/>
22
+ <text xml:space="preserve" text-anchor="middle" x="491.25" y="-419" font-family="sans-Serif" font-size="20.00" fill="#fde68a">Selected rule families</text>
23
23
  </g>
24
24
  <g id="clust3" class="cluster">
25
25
  <title>cluster_out</title>
26
- <path fill="#2e1065" stroke="#6d28d9" d="M632.75,-138C632.75,-138 712,-138 712,-138 718,-138 724,-144 724,-150 724,-150 724,-274 724,-274 724,-280 718,-286 712,-286 712,-286 632.75,-286 632.75,-286 626.75,-286 620.75,-280 620.75,-274 620.75,-274 620.75,-150 620.75,-150 620.75,-144 626.75,-138 632.75,-138"/>
27
- <text xml:space="preserve" text-anchor="middle" x="672.38" y="-263" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
26
+ <path fill="#2e1065" stroke="#6d28d9" d="M20,-8C20,-8 750.88,-8 750.88,-8 756.88,-8 762.88,-14 762.88,-20 762.88,-20 762.88,-79 762.88,-79 762.88,-85 756.88,-91 750.88,-91 750.88,-91 20,-91 20,-91 14,-91 8,-85 8,-79 8,-79 8,-20 8,-20 8,-14 14,-8 20,-8"/>
27
+ <text xml:space="preserve" text-anchor="middle" x="385.44" y="-68" font-family="sans-Serif" font-size="20.00" fill="#ddd6fe">Output</text>
28
28
  </g>
29
29
  <!-- Src -->
30
30
  <g id="node1" class="node">
31
31
  <title>Src</title>
32
- <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M76,-214C76,-214 12,-214 12,-214 6,-214 0,-208 0,-202 0,-202 0,-190 0,-190 0,-184 6,-178 12,-178 12,-178 76,-178 76,-178 82,-178 88,-184 88,-190 88,-190 88,-202 88,-202 88,-208 82,-214 76,-214"/>
33
- <text xml:space="preserve" text-anchor="middle" x="44" y="-198.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">📁 &#160;Source Tree</text>
34
- <text xml:space="preserve" text-anchor="middle" x="44" y="-186.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">git clone / repo</text>
32
+ <path fill="#7dd3fc" stroke="#334155" stroke-width="1.3" d="M91.62,-305C91.62,-305 27.62,-305 27.62,-305 21.62,-305 15.62,-299 15.62,-293 15.62,-293 15.62,-281 15.62,-281 15.62,-275 21.62,-269 27.62,-269 27.62,-269 91.62,-269 91.62,-269 97.62,-269 103.62,-275 103.62,-281 103.62,-281 103.62,-293 103.62,-293 103.62,-299 97.62,-305 91.62,-305"/>
33
+ <text xml:space="preserve" text-anchor="middle" x="59.62" y="-289.88" font-family="sans-Serif" font-size="10.00" fill="#0f172a">📁 &#160;Source Tree</text>
34
+ <text xml:space="preserve" text-anchor="middle" x="59.62" y="-277.12" font-family="sans-Serif" font-size="10.00" fill="#0f172a">git clone / repo</text>
35
35
  </g>
36
36
  <!-- Factory -->
37
37
  <g id="node2" class="node">
38
38
  <title>Factory</title>
39
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M261.75,-182C261.75,-182 206,-182 206,-182 200,-182 194,-176 194,-170 194,-170 194,-158 194,-158 194,-152 200,-146 206,-146 206,-146 261.75,-146 261.75,-146 267.75,-146 273.75,-152 273.75,-158 273.75,-158 273.75,-170 273.75,-170 273.75,-176 267.75,-182 261.75,-182"/>
40
- <text xml:space="preserve" text-anchor="middle" x="233.88" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">SAST::Factory</text>
41
- <text xml:space="preserve" text-anchor="middle" x="233.88" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rule loader</text>
39
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M283,-273C283,-273 216,-273 216,-273 210,-273 204,-267 204,-261 204,-261 204,-249 204,-249 204,-243 210,-237 216,-237 216,-237 283,-237 283,-237 289,-237 295,-243 295,-249 295,-249 295,-261 295,-261 295,-267 289,-273 283,-273"/>
40
+ <text xml:space="preserve" text-anchor="middle" x="249.5" y="-257.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">pwn_sast</text>
41
+ <text xml:space="preserve" text-anchor="middle" x="249.5" y="-245.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">rule orchestration</text>
42
42
  </g>
43
43
  <!-- Src&#45;&gt;Factory -->
44
44
  <g id="edge1" class="edge">
45
45
  <title>Src&#45;&gt;Factory</title>
46
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-188.58C117.01,-183.73 154.19,-177.4 183.69,-172.38"/>
47
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="184.02,-175.16 191.44,-171.06 183.08,-169.64 184.02,-175.16"/>
46
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M104.2,-279.58C130.87,-275.04 165.22,-269.19 193.72,-264.33"/>
47
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="194.17,-267.09 201.59,-262.99 193.23,-261.57 194.17,-267.09"/>
48
48
  </g>
49
49
  <!-- TCE -->
50
50
  <g id="node3" class="node">
51
51
  <title>TCE</title>
52
- <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M265.88,-247C265.88,-247 201.88,-247 201.88,-247 195.88,-247 189.88,-241 189.88,-235 189.88,-235 189.88,-223 189.88,-223 189.88,-217 195.88,-211 201.88,-211 201.88,-211 265.88,-211 265.88,-211 271.88,-211 277.88,-217 277.88,-223 277.88,-223 277.88,-235 277.88,-235 277.88,-241 271.88,-247 265.88,-247"/>
53
- <text xml:space="preserve" text-anchor="middle" x="233.88" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TestCaseEngine</text>
54
- <text xml:space="preserve" text-anchor="middle" x="233.88" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">generate probes</text>
52
+ <path fill="#6ee7b7" stroke="#334155" stroke-width="1.3" d="M281.5,-338C281.5,-338 217.5,-338 217.5,-338 211.5,-338 205.5,-332 205.5,-326 205.5,-326 205.5,-314 205.5,-314 205.5,-308 211.5,-302 217.5,-302 217.5,-302 281.5,-302 281.5,-302 287.5,-302 293.5,-308 293.5,-314 293.5,-314 293.5,-326 293.5,-326 293.5,-332 287.5,-338 281.5,-338"/>
53
+ <text xml:space="preserve" text-anchor="middle" x="249.5" y="-322.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">TestCaseEngine</text>
54
+ <text xml:space="preserve" text-anchor="middle" x="249.5" y="-310.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">execute filters</text>
55
55
  </g>
56
56
  <!-- Src&#45;&gt;TCE -->
57
57
  <g id="edge2" class="edge">
58
58
  <title>Src&#45;&gt;TCE</title>
59
- <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M88.57,-203.65C115.84,-208.44 151.15,-214.65 180.02,-219.72"/>
60
- <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="179.24,-222.42 187.6,-221.05 180.2,-216.91 179.24,-222.42"/>
59
+ <path fill="none" stroke="#38bdf8" stroke-width="1.3" d="M104.2,-294.65C131.47,-299.44 166.78,-305.65 195.64,-310.72"/>
60
+ <polygon fill="#38bdf8" stroke="#38bdf8" stroke-width="1.3" points="194.86,-313.42 203.22,-312.05 195.83,-307.91 194.86,-313.42"/>
61
61
  </g>
62
62
  <!-- Cmd -->
63
63
  <g id="node4" class="node">
64
64
  <title>Cmd</title>
65
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M515.75,-52C515.75,-52 406.75,-52 406.75,-52 400.75,-52 394.75,-46 394.75,-40 394.75,-40 394.75,-28 394.75,-28 394.75,-22 400.75,-16 406.75,-16 406.75,-16 515.75,-16 515.75,-16 521.75,-16 527.75,-22 527.75,-28 527.75,-28 527.75,-40 527.75,-40 527.75,-46 521.75,-52 515.75,-52"/>
66
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cmd_execution_*</text>
67
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">java · py · ruby · go · scala</text>
65
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M545.25,-143C545.25,-143 436.25,-143 436.25,-143 430.25,-143 424.25,-137 424.25,-131 424.25,-131 424.25,-119 424.25,-119 424.25,-113 430.25,-107 436.25,-107 436.25,-107 545.25,-107 545.25,-107 551.25,-107 557.25,-113 557.25,-119 557.25,-119 557.25,-131 557.25,-131 557.25,-137 551.25,-143 545.25,-143"/>
66
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-127.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">cmd_execution_*</text>
67
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-115.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">java · py · ruby · go · scala</text>
68
68
  </g>
69
69
  <!-- Factory&#45;&gt;Cmd -->
70
70
  <g id="edge3" class="edge">
71
71
  <title>Factory&#45;&gt;Cmd</title>
72
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M257.15,-145.65C283.5,-124.59 329.29,-90 372.75,-67 379.97,-63.18 387.73,-59.58 395.54,-56.28"/>
73
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="396.54,-58.89 402.88,-53.27 394.42,-53.71 396.54,-58.89"/>
72
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M295.29,-242.24C303.12,-239.51 311.08,-236.41 318.38,-233 369.17,-209.22 423.19,-173.15 456.7,-149.34"/>
73
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="458.29,-151.64 463.16,-144.71 455.03,-147.09 458.29,-151.64"/>
74
74
  </g>
75
75
  <!-- Web -->
76
76
  <g id="node5" class="node">
77
77
  <title>Web</title>
78
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M526.62,-117C526.62,-117 395.88,-117 395.88,-117 389.88,-117 383.88,-111 383.88,-105 383.88,-105 383.88,-93 383.88,-93 383.88,-87 389.88,-81 395.88,-81 395.88,-81 526.62,-81 526.62,-81 532.62,-81 538.62,-87 538.62,-93 538.62,-93 538.62,-105 538.62,-105 538.62,-111 532.62,-117 526.62,-117"/>
79
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-101.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">csrf · redirect · redos</text>
80
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-89.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">inner/outer_html · location_hash</text>
78
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M556.12,-208C556.12,-208 425.38,-208 425.38,-208 419.38,-208 413.38,-202 413.38,-196 413.38,-196 413.38,-184 413.38,-184 413.38,-178 419.38,-172 425.38,-172 425.38,-172 556.12,-172 556.12,-172 562.12,-172 568.12,-178 568.12,-184 568.12,-184 568.12,-196 568.12,-196 568.12,-202 562.12,-208 556.12,-208"/>
79
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-192.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">csrf · redirect · redos</text>
80
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-180.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">inner/outer_html · location_hash</text>
81
81
  </g>
82
82
  <!-- Factory&#45;&gt;Web -->
83
83
  <g id="edge4" class="edge">
84
84
  <title>Factory&#45;&gt;Web</title>
85
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-152.6C305.35,-143.68 349.28,-131 386.67,-120.22"/>
86
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="387.22,-122.98 394.13,-118.07 385.67,-117.6 387.22,-122.98"/>
85
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M295.5,-242.77C328.33,-233.85 373.65,-221.54 412.26,-211.05"/>
86
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="412.52,-213.88 419.51,-209.08 411.05,-208.48 412.52,-213.88"/>
87
87
  </g>
88
88
  <!-- Cryp -->
89
89
  <g id="node6" class="node">
90
90
  <title>Cryp</title>
91
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M519.5,-182C519.5,-182 403,-182 403,-182 397,-182 391,-176 391,-170 391,-170 391,-158 391,-158 391,-152 397,-146 403,-146 403,-146 519.5,-146 519.5,-146 525.5,-146 531.5,-152 531.5,-158 531.5,-158 531.5,-170 531.5,-170 531.5,-176 525.5,-182 519.5,-182"/>
92
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">md5 · ssl · keystore</text>
93
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">padding_oracle · private_key</text>
91
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M549,-273C549,-273 432.5,-273 432.5,-273 426.5,-273 420.5,-267 420.5,-261 420.5,-261 420.5,-249 420.5,-249 420.5,-243 426.5,-237 432.5,-237 432.5,-237 549,-237 549,-237 555,-237 561,-243 561,-249 561,-249 561,-261 561,-261 561,-267 555,-273 549,-273"/>
92
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-257.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">md5 · ssl · keystore</text>
93
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-245.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">padding_oracle · private_key</text>
94
94
  </g>
95
95
  <!-- Factory&#45;&gt;Cryp -->
96
96
  <g id="edge5" class="edge">
97
97
  <title>Factory&#45;&gt;Cryp</title>
98
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M274.39,-164C303.83,-164 345,-164 381.11,-164"/>
99
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="380.69,-166.8 388.69,-164 380.69,-161.2 380.69,-166.8"/>
98
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M295.5,-255C327.82,-255 372.24,-255 410.45,-255"/>
99
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="410.05,-257.8 418.05,-255 410.05,-252.2 410.05,-257.8"/>
100
100
  </g>
101
101
  <!-- Data -->
102
102
  <g id="node7" class="node">
103
103
  <title>Data</title>
104
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M510.88,-247C510.88,-247 411.62,-247 411.62,-247 405.62,-247 399.62,-241 399.62,-235 399.62,-235 399.62,-223 399.62,-223 399.62,-217 405.62,-211 411.62,-211 411.62,-211 510.88,-211 510.88,-211 516.88,-211 522.88,-217 522.88,-223 522.88,-223 522.88,-235 522.88,-235 522.88,-241 516.88,-247 510.88,-247"/>
105
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sql · eval · deserial_java</text>
106
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">log4j · php_type_juggling</text>
104
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M540.38,-338C540.38,-338 441.12,-338 441.12,-338 435.12,-338 429.12,-332 429.12,-326 429.12,-326 429.12,-314 429.12,-314 429.12,-308 435.12,-302 441.12,-302 441.12,-302 540.38,-302 540.38,-302 546.38,-302 552.38,-308 552.38,-314 552.38,-314 552.38,-326 552.38,-326 552.38,-332 546.38,-338 540.38,-338"/>
105
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-322.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">sql · eval · deserial_java</text>
106
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-310.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">log4j · php_type_juggling</text>
107
107
  </g>
108
- <!-- TCE&#45;&gt;Data -->
108
+ <!-- Factory&#45;&gt;Data -->
109
109
  <g id="edge6" class="edge">
110
- <title>TCE&#45;&gt;Data</title>
111
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-229C309.8,-229 353.03,-229 389.45,-229"/>
112
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="389.07,-231.8 397.07,-229 389.07,-226.2 389.07,-231.8"/>
110
+ <title>Factory&#45;&gt;Data</title>
111
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M295.54,-270.15C322.34,-278.89 357.1,-289.75 388.38,-298 398.31,-300.62 408.85,-303.17 419.23,-305.54"/>
112
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="418.36,-308.21 426.78,-307.24 419.59,-302.75 418.36,-308.21"/>
113
113
  </g>
114
114
  <!-- Mem -->
115
115
  <g id="node8" class="node">
116
116
  <title>Mem</title>
117
- <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M491,-312C491,-312 431.5,-312 431.5,-312 425.5,-312 419.5,-306 419.5,-300 419.5,-300 419.5,-288 419.5,-288 419.5,-282 425.5,-276 431.5,-276 431.5,-276 491,-276 491,-276 497,-276 503,-282 503,-288 503,-288 503,-300 503,-300 503,-306 497,-312 491,-312"/>
118
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-296.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">banned_c_calls</text>
119
- <text xml:space="preserve" text-anchor="middle" x="461.25" y="-284.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">use_after_free</text>
117
+ <path fill="#fcd34d" stroke="#334155" stroke-width="1.3" d="M520.5,-403C520.5,-403 461,-403 461,-403 455,-403 449,-397 449,-391 449,-391 449,-379 449,-379 449,-373 455,-367 461,-367 461,-367 520.5,-367 520.5,-367 526.5,-367 532.5,-373 532.5,-379 532.5,-379 532.5,-391 532.5,-391 532.5,-397 526.5,-403 520.5,-403"/>
118
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-387.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">banned_c_calls</text>
119
+ <text xml:space="preserve" text-anchor="middle" x="490.75" y="-375.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">use_after_free</text>
120
120
  </g>
121
- <!-- TCE&#45;&gt;Mem -->
121
+ <!-- Factory&#45;&gt;Mem -->
122
122
  <g id="edge7" class="edge">
123
- <title>TCE&#45;&gt;Mem</title>
124
- <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M278.33,-241.53C315.99,-252.39 370.49,-268.11 410.01,-279.51"/>
125
- <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="408.85,-282.09 417.32,-281.62 410.41,-276.71 408.85,-282.09"/>
123
+ <title>Factory&#45;&gt;Mem</title>
124
+ <path fill="none" stroke="#f59e0b" stroke-width="1.3" d="M268.29,-273.38C292.93,-297.73 339.94,-340.25 388.38,-363 404.05,-370.36 422.24,-375.29 438.86,-378.59"/>
125
+ <polygon fill="#f59e0b" stroke="#f59e0b" stroke-width="1.3" points="438.12,-381.3 446.49,-379.99 439.13,-375.79 438.12,-381.3"/>
126
126
  </g>
127
127
  <!-- Report -->
128
128
  <g id="node9" class="node">
129
129
  <title>Report</title>
130
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M701.75,-182C701.75,-182 643,-182 643,-182 637,-182 631,-176 631,-170 631,-170 631,-158 631,-158 631,-152 637,-146 643,-146 643,-146 701.75,-146 701.75,-146 707.75,-146 713.75,-152 713.75,-158 713.75,-158 713.75,-170 713.75,-170 713.75,-176 707.75,-182 701.75,-182"/>
131
- <text xml:space="preserve" text-anchor="middle" x="672.38" y="-166.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports::SAST</text>
132
- <text xml:space="preserve" text-anchor="middle" x="672.38" y="-154.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">HTML + JSON</text>
130
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M742.88,-52C742.88,-52 684.12,-52 684.12,-52 678.12,-52 672.12,-46 672.12,-40 672.12,-40 672.12,-28 672.12,-28 672.12,-22 678.12,-16 684.12,-16 684.12,-16 742.88,-16 742.88,-16 748.88,-16 754.88,-22 754.88,-28 754.88,-28 754.88,-40 754.88,-40 754.88,-46 748.88,-52 742.88,-52"/>
131
+ <text xml:space="preserve" text-anchor="middle" x="713.5" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">Reports::SAST</text>
132
+ <text xml:space="preserve" text-anchor="middle" x="713.5" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">HTML + JSON</text>
133
133
  </g>
134
134
  <!-- Cmd&#45;&gt;Report -->
135
135
  <g id="edge8" class="edge">
136
136
  <title>Cmd&#45;&gt;Report</title>
137
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M520.12,-52.52C530.59,-56.72 541.2,-61.57 550.75,-67 586.16,-87.14 621.93,-117.44 645.22,-138.81"/>
138
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="643.12,-140.67 650.88,-144.07 646.93,-136.57 643.12,-140.67"/>
137
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M557.64,-114.06C569.97,-111.11 582.6,-107.47 594.12,-103 624.15,-91.36 655.52,-72.74 678.42,-57.77"/>
138
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="679.7,-60.28 684.82,-53.53 676.6,-55.62 679.7,-60.28"/>
139
139
  </g>
140
140
  <!-- Web&#45;&gt;Report -->
141
141
  <g id="edge9" class="edge">
142
142
  <title>Web&#45;&gt;Report</title>
143
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M522.18,-117.63C553.54,-127.38 591.51,-139.17 621.29,-148.43"/>
144
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.3,-151.06 628.77,-150.76 621.96,-145.71 620.3,-151.06"/>
143
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M568.7,-179.11C577.59,-176.23 586.28,-172.59 594.12,-168 639.43,-141.49 676.53,-91.53 696.5,-60.67"/>
144
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="698.7,-62.43 700.62,-54.17 693.97,-59.43 698.7,-62.43"/>
145
145
  </g>
146
146
  <!-- Cryp&#45;&gt;Report -->
147
147
  <g id="edge10" class="edge">
148
148
  <title>Cryp&#45;&gt;Report</title>
149
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M531.89,-164C560.86,-164 593.87,-164 620.51,-164"/>
150
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="620.42,-166.8 628.42,-164 620.42,-161.2 620.42,-166.8"/>
149
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M561.65,-248.05C573.2,-244.71 584.53,-239.89 594.12,-233 654.25,-189.81 689.13,-105.78 703.97,-62.02"/>
150
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="706.62,-62.91 706.46,-54.43 701.3,-61.16 706.62,-62.91"/>
151
151
  </g>
152
- <!-- DD -->
153
- <g id="node10" class="node">
154
- <title>DD</title>
155
- <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M704,-247C704,-247 640.75,-247 640.75,-247 634.75,-247 628.75,-241 628.75,-235 628.75,-235 628.75,-223 628.75,-223 628.75,-217 634.75,-211 640.75,-211 640.75,-211 704,-211 704,-211 710,-211 716,-217 716,-223 716,-223 716,-235 716,-235 716,-241 710,-247 704,-247"/>
156
- <text xml:space="preserve" text-anchor="middle" x="672.38" y="-231.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DefectDojo</text>
157
- <text xml:space="preserve" text-anchor="middle" x="672.38" y="-219.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">import / reimport</text>
158
- </g>
159
- <!-- Data&#45;&gt;DD -->
152
+ <!-- Data&#45;&gt;Report -->
160
153
  <g id="edge11" class="edge">
161
- <title>Data&#45;&gt;DD</title>
162
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M523.3,-229C553.39,-229 589.33,-229 618.26,-229"/>
163
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="618.22,-231.8 626.22,-229 618.22,-226.2 618.22,-231.8"/>
154
+ <title>Data&#45;&gt;Report</title>
155
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M553.02,-316.38C567.69,-313.08 582.47,-307.44 594.12,-298 669.87,-236.69 698.79,-116.7 708.36,-62.17"/>
156
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="711.1,-62.77 709.65,-54.42 705.58,-61.85 711.1,-62.77"/>
164
157
  </g>
165
- <!-- Mem&#45;&gt;DD -->
158
+ <!-- Mem&#45;&gt;Report -->
166
159
  <g id="edge12" class="edge">
167
- <title>Mem&#45;&gt;DD</title>
168
- <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M503.57,-281.16C536.68,-270.87 583.34,-256.36 619.05,-245.26"/>
169
- <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="619.66,-248.01 626.47,-242.96 618,-242.66 619.66,-248.01"/>
160
+ <title>Mem&#45;&gt;Report</title>
161
+ <path fill="none" stroke="#a78bfa" stroke-width="1.3" d="M533.06,-385.2C553.59,-383.23 577.5,-377.54 594.12,-363 685.89,-282.75 706.53,-125.95 711.16,-62.08"/>
162
+ <polygon fill="#a78bfa" stroke="#a78bfa" stroke-width="1.3" points="713.94,-62.44 711.67,-54.27 708.36,-62.07 713.94,-62.44"/>
163
+ </g>
164
+ <!-- DD -->
165
+ <g id="node10" class="node">
166
+ <title>DD</title>
167
+ <path fill="#c4b5fd" stroke="#334155" stroke-width="1.3" d="M91.25,-52C91.25,-52 28,-52 28,-52 22,-52 16,-46 16,-40 16,-40 16,-28 16,-28 16,-22 22,-16 28,-16 28,-16 91.25,-16 91.25,-16 97.25,-16 103.25,-22 103.25,-28 103.25,-28 103.25,-40 103.25,-40 103.25,-46 97.25,-52 91.25,-52"/>
168
+ <text xml:space="preserve" text-anchor="middle" x="59.62" y="-36.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">DefectDojo</text>
169
+ <text xml:space="preserve" text-anchor="middle" x="59.62" y="-24.5" font-family="sans-Serif" font-size="10.00" fill="#0f172a">import / reimport</text>
170
170
  </g>
171
171
  </g>
172
172
  </svg>