souleyez 2.43.28__py3-none-any.whl → 2.43.32__py3-none-any.whl

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 (356) hide show
  1. souleyez/__init__.py +1 -2
  2. souleyez/ai/__init__.py +21 -15
  3. souleyez/ai/action_mapper.py +249 -150
  4. souleyez/ai/chain_advisor.py +116 -100
  5. souleyez/ai/claude_provider.py +29 -28
  6. souleyez/ai/context_builder.py +80 -62
  7. souleyez/ai/executor.py +158 -117
  8. souleyez/ai/feedback_handler.py +136 -121
  9. souleyez/ai/llm_factory.py +27 -20
  10. souleyez/ai/llm_provider.py +4 -2
  11. souleyez/ai/ollama_provider.py +6 -9
  12. souleyez/ai/ollama_service.py +44 -37
  13. souleyez/ai/path_scorer.py +91 -76
  14. souleyez/ai/recommender.py +176 -144
  15. souleyez/ai/report_context.py +74 -73
  16. souleyez/ai/report_service.py +84 -66
  17. souleyez/ai/result_parser.py +222 -229
  18. souleyez/ai/safety.py +67 -44
  19. souleyez/auth/__init__.py +23 -22
  20. souleyez/auth/audit.py +36 -26
  21. souleyez/auth/engagement_access.py +65 -48
  22. souleyez/auth/permissions.py +14 -3
  23. souleyez/auth/session_manager.py +54 -37
  24. souleyez/auth/user_manager.py +109 -64
  25. souleyez/commands/audit.py +40 -43
  26. souleyez/commands/auth.py +35 -15
  27. souleyez/commands/deliverables.py +55 -50
  28. souleyez/commands/engagement.py +47 -28
  29. souleyez/commands/license.py +32 -23
  30. souleyez/commands/screenshots.py +36 -32
  31. souleyez/commands/user.py +82 -36
  32. souleyez/config.py +52 -44
  33. souleyez/core/credential_tester.py +87 -81
  34. souleyez/core/cve_mappings.py +179 -192
  35. souleyez/core/cve_matcher.py +162 -148
  36. souleyez/core/msf_auto_mapper.py +100 -83
  37. souleyez/core/msf_chain_engine.py +294 -256
  38. souleyez/core/msf_database.py +153 -70
  39. souleyez/core/msf_integration.py +679 -673
  40. souleyez/core/msf_rpc_client.py +40 -42
  41. souleyez/core/msf_rpc_manager.py +77 -79
  42. souleyez/core/msf_sync_manager.py +241 -181
  43. souleyez/core/network_utils.py +22 -15
  44. souleyez/core/parser_handler.py +34 -25
  45. souleyez/core/pending_chains.py +114 -63
  46. souleyez/core/templates.py +158 -107
  47. souleyez/core/tool_chaining.py +9592 -2879
  48. souleyez/core/version_utils.py +79 -94
  49. souleyez/core/vuln_correlation.py +136 -89
  50. souleyez/core/web_utils.py +33 -32
  51. souleyez/data/wordlists/ad_users.txt +378 -0
  52. souleyez/data/wordlists/api_endpoints_large.txt +769 -0
  53. souleyez/data/wordlists/home_dir_sensitive.txt +39 -0
  54. souleyez/data/wordlists/lfi_payloads.txt +82 -0
  55. souleyez/data/wordlists/passwords_brute.txt +1548 -0
  56. souleyez/data/wordlists/passwords_crack.txt +2479 -0
  57. souleyez/data/wordlists/passwords_spray.txt +386 -0
  58. souleyez/data/wordlists/subdomains_large.txt +5057 -0
  59. souleyez/data/wordlists/usernames_common.txt +694 -0
  60. souleyez/data/wordlists/web_dirs_large.txt +4769 -0
  61. souleyez/detection/__init__.py +1 -1
  62. souleyez/detection/attack_signatures.py +12 -17
  63. souleyez/detection/mitre_mappings.py +61 -55
  64. souleyez/detection/validator.py +97 -86
  65. souleyez/devtools.py +23 -10
  66. souleyez/docs/README.md +4 -4
  67. souleyez/docs/api-reference/cli-commands.md +2 -2
  68. souleyez/docs/developer-guide/adding-new-tools.md +562 -0
  69. souleyez/docs/user-guide/auto-chaining.md +30 -8
  70. souleyez/docs/user-guide/getting-started.md +1 -1
  71. souleyez/docs/user-guide/installation.md +26 -3
  72. souleyez/docs/user-guide/metasploit-integration.md +2 -2
  73. souleyez/docs/user-guide/rbac.md +1 -1
  74. souleyez/docs/user-guide/scope-management.md +1 -1
  75. souleyez/docs/user-guide/siem-integration.md +1 -1
  76. souleyez/docs/user-guide/tools-reference.md +1 -8
  77. souleyez/docs/user-guide/worker-management.md +1 -1
  78. souleyez/engine/background.py +1238 -535
  79. souleyez/engine/base.py +4 -1
  80. souleyez/engine/job_status.py +17 -49
  81. souleyez/engine/log_sanitizer.py +103 -77
  82. souleyez/engine/manager.py +38 -7
  83. souleyez/engine/result_handler.py +2198 -1550
  84. souleyez/engine/worker_manager.py +50 -41
  85. souleyez/export/evidence_bundle.py +72 -62
  86. souleyez/feature_flags/features.py +16 -20
  87. souleyez/feature_flags.py +5 -9
  88. souleyez/handlers/__init__.py +11 -0
  89. souleyez/handlers/base.py +188 -0
  90. souleyez/handlers/bash_handler.py +277 -0
  91. souleyez/handlers/bloodhound_handler.py +243 -0
  92. souleyez/handlers/certipy_handler.py +311 -0
  93. souleyez/handlers/crackmapexec_handler.py +486 -0
  94. souleyez/handlers/dnsrecon_handler.py +344 -0
  95. souleyez/handlers/enum4linux_handler.py +400 -0
  96. souleyez/handlers/evil_winrm_handler.py +493 -0
  97. souleyez/handlers/ffuf_handler.py +815 -0
  98. souleyez/handlers/gobuster_handler.py +1114 -0
  99. souleyez/handlers/gpp_extract_handler.py +334 -0
  100. souleyez/handlers/hashcat_handler.py +444 -0
  101. souleyez/handlers/hydra_handler.py +563 -0
  102. souleyez/handlers/impacket_getuserspns_handler.py +343 -0
  103. souleyez/handlers/impacket_psexec_handler.py +222 -0
  104. souleyez/handlers/impacket_secretsdump_handler.py +426 -0
  105. souleyez/handlers/john_handler.py +286 -0
  106. souleyez/handlers/katana_handler.py +425 -0
  107. souleyez/handlers/kerbrute_handler.py +298 -0
  108. souleyez/handlers/ldapsearch_handler.py +636 -0
  109. souleyez/handlers/lfi_extract_handler.py +464 -0
  110. souleyez/handlers/msf_auxiliary_handler.py +408 -0
  111. souleyez/handlers/msf_exploit_handler.py +380 -0
  112. souleyez/handlers/nikto_handler.py +413 -0
  113. souleyez/handlers/nmap_handler.py +821 -0
  114. souleyez/handlers/nuclei_handler.py +359 -0
  115. souleyez/handlers/nxc_handler.py +371 -0
  116. souleyez/handlers/rdp_sec_check_handler.py +353 -0
  117. souleyez/handlers/registry.py +288 -0
  118. souleyez/handlers/responder_handler.py +232 -0
  119. souleyez/handlers/service_explorer_handler.py +434 -0
  120. souleyez/handlers/smbclient_handler.py +344 -0
  121. souleyez/handlers/smbmap_handler.py +510 -0
  122. souleyez/handlers/smbpasswd_handler.py +296 -0
  123. souleyez/handlers/sqlmap_handler.py +1116 -0
  124. souleyez/handlers/theharvester_handler.py +601 -0
  125. souleyez/handlers/whois_handler.py +277 -0
  126. souleyez/handlers/wpscan_handler.py +554 -0
  127. souleyez/history.py +32 -16
  128. souleyez/importers/msf_importer.py +106 -75
  129. souleyez/importers/smart_importer.py +208 -147
  130. souleyez/integrations/siem/__init__.py +10 -10
  131. souleyez/integrations/siem/base.py +17 -18
  132. souleyez/integrations/siem/elastic.py +108 -122
  133. souleyez/integrations/siem/factory.py +207 -80
  134. souleyez/integrations/siem/googlesecops.py +146 -154
  135. souleyez/integrations/siem/rule_mappings/__init__.py +1 -1
  136. souleyez/integrations/siem/rule_mappings/wazuh_rules.py +8 -5
  137. souleyez/integrations/siem/sentinel.py +107 -109
  138. souleyez/integrations/siem/splunk.py +246 -212
  139. souleyez/integrations/siem/wazuh.py +65 -71
  140. souleyez/integrations/wazuh/__init__.py +5 -5
  141. souleyez/integrations/wazuh/client.py +70 -93
  142. souleyez/integrations/wazuh/config.py +85 -57
  143. souleyez/integrations/wazuh/host_mapper.py +28 -36
  144. souleyez/integrations/wazuh/sync.py +78 -68
  145. souleyez/intelligence/__init__.py +4 -5
  146. souleyez/intelligence/correlation_analyzer.py +309 -295
  147. souleyez/intelligence/exploit_knowledge.py +661 -623
  148. souleyez/intelligence/exploit_suggestions.py +159 -139
  149. souleyez/intelligence/gap_analyzer.py +132 -97
  150. souleyez/intelligence/gap_detector.py +251 -214
  151. souleyez/intelligence/sensitive_tables.py +266 -129
  152. souleyez/intelligence/service_parser.py +137 -123
  153. souleyez/intelligence/surface_analyzer.py +407 -268
  154. souleyez/intelligence/target_parser.py +159 -162
  155. souleyez/licensing/__init__.py +6 -6
  156. souleyez/licensing/validator.py +17 -19
  157. souleyez/log_config.py +79 -54
  158. souleyez/main.py +1505 -687
  159. souleyez/migrations/fix_job_counter.py +16 -14
  160. souleyez/parsers/bloodhound_parser.py +41 -39
  161. souleyez/parsers/crackmapexec_parser.py +178 -111
  162. souleyez/parsers/dalfox_parser.py +72 -77
  163. souleyez/parsers/dnsrecon_parser.py +103 -91
  164. souleyez/parsers/enum4linux_parser.py +183 -153
  165. souleyez/parsers/ffuf_parser.py +29 -25
  166. souleyez/parsers/gobuster_parser.py +301 -41
  167. souleyez/parsers/hashcat_parser.py +324 -79
  168. souleyez/parsers/http_fingerprint_parser.py +350 -103
  169. souleyez/parsers/hydra_parser.py +131 -111
  170. souleyez/parsers/impacket_parser.py +231 -178
  171. souleyez/parsers/john_parser.py +98 -86
  172. souleyez/parsers/katana_parser.py +316 -0
  173. souleyez/parsers/msf_parser.py +943 -498
  174. souleyez/parsers/nikto_parser.py +346 -65
  175. souleyez/parsers/nmap_parser.py +262 -174
  176. souleyez/parsers/nuclei_parser.py +40 -44
  177. souleyez/parsers/responder_parser.py +26 -26
  178. souleyez/parsers/searchsploit_parser.py +74 -74
  179. souleyez/parsers/service_explorer_parser.py +279 -0
  180. souleyez/parsers/smbmap_parser.py +180 -124
  181. souleyez/parsers/sqlmap_parser.py +434 -308
  182. souleyez/parsers/theharvester_parser.py +75 -57
  183. souleyez/parsers/whois_parser.py +135 -94
  184. souleyez/parsers/wpscan_parser.py +278 -190
  185. souleyez/plugins/afp.py +44 -36
  186. souleyez/plugins/afp_brute.py +114 -46
  187. souleyez/plugins/ard.py +48 -37
  188. souleyez/plugins/bloodhound.py +95 -61
  189. souleyez/plugins/certipy.py +303 -0
  190. souleyez/plugins/crackmapexec.py +186 -85
  191. souleyez/plugins/dalfox.py +120 -59
  192. souleyez/plugins/dns_hijack.py +146 -41
  193. souleyez/plugins/dnsrecon.py +97 -61
  194. souleyez/plugins/enum4linux.py +91 -66
  195. souleyez/plugins/evil_winrm.py +291 -0
  196. souleyez/plugins/ffuf.py +166 -90
  197. souleyez/plugins/firmware_extract.py +133 -29
  198. souleyez/plugins/gobuster.py +387 -190
  199. souleyez/plugins/gpp_extract.py +393 -0
  200. souleyez/plugins/hashcat.py +100 -73
  201. souleyez/plugins/http_fingerprint.py +854 -267
  202. souleyez/plugins/hydra.py +566 -200
  203. souleyez/plugins/impacket_getnpusers.py +117 -69
  204. souleyez/plugins/impacket_psexec.py +84 -64
  205. souleyez/plugins/impacket_secretsdump.py +103 -69
  206. souleyez/plugins/impacket_smbclient.py +89 -75
  207. souleyez/plugins/john.py +86 -69
  208. souleyez/plugins/katana.py +313 -0
  209. souleyez/plugins/kerbrute.py +237 -0
  210. souleyez/plugins/lfi_extract.py +541 -0
  211. souleyez/plugins/macos_ssh.py +117 -48
  212. souleyez/plugins/mdns.py +35 -30
  213. souleyez/plugins/msf_auxiliary.py +253 -130
  214. souleyez/plugins/msf_exploit.py +239 -161
  215. souleyez/plugins/nikto.py +134 -78
  216. souleyez/plugins/nmap.py +275 -91
  217. souleyez/plugins/nuclei.py +180 -89
  218. souleyez/plugins/nxc.py +285 -0
  219. souleyez/plugins/plugin_base.py +35 -36
  220. souleyez/plugins/plugin_template.py +13 -5
  221. souleyez/plugins/rdp_sec_check.py +130 -0
  222. souleyez/plugins/responder.py +112 -71
  223. souleyez/plugins/router_http_brute.py +76 -65
  224. souleyez/plugins/router_ssh_brute.py +118 -41
  225. souleyez/plugins/router_telnet_brute.py +124 -42
  226. souleyez/plugins/routersploit.py +91 -59
  227. souleyez/plugins/routersploit_exploit.py +77 -55
  228. souleyez/plugins/searchsploit.py +91 -77
  229. souleyez/plugins/service_explorer.py +1160 -0
  230. souleyez/plugins/smbmap.py +122 -72
  231. souleyez/plugins/smbpasswd.py +215 -0
  232. souleyez/plugins/sqlmap.py +301 -113
  233. souleyez/plugins/theharvester.py +127 -75
  234. souleyez/plugins/tr069.py +79 -57
  235. souleyez/plugins/upnp.py +65 -47
  236. souleyez/plugins/upnp_abuse.py +73 -55
  237. souleyez/plugins/vnc_access.py +129 -42
  238. souleyez/plugins/vnc_brute.py +109 -38
  239. souleyez/plugins/whois.py +77 -58
  240. souleyez/plugins/wpscan.py +173 -69
  241. souleyez/reporting/__init__.py +2 -1
  242. souleyez/reporting/attack_chain.py +411 -346
  243. souleyez/reporting/charts.py +436 -501
  244. souleyez/reporting/compliance_mappings.py +334 -201
  245. souleyez/reporting/detection_report.py +126 -125
  246. souleyez/reporting/formatters.py +828 -591
  247. souleyez/reporting/generator.py +386 -302
  248. souleyez/reporting/metrics.py +72 -75
  249. souleyez/scanner.py +35 -29
  250. souleyez/security/__init__.py +37 -11
  251. souleyez/security/scope_validator.py +175 -106
  252. souleyez/security/validation.py +223 -149
  253. souleyez/security.py +22 -6
  254. souleyez/storage/credentials.py +247 -186
  255. souleyez/storage/crypto.py +296 -129
  256. souleyez/storage/database.py +73 -50
  257. souleyez/storage/db.py +58 -36
  258. souleyez/storage/deliverable_evidence.py +177 -128
  259. souleyez/storage/deliverable_exporter.py +282 -246
  260. souleyez/storage/deliverable_templates.py +134 -116
  261. souleyez/storage/deliverables.py +135 -130
  262. souleyez/storage/engagements.py +109 -56
  263. souleyez/storage/evidence.py +181 -152
  264. souleyez/storage/execution_log.py +31 -17
  265. souleyez/storage/exploit_attempts.py +93 -57
  266. souleyez/storage/exploits.py +67 -36
  267. souleyez/storage/findings.py +48 -61
  268. souleyez/storage/hosts.py +176 -144
  269. souleyez/storage/migrate_to_engagements.py +43 -19
  270. souleyez/storage/migrations/_001_add_credential_enhancements.py +22 -12
  271. souleyez/storage/migrations/_002_add_status_tracking.py +10 -7
  272. souleyez/storage/migrations/_003_add_execution_log.py +14 -8
  273. souleyez/storage/migrations/_005_screenshots.py +13 -5
  274. souleyez/storage/migrations/_006_deliverables.py +13 -5
  275. souleyez/storage/migrations/_007_deliverable_templates.py +12 -7
  276. souleyez/storage/migrations/_008_add_nuclei_table.py +10 -4
  277. souleyez/storage/migrations/_010_evidence_linking.py +17 -10
  278. souleyez/storage/migrations/_011_timeline_tracking.py +20 -13
  279. souleyez/storage/migrations/_012_team_collaboration.py +34 -21
  280. souleyez/storage/migrations/_013_add_host_tags.py +12 -6
  281. souleyez/storage/migrations/_014_exploit_attempts.py +22 -10
  282. souleyez/storage/migrations/_015_add_mac_os_fields.py +15 -7
  283. souleyez/storage/migrations/_016_add_domain_field.py +10 -4
  284. souleyez/storage/migrations/_017_msf_sessions.py +16 -8
  285. souleyez/storage/migrations/_018_add_osint_target.py +10 -6
  286. souleyez/storage/migrations/_019_add_engagement_type.py +10 -6
  287. souleyez/storage/migrations/_020_add_rbac.py +36 -15
  288. souleyez/storage/migrations/_021_wazuh_integration.py +20 -8
  289. souleyez/storage/migrations/_022_wazuh_indexer_columns.py +6 -4
  290. souleyez/storage/migrations/_023_fix_detection_results_fk.py +16 -6
  291. souleyez/storage/migrations/_024_wazuh_vulnerabilities.py +26 -10
  292. souleyez/storage/migrations/_025_multi_siem_support.py +3 -5
  293. souleyez/storage/migrations/_026_add_engagement_scope.py +31 -12
  294. souleyez/storage/migrations/_027_multi_siem_persistence.py +32 -15
  295. souleyez/storage/migrations/__init__.py +26 -26
  296. souleyez/storage/migrations/migration_manager.py +19 -19
  297. souleyez/storage/msf_sessions.py +100 -65
  298. souleyez/storage/osint.py +17 -24
  299. souleyez/storage/recommendation_engine.py +269 -235
  300. souleyez/storage/screenshots.py +33 -32
  301. souleyez/storage/smb_shares.py +136 -92
  302. souleyez/storage/sqlmap_data.py +183 -128
  303. souleyez/storage/team_collaboration.py +135 -141
  304. souleyez/storage/timeline_tracker.py +122 -94
  305. souleyez/storage/wazuh_vulns.py +64 -66
  306. souleyez/storage/web_paths.py +33 -37
  307. souleyez/testing/credential_tester.py +221 -205
  308. souleyez/ui/__init__.py +1 -1
  309. souleyez/ui/ai_quotes.py +12 -12
  310. souleyez/ui/attack_surface.py +2439 -1516
  311. souleyez/ui/chain_rules_view.py +914 -382
  312. souleyez/ui/correlation_view.py +312 -230
  313. souleyez/ui/dashboard.py +2382 -1130
  314. souleyez/ui/deliverables_view.py +148 -62
  315. souleyez/ui/design_system.py +13 -13
  316. souleyez/ui/errors.py +49 -49
  317. souleyez/ui/evidence_linking_view.py +284 -179
  318. souleyez/ui/evidence_vault.py +393 -285
  319. souleyez/ui/exploit_suggestions_view.py +555 -349
  320. souleyez/ui/export_view.py +100 -66
  321. souleyez/ui/gap_analysis_view.py +315 -171
  322. souleyez/ui/help_system.py +105 -97
  323. souleyez/ui/intelligence_view.py +436 -293
  324. souleyez/ui/interactive.py +23142 -10430
  325. souleyez/ui/interactive_selector.py +75 -68
  326. souleyez/ui/log_formatter.py +47 -39
  327. souleyez/ui/menu_components.py +22 -13
  328. souleyez/ui/msf_auxiliary_menu.py +184 -133
  329. souleyez/ui/pending_chains_view.py +336 -172
  330. souleyez/ui/progress_indicators.py +5 -3
  331. souleyez/ui/recommendations_view.py +195 -137
  332. souleyez/ui/rule_builder.py +343 -225
  333. souleyez/ui/setup_wizard.py +678 -284
  334. souleyez/ui/shortcuts.py +217 -165
  335. souleyez/ui/splunk_gap_analysis_view.py +452 -270
  336. souleyez/ui/splunk_vulns_view.py +139 -86
  337. souleyez/ui/team_dashboard.py +498 -335
  338. souleyez/ui/template_selector.py +196 -105
  339. souleyez/ui/terminal.py +6 -6
  340. souleyez/ui/timeline_view.py +198 -127
  341. souleyez/ui/tool_setup.py +264 -164
  342. souleyez/ui/tutorial.py +202 -72
  343. souleyez/ui/tutorial_state.py +40 -40
  344. souleyez/ui/wazuh_vulns_view.py +235 -141
  345. souleyez/ui/wordlist_browser.py +260 -107
  346. souleyez/ui.py +464 -312
  347. souleyez/utils/tool_checker.py +427 -367
  348. souleyez/utils.py +33 -29
  349. souleyez/wordlists.py +134 -167
  350. {souleyez-2.43.28.dist-info → souleyez-2.43.32.dist-info}/METADATA +1 -1
  351. souleyez-2.43.32.dist-info/RECORD +441 -0
  352. {souleyez-2.43.28.dist-info → souleyez-2.43.32.dist-info}/WHEEL +1 -1
  353. souleyez-2.43.28.dist-info/RECORD +0 -379
  354. {souleyez-2.43.28.dist-info → souleyez-2.43.32.dist-info}/entry_points.txt +0 -0
  355. {souleyez-2.43.28.dist-info → souleyez-2.43.32.dist-info}/licenses/LICENSE +0 -0
  356. {souleyez-2.43.28.dist-info → souleyez-2.43.32.dist-info}/top_level.txt +0 -0
@@ -8,258 +8,391 @@ from typing import Dict, List, Set
8
8
 
9
9
  class ComplianceMappings:
10
10
  """Map findings to compliance frameworks."""
11
-
11
+
12
12
  def __init__(self):
13
13
  # OWASP Top 10 2021 keyword mappings
14
14
  self.owasp_mappings = {
15
- 'A01:2021': {
16
- 'name': 'Broken Access Control',
17
- 'keywords': [
18
- 'access control', 'authorization', 'privilege escalation',
19
- 'directory traversal', 'path traversal', 'file inclusion',
20
- 'idor', 'insecure direct object', 'force browsing',
21
- 'missing authorization', 'cors', 'elevation of privilege'
22
- ]
23
- },
24
- 'A02:2021': {
25
- 'name': 'Cryptographic Failures',
26
- 'keywords': [
27
- 'encryption', 'weak cipher', 'ssl', 'tls', 'https',
28
- 'cryptographic', 'weak hash', 'md5', 'sha1', 'des',
29
- 'plaintext', 'clear text', 'sensitive data', 'pii',
30
- 'password storage', 'weak encryption'
31
- ]
32
- },
33
- 'A03:2021': {
34
- 'name': 'Injection',
35
- 'keywords': [
36
- 'sql injection', 'sqli', 'command injection', 'ldap injection',
37
- 'xpath injection', 'xml injection', 'nosql injection',
38
- 'os command', 'code injection', 'script injection',
39
- 'blind sql', 'union select', 'shell injection'
40
- ]
41
- },
42
- 'A04:2021': {
43
- 'name': 'Insecure Design',
44
- 'keywords': [
45
- 'insecure design', 'threat modeling', 'design flaw',
46
- 'architecture', 'security pattern', 'secure by design',
47
- 'business logic', 'logic flaw'
48
- ]
49
- },
50
- 'A05:2021': {
51
- 'name': 'Security Misconfiguration',
52
- 'keywords': [
53
- 'misconfiguration', 'default', 'unnecessary feature',
54
- 'verbose error', 'stack trace', 'information disclosure',
55
- 'debug', 'unused', 'unpatched', 'outdated',
56
- 'directory listing', 'server banner', 'version disclosure'
57
- ]
58
- },
59
- 'A06:2021': {
60
- 'name': 'Vulnerable and Outdated Components',
61
- 'keywords': [
62
- 'outdated', 'vulnerable component', 'cve', 'known vulnerability',
63
- 'old version', 'unpatched', 'vulnerable library',
64
- 'dependency', 'third party', 'component'
65
- ]
66
- },
67
- 'A07:2021': {
68
- 'name': 'Identification and Authentication Failures',
69
- 'keywords': [
70
- 'authentication', 'weak password', 'credential',
71
- 'session', 'brute force', 'password policy',
72
- 'default credentials', 'session fixation', 'session hijack',
73
- 'login', 'authentication bypass', 'weak credentials'
74
- ]
75
- },
76
- 'A08:2021': {
77
- 'name': 'Software and Data Integrity Failures',
78
- 'keywords': [
79
- 'integrity', 'deserialization', 'untrusted data',
80
- 'pipeline', 'update', 'auto-update', 'insecure deserialization',
81
- 'code signing', 'tamper'
82
- ]
83
- },
84
- 'A09:2021': {
85
- 'name': 'Security Logging and Monitoring Failures',
86
- 'keywords': [
87
- 'logging', 'monitoring', 'audit', 'log',
88
- 'alerting', 'detection', 'incident response',
89
- 'insufficient logging', 'no logging'
90
- ]
91
- },
92
- 'A10:2021': {
93
- 'name': 'Server-Side Request Forgery (SSRF)',
94
- 'keywords': [
95
- 'ssrf', 'server-side request forgery', 'request forgery',
96
- 'internal network', 'localhost', 'metadata'
97
- ]
98
- }
15
+ "A01:2021": {
16
+ "name": "Broken Access Control",
17
+ "keywords": [
18
+ "access control",
19
+ "authorization",
20
+ "privilege escalation",
21
+ "directory traversal",
22
+ "path traversal",
23
+ "file inclusion",
24
+ "idor",
25
+ "insecure direct object",
26
+ "force browsing",
27
+ "missing authorization",
28
+ "cors",
29
+ "elevation of privilege",
30
+ ],
31
+ },
32
+ "A02:2021": {
33
+ "name": "Cryptographic Failures",
34
+ "keywords": [
35
+ "encryption",
36
+ "weak cipher",
37
+ "ssl",
38
+ "tls",
39
+ "https",
40
+ "cryptographic",
41
+ "weak hash",
42
+ "md5",
43
+ "sha1",
44
+ "des",
45
+ "plaintext",
46
+ "clear text",
47
+ "sensitive data",
48
+ "pii",
49
+ "password storage",
50
+ "weak encryption",
51
+ ],
52
+ },
53
+ "A03:2021": {
54
+ "name": "Injection",
55
+ "keywords": [
56
+ "sql injection",
57
+ "sqli",
58
+ "command injection",
59
+ "ldap injection",
60
+ "xpath injection",
61
+ "xml injection",
62
+ "nosql injection",
63
+ "os command",
64
+ "code injection",
65
+ "script injection",
66
+ "blind sql",
67
+ "union select",
68
+ "shell injection",
69
+ ],
70
+ },
71
+ "A04:2021": {
72
+ "name": "Insecure Design",
73
+ "keywords": [
74
+ "insecure design",
75
+ "threat modeling",
76
+ "design flaw",
77
+ "architecture",
78
+ "security pattern",
79
+ "secure by design",
80
+ "business logic",
81
+ "logic flaw",
82
+ ],
83
+ },
84
+ "A05:2021": {
85
+ "name": "Security Misconfiguration",
86
+ "keywords": [
87
+ "misconfiguration",
88
+ "default",
89
+ "unnecessary feature",
90
+ "verbose error",
91
+ "stack trace",
92
+ "information disclosure",
93
+ "debug",
94
+ "unused",
95
+ "unpatched",
96
+ "outdated",
97
+ "directory listing",
98
+ "server banner",
99
+ "version disclosure",
100
+ ],
101
+ },
102
+ "A06:2021": {
103
+ "name": "Vulnerable and Outdated Components",
104
+ "keywords": [
105
+ "outdated",
106
+ "vulnerable component",
107
+ "cve",
108
+ "known vulnerability",
109
+ "old version",
110
+ "unpatched",
111
+ "vulnerable library",
112
+ "dependency",
113
+ "third party",
114
+ "component",
115
+ ],
116
+ },
117
+ "A07:2021": {
118
+ "name": "Identification and Authentication Failures",
119
+ "keywords": [
120
+ "authentication",
121
+ "weak password",
122
+ "credential",
123
+ "session",
124
+ "brute force",
125
+ "password policy",
126
+ "default credentials",
127
+ "session fixation",
128
+ "session hijack",
129
+ "login",
130
+ "authentication bypass",
131
+ "weak credentials",
132
+ ],
133
+ },
134
+ "A08:2021": {
135
+ "name": "Software and Data Integrity Failures",
136
+ "keywords": [
137
+ "integrity",
138
+ "deserialization",
139
+ "untrusted data",
140
+ "pipeline",
141
+ "update",
142
+ "auto-update",
143
+ "insecure deserialization",
144
+ "code signing",
145
+ "tamper",
146
+ ],
147
+ },
148
+ "A09:2021": {
149
+ "name": "Security Logging and Monitoring Failures",
150
+ "keywords": [
151
+ "logging",
152
+ "monitoring",
153
+ "audit",
154
+ "log",
155
+ "alerting",
156
+ "detection",
157
+ "incident response",
158
+ "insufficient logging",
159
+ "no logging",
160
+ ],
161
+ },
162
+ "A10:2021": {
163
+ "name": "Server-Side Request Forgery (SSRF)",
164
+ "keywords": [
165
+ "ssrf",
166
+ "server-side request forgery",
167
+ "request forgery",
168
+ "internal network",
169
+ "localhost",
170
+ "metadata",
171
+ ],
172
+ },
99
173
  }
100
-
174
+
101
175
  # CWE Top 25 2024 mappings
102
176
  self.cwe_mappings = {
103
- 'CWE-89': {
104
- 'name': 'SQL Injection',
105
- 'keywords': ['sql injection', 'sqli', 'union select', 'blind sql']
106
- },
107
- 'CWE-79': {
108
- 'name': 'Cross-site Scripting (XSS)',
109
- 'keywords': ['xss', 'cross-site scripting', 'javascript injection', 'reflected xss', 'stored xss']
110
- },
111
- 'CWE-78': {
112
- 'name': 'OS Command Injection',
113
- 'keywords': ['command injection', 'os command', 'shell injection', 'rce']
114
- },
115
- 'CWE-22': {
116
- 'name': 'Path Traversal',
117
- 'keywords': ['path traversal', 'directory traversal', '../', 'file inclusion', 'lfi']
118
- },
119
- 'CWE-352': {
120
- 'name': 'Cross-Site Request Forgery (CSRF)',
121
- 'keywords': ['csrf', 'cross-site request forgery', 'xsrf']
122
- },
123
- 'CWE-434': {
124
- 'name': 'Unrestricted Upload of Dangerous File',
125
- 'keywords': ['file upload', 'upload vulnerability', 'unrestricted upload']
126
- },
127
- 'CWE-862': {
128
- 'name': 'Missing Authorization',
129
- 'keywords': ['missing authorization', 'authorization bypass', 'idor']
130
- },
131
- 'CWE-798': {
132
- 'name': 'Hard-coded Credentials',
133
- 'keywords': ['hardcoded', 'hard-coded', 'default credentials', 'embedded password']
134
- },
135
- 'CWE-287': {
136
- 'name': 'Improper Authentication',
137
- 'keywords': ['authentication bypass', 'weak authentication', 'broken auth']
138
- },
139
- 'CWE-190': {
140
- 'name': 'Integer Overflow',
141
- 'keywords': ['integer overflow', 'buffer overflow', 'overflow']
142
- },
143
- 'CWE-502': {
144
- 'name': 'Deserialization of Untrusted Data',
145
- 'keywords': ['deserialization', 'untrusted data', 'insecure deserialization']
146
- },
147
- 'CWE-611': {
148
- 'name': 'XML External Entity (XXE)',
149
- 'keywords': ['xxe', 'xml external entity', 'xml injection']
150
- },
151
- 'CWE-918': {
152
- 'name': 'Server-Side Request Forgery (SSRF)',
153
- 'keywords': ['ssrf', 'server-side request forgery']
154
- },
155
- 'CWE-94': {
156
- 'name': 'Code Injection',
157
- 'keywords': ['code injection', 'remote code execution', 'rce']
158
- },
159
- 'CWE-269': {
160
- 'name': 'Improper Privilege Management',
161
- 'keywords': ['privilege escalation', 'elevation of privilege', 'privilege management']
162
- },
163
- 'CWE-200': {
164
- 'name': 'Information Disclosure',
165
- 'keywords': ['information disclosure', 'sensitive data', 'data exposure', 'verbose error']
166
- },
167
- 'CWE-522': {
168
- 'name': 'Insufficiently Protected Credentials',
169
- 'keywords': ['weak password', 'password policy', 'credential protection']
170
- },
171
- 'CWE-306': {
172
- 'name': 'Missing Authentication',
173
- 'keywords': ['missing authentication', 'no authentication', 'unauthenticated']
174
- },
175
- 'CWE-319': {
176
- 'name': 'Cleartext Transmission of Sensitive Information',
177
- 'keywords': ['cleartext', 'plain text', 'unencrypted', 'http']
178
- },
179
- 'CWE-326': {
180
- 'name': 'Inadequate Encryption Strength',
181
- 'keywords': ['weak encryption', 'weak cipher', 'des', 'md5', 'sha1']
182
- }
177
+ "CWE-89": {
178
+ "name": "SQL Injection",
179
+ "keywords": ["sql injection", "sqli", "union select", "blind sql"],
180
+ },
181
+ "CWE-79": {
182
+ "name": "Cross-site Scripting (XSS)",
183
+ "keywords": [
184
+ "xss",
185
+ "cross-site scripting",
186
+ "javascript injection",
187
+ "reflected xss",
188
+ "stored xss",
189
+ ],
190
+ },
191
+ "CWE-78": {
192
+ "name": "OS Command Injection",
193
+ "keywords": [
194
+ "command injection",
195
+ "os command",
196
+ "shell injection",
197
+ "rce",
198
+ ],
199
+ },
200
+ "CWE-22": {
201
+ "name": "Path Traversal",
202
+ "keywords": [
203
+ "path traversal",
204
+ "directory traversal",
205
+ "../",
206
+ "file inclusion",
207
+ "lfi",
208
+ ],
209
+ },
210
+ "CWE-352": {
211
+ "name": "Cross-Site Request Forgery (CSRF)",
212
+ "keywords": ["csrf", "cross-site request forgery", "xsrf"],
213
+ },
214
+ "CWE-434": {
215
+ "name": "Unrestricted Upload of Dangerous File",
216
+ "keywords": [
217
+ "file upload",
218
+ "upload vulnerability",
219
+ "unrestricted upload",
220
+ ],
221
+ },
222
+ "CWE-862": {
223
+ "name": "Missing Authorization",
224
+ "keywords": ["missing authorization", "authorization bypass", "idor"],
225
+ },
226
+ "CWE-798": {
227
+ "name": "Hard-coded Credentials",
228
+ "keywords": [
229
+ "hardcoded",
230
+ "hard-coded",
231
+ "default credentials",
232
+ "embedded password",
233
+ ],
234
+ },
235
+ "CWE-287": {
236
+ "name": "Improper Authentication",
237
+ "keywords": [
238
+ "authentication bypass",
239
+ "weak authentication",
240
+ "broken auth",
241
+ ],
242
+ },
243
+ "CWE-190": {
244
+ "name": "Integer Overflow",
245
+ "keywords": ["integer overflow", "buffer overflow", "overflow"],
246
+ },
247
+ "CWE-502": {
248
+ "name": "Deserialization of Untrusted Data",
249
+ "keywords": [
250
+ "deserialization",
251
+ "untrusted data",
252
+ "insecure deserialization",
253
+ ],
254
+ },
255
+ "CWE-611": {
256
+ "name": "XML External Entity (XXE)",
257
+ "keywords": ["xxe", "xml external entity", "xml injection"],
258
+ },
259
+ "CWE-918": {
260
+ "name": "Server-Side Request Forgery (SSRF)",
261
+ "keywords": ["ssrf", "server-side request forgery"],
262
+ },
263
+ "CWE-94": {
264
+ "name": "Code Injection",
265
+ "keywords": ["code injection", "remote code execution", "rce"],
266
+ },
267
+ "CWE-269": {
268
+ "name": "Improper Privilege Management",
269
+ "keywords": [
270
+ "privilege escalation",
271
+ "elevation of privilege",
272
+ "privilege management",
273
+ ],
274
+ },
275
+ "CWE-200": {
276
+ "name": "Information Disclosure",
277
+ "keywords": [
278
+ "information disclosure",
279
+ "sensitive data",
280
+ "data exposure",
281
+ "verbose error",
282
+ ],
283
+ },
284
+ "CWE-522": {
285
+ "name": "Insufficiently Protected Credentials",
286
+ "keywords": [
287
+ "weak password",
288
+ "password policy",
289
+ "credential protection",
290
+ ],
291
+ },
292
+ "CWE-306": {
293
+ "name": "Missing Authentication",
294
+ "keywords": [
295
+ "missing authentication",
296
+ "no authentication",
297
+ "unauthenticated",
298
+ ],
299
+ },
300
+ "CWE-319": {
301
+ "name": "Cleartext Transmission of Sensitive Information",
302
+ "keywords": ["cleartext", "plain text", "unencrypted", "http"],
303
+ },
304
+ "CWE-326": {
305
+ "name": "Inadequate Encryption Strength",
306
+ "keywords": ["weak encryption", "weak cipher", "des", "md5", "sha1"],
307
+ },
183
308
  }
184
-
309
+
185
310
  def map_finding_to_owasp(self, finding: Dict) -> List[str]:
186
311
  """Map a finding to OWASP Top 10 2021 categories."""
187
312
  matches = []
188
-
313
+
189
314
  # Combine title, description, and tool for keyword matching
190
315
  search_text = (
191
316
  f"{finding.get('title', '')} "
192
317
  f"{finding.get('description', '')} "
193
318
  f"{finding.get('tool', '')}"
194
319
  ).lower()
195
-
320
+
196
321
  for owasp_id, owasp_data in self.owasp_mappings.items():
197
- for keyword in owasp_data['keywords']:
322
+ for keyword in owasp_data["keywords"]:
198
323
  if keyword.lower() in search_text:
199
324
  matches.append(owasp_id)
200
325
  break # Only match once per category
201
-
326
+
202
327
  return matches
203
-
328
+
204
329
  def map_finding_to_cwe(self, finding: Dict) -> List[str]:
205
330
  """Map a finding to CWE Top 25 categories."""
206
331
  matches = []
207
-
332
+
208
333
  # Check if finding already has CWE
209
- if finding.get('cwe'):
210
- existing_cwe = finding['cwe'].upper()
211
- if existing_cwe.startswith('CWE-'):
334
+ if finding.get("cwe"):
335
+ existing_cwe = finding["cwe"].upper()
336
+ if existing_cwe.startswith("CWE-"):
212
337
  matches.append(existing_cwe)
213
-
338
+
214
339
  # Combine title, description, and tool for keyword matching
215
340
  search_text = (
216
341
  f"{finding.get('title', '')} "
217
342
  f"{finding.get('description', '')} "
218
343
  f"{finding.get('tool', '')}"
219
344
  ).lower()
220
-
345
+
221
346
  for cwe_id, cwe_data in self.cwe_mappings.items():
222
347
  if cwe_id in matches:
223
348
  continue # Already have this CWE
224
-
225
- for keyword in cwe_data['keywords']:
349
+
350
+ for keyword in cwe_data["keywords"]:
226
351
  if keyword.lower() in search_text:
227
352
  matches.append(cwe_id)
228
353
  break # Only match once per category
229
-
354
+
230
355
  return matches
231
-
356
+
232
357
  def get_compliance_coverage(self, findings: List[Dict]) -> Dict:
233
358
  """Calculate compliance framework coverage."""
234
359
  owasp_covered = set()
235
360
  cwe_covered = set()
236
-
361
+
237
362
  for finding in findings:
238
363
  owasp_matches = self.map_finding_to_owasp(finding)
239
364
  cwe_matches = self.map_finding_to_cwe(finding)
240
-
365
+
241
366
  owasp_covered.update(owasp_matches)
242
367
  cwe_covered.update(cwe_matches)
243
-
368
+
244
369
  return {
245
- 'owasp': {
246
- 'covered': sorted(list(owasp_covered)),
247
- 'total': len(self.owasp_mappings),
248
- 'coverage_percent': round(len(owasp_covered) / len(self.owasp_mappings) * 100, 1),
249
- 'gaps': sorted([k for k in self.owasp_mappings.keys() if k not in owasp_covered])
250
- },
251
- 'cwe': {
252
- 'covered': sorted(list(cwe_covered)),
253
- 'total': len(self.cwe_mappings),
254
- 'coverage_percent': round(len(cwe_covered) / len(self.cwe_mappings) * 100, 1),
255
- 'gaps': sorted([k for k in self.cwe_mappings.keys() if k not in cwe_covered])
256
- }
370
+ "owasp": {
371
+ "covered": sorted(list(owasp_covered)),
372
+ "total": len(self.owasp_mappings),
373
+ "coverage_percent": round(
374
+ len(owasp_covered) / len(self.owasp_mappings) * 100, 1
375
+ ),
376
+ "gaps": sorted(
377
+ [k for k in self.owasp_mappings.keys() if k not in owasp_covered]
378
+ ),
379
+ },
380
+ "cwe": {
381
+ "covered": sorted(list(cwe_covered)),
382
+ "total": len(self.cwe_mappings),
383
+ "coverage_percent": round(
384
+ len(cwe_covered) / len(self.cwe_mappings) * 100, 1
385
+ ),
386
+ "gaps": sorted(
387
+ [k for k in self.cwe_mappings.keys() if k not in cwe_covered]
388
+ ),
389
+ },
257
390
  }
258
-
391
+
259
392
  def get_owasp_name(self, owasp_id: str) -> str:
260
393
  """Get full name for OWASP ID."""
261
- return self.owasp_mappings.get(owasp_id, {}).get('name', owasp_id)
262
-
394
+ return self.owasp_mappings.get(owasp_id, {}).get("name", owasp_id)
395
+
263
396
  def get_cwe_name(self, cwe_id: str) -> str:
264
397
  """Get full name for CWE ID."""
265
- return self.cwe_mappings.get(cwe_id, {}).get('name', cwe_id)
398
+ return self.cwe_mappings.get(cwe_id, {}).get("name", cwe_id)