tupaxpl 1.3.0__tar.gz

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 (358) hide show
  1. tupaxpl-1.3.0/LICENSE +123 -0
  2. tupaxpl-1.3.0/PKG-INFO +34 -0
  3. tupaxpl-1.3.0/README.md +129 -0
  4. tupaxpl-1.3.0/offsecforge/__init__.py +5 -0
  5. tupaxpl-1.3.0/offsecforge/acquisition/__init__.py +58 -0
  6. tupaxpl-1.3.0/offsecforge/acquisition/exploit_db.py +89 -0
  7. tupaxpl-1.3.0/offsecforge/acquisition/exploit_downloader.py +101 -0
  8. tupaxpl-1.3.0/offsecforge/acquisition/github_poc_finder.py +79 -0
  9. tupaxpl-1.3.0/offsecforge/acquisition/nvd_client.py +116 -0
  10. tupaxpl-1.3.0/offsecforge/adapters/__init__.py +7 -0
  11. tupaxpl-1.3.0/offsecforge/adapters/claude_skill_runner.py +157 -0
  12. tupaxpl-1.3.0/offsecforge/adapters/mikrotik_adapter.py +198 -0
  13. tupaxpl-1.3.0/offsecforge/adapters/printer_adapter.py +192 -0
  14. tupaxpl-1.3.0/offsecforge/adapters/quarry_engine.py +376 -0
  15. tupaxpl-1.3.0/offsecforge/adapters/stix_export.py +175 -0
  16. tupaxpl-1.3.0/offsecforge/adapters/suricata_ingest.py +195 -0
  17. tupaxpl-1.3.0/offsecforge/adapters/taxii_ingest.py +198 -0
  18. tupaxpl-1.3.0/offsecforge/agent/__init__.py +1 -0
  19. tupaxpl-1.3.0/offsecforge/agent/ooda_loop.py +199 -0
  20. tupaxpl-1.3.0/offsecforge/ai/__init__.py +1 -0
  21. tupaxpl-1.3.0/offsecforge/ai/code_gen.py +147 -0
  22. tupaxpl-1.3.0/offsecforge/ai/llm_core.py +292 -0
  23. tupaxpl-1.3.0/offsecforge/ai/prompt_library.py +158 -0
  24. tupaxpl-1.3.0/offsecforge/builders/__init__.py +1 -0
  25. tupaxpl-1.3.0/offsecforge/builders/exploit_builder.py +31 -0
  26. tupaxpl-1.3.0/offsecforge/builders/mitre_mapper.py +70 -0
  27. tupaxpl-1.3.0/offsecforge/builders/payload_builder.py +39 -0
  28. tupaxpl-1.3.0/offsecforge/builders/report_builder.py +154 -0
  29. tupaxpl-1.3.0/offsecforge/campaign/__init__.py +14 -0
  30. tupaxpl-1.3.0/offsecforge/campaign/ares_bridge.py +9 -0
  31. tupaxpl-1.3.0/offsecforge/campaign/engagement.py +11 -0
  32. tupaxpl-1.3.0/offsecforge/cloud/__init__.py +1 -0
  33. tupaxpl-1.3.0/offsecforge/cloud/stratus_bridge.py +124 -0
  34. tupaxpl-1.3.0/offsecforge/compilation/__init__.py +7 -0
  35. tupaxpl-1.3.0/offsecforge/compilation/exploit_compiler.py +124 -0
  36. tupaxpl-1.3.0/offsecforge/frameworks/__init__.py +190 -0
  37. tupaxpl-1.3.0/offsecforge/intel/__init__.py +1 -0
  38. tupaxpl-1.3.0/offsecforge/intel/cve_db/__init__.py +30 -0
  39. tupaxpl-1.3.0/offsecforge/intel/cve_db/catalog.py +631 -0
  40. tupaxpl-1.3.0/offsecforge/intel/cve_db/citrix_netscaler_cve_2026_series.json +59 -0
  41. tupaxpl-1.3.0/offsecforge/intel/cve_db/cve_2026_92392_curl_http2.json +34 -0
  42. tupaxpl-1.3.0/offsecforge/intel/cve_db/cve_2026_99999_pwnescape.json +78 -0
  43. tupaxpl-1.3.0/offsecforge/intel/cve_db/data/cve_catalog_stats.json +12 -0
  44. tupaxpl-1.3.0/offsecforge/intel/cve_db/ivanti_connect_secure_cve_2026_104935.json +39 -0
  45. tupaxpl-1.3.0/offsecforge/intel/cve_db/linux_kernel_xfs_cve_2026_64600.json +107 -0
  46. tupaxpl-1.3.0/offsecforge/intel/cve_db/linux_nftables_cve_2023_2024_series.json +69 -0
  47. tupaxpl-1.3.0/offsecforge/intel/cve_db/mikrotik_routeros_cve_2026.json +57 -0
  48. tupaxpl-1.3.0/offsecforge/intel/cve_db/pfsense_abraxas_series_2026.json +84 -0
  49. tupaxpl-1.3.0/offsecforge/intel/cve_feed.py +43 -0
  50. tupaxpl-1.3.0/offsecforge/intel/embedxpl_bridge.py +223 -0
  51. tupaxpl-1.3.0/offsecforge/intel/flowsint_bridge.py +255 -0
  52. tupaxpl-1.3.0/offsecforge/intel/identity_osint.py +347 -0
  53. tupaxpl-1.3.0/offsecforge/intel/lisa_bridge.py +246 -0
  54. tupaxpl-1.3.0/offsecforge/intel/osint_advanced.py +348 -0
  55. tupaxpl-1.3.0/offsecforge/intel/pe_bridge.py +172 -0
  56. tupaxpl-1.3.0/offsecforge/intel/pugdns_native.py +233 -0
  57. tupaxpl-1.3.0/offsecforge/intel/recon_chain.py +536 -0
  58. tupaxpl-1.3.0/offsecforge/intel/stix/__init__.py +0 -0
  59. tupaxpl-1.3.0/offsecforge/intel/stix/conftest.py +44 -0
  60. tupaxpl-1.3.0/offsecforge/intel/stix/logger.py +62 -0
  61. tupaxpl-1.3.0/offsecforge/intel/stix/stix_create.py +47 -0
  62. tupaxpl-1.3.0/offsecforge/intel/stix/stix_create_v2.py +279 -0
  63. tupaxpl-1.3.0/offsecforge/intel/stix/stix_item.py +46 -0
  64. tupaxpl-1.3.0/offsecforge/intel/stix/stixv1.py +259 -0
  65. tupaxpl-1.3.0/offsecforge/intel/stix/test_stix_create.py +172 -0
  66. tupaxpl-1.3.0/offsecforge/intel/stix/test_stix_create_v2.py +343 -0
  67. tupaxpl-1.3.0/offsecforge/intel/taxii/__init__.py +0 -0
  68. tupaxpl-1.3.0/offsecforge/intel/taxii/auth_service.py +82 -0
  69. tupaxpl-1.3.0/offsecforge/intel/taxii/base.py +47 -0
  70. tupaxpl-1.3.0/offsecforge/intel/taxii/conf.py +177 -0
  71. tupaxpl-1.3.0/offsecforge/intel/taxii/mongodb_auth.py +56 -0
  72. tupaxpl-1.3.0/offsecforge/intel/tool_registry.py +233 -0
  73. tupaxpl-1.3.0/offsecforge/intel/upx_recovery_bridge.py +167 -0
  74. tupaxpl-1.3.0/offsecforge/intel/vulnhub/__init__.py +27 -0
  75. tupaxpl-1.3.0/offsecforge/intel/vulnhub/catalog.py +601 -0
  76. tupaxpl-1.3.0/offsecforge/intel/vulnhub/data/vulnhub_catalog.json +15491 -0
  77. tupaxpl-1.3.0/offsecforge/intel/xpl_forge_bridges.py +147 -0
  78. tupaxpl-1.3.0/offsecforge/intelligence/blitzstrike_engine.py +315 -0
  79. tupaxpl-1.3.0/offsecforge/intelligence/cve_feed_monitor.py +172 -0
  80. tupaxpl-1.3.0/offsecforge/intelligence/geo_osint.py +157 -0
  81. tupaxpl-1.3.0/offsecforge/kill_chain/c2/__init__.py +1 -0
  82. tupaxpl-1.3.0/offsecforge/kill_chain/collection/__init__.py +1 -0
  83. tupaxpl-1.3.0/offsecforge/kill_chain/credential_access/__init__.py +1 -0
  84. tupaxpl-1.3.0/offsecforge/kill_chain/discovery/__init__.py +1 -0
  85. tupaxpl-1.3.0/offsecforge/kill_chain/execution/__init__.py +1 -0
  86. tupaxpl-1.3.0/offsecforge/kill_chain/exfiltration/__init__.py +1 -0
  87. tupaxpl-1.3.0/offsecforge/kill_chain/initial_access/__init__.py +1 -0
  88. tupaxpl-1.3.0/offsecforge/kill_chain/initial_access/web_exploits.py +182 -0
  89. tupaxpl-1.3.0/offsecforge/kill_chain/lateral_movement/__init__.py +1 -0
  90. tupaxpl-1.3.0/offsecforge/kill_chain/lateral_movement/pth_ptt.py +191 -0
  91. tupaxpl-1.3.0/offsecforge/kill_chain/persistence/__init__.py +1 -0
  92. tupaxpl-1.3.0/offsecforge/kill_chain/persistence/windows_persist.py +99 -0
  93. tupaxpl-1.3.0/offsecforge/kill_chain/privilege_esc/__init__.py +1 -0
  94. tupaxpl-1.3.0/offsecforge/kill_chain/privilege_esc/windows_privesc.py +166 -0
  95. tupaxpl-1.3.0/offsecforge/kill_chain/recon/__init__.py +1 -0
  96. tupaxpl-1.3.0/offsecforge/kill_chain/recon/passive_recon.py +200 -0
  97. tupaxpl-1.3.0/offsecforge/kill_chain/templates/malware_research/apt28_fancy_bear.yaml +77 -0
  98. tupaxpl-1.3.0/offsecforge/kill_chain/templates/malware_research/lazarus_fastcash.yaml +86 -0
  99. tupaxpl-1.3.0/offsecforge/kill_chain/templates/malware_research/solarwinds_supply_chain.yaml +98 -0
  100. tupaxpl-1.3.0/offsecforge/kill_chain/templates/malware_research/triton_ics.yaml +91 -0
  101. tupaxpl-1.3.0/offsecforge/lab/__init__.py +1 -0
  102. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/__init__.py +6 -0
  103. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/__init__.py +1 -0
  104. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/dlink-hnap-mock/__init__.py +1 -0
  105. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/dlink-hnap-mock/app.py +100 -0
  106. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/printer-hp-mock/__init__.py +1 -0
  107. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/printer-hp-mock/app.py +171 -0
  108. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/rtsp-simple/__init__.py +1 -0
  109. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/rtsp-simple/app.py +44 -0
  110. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/smarttv-bravia-mock/__init__.py +1 -0
  111. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/smarttv-bravia-mock/app.py +321 -0
  112. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/uniview-mock/__init__.py +1 -0
  113. tupaxpl-1.3.0/offsecforge/lab/iot_vuln_lab/targets/uniview-mock/app.py +93 -0
  114. tupaxpl-1.3.0/offsecforge/mobile/__init__.py +1 -0
  115. tupaxpl-1.3.0/offsecforge/modules/__init__.py +1 -0
  116. tupaxpl-1.3.0/offsecforge/modules/ad/domain_root_permissions.py +240 -0
  117. tupaxpl-1.3.0/offsecforge/modules/ad_autopwn.py +672 -0
  118. tupaxpl-1.3.0/offsecforge/modules/ad_autopwn_bridge.py +10 -0
  119. tupaxpl-1.3.0/offsecforge/modules/ad_forensics.py +203 -0
  120. tupaxpl-1.3.0/offsecforge/modules/c2/__init__.py +7 -0
  121. tupaxpl-1.3.0/offsecforge/modules/c2/covert_channels.py +1923 -0
  122. tupaxpl-1.3.0/offsecforge/modules/c2/crypto.py +778 -0
  123. tupaxpl-1.3.0/offsecforge/modules/c2/exploit_bridge.py +997 -0
  124. tupaxpl-1.3.0/offsecforge/modules/c2/implant.py +1479 -0
  125. tupaxpl-1.3.0/offsecforge/modules/c2/persistence.py +1229 -0
  126. tupaxpl-1.3.0/offsecforge/modules/c2/persistence_windows.py +1581 -0
  127. tupaxpl-1.3.0/offsecforge/modules/c2/server.py +1432 -0
  128. tupaxpl-1.3.0/offsecforge/modules/c2/session_hooks.py +1535 -0
  129. tupaxpl-1.3.0/offsecforge/modules/campaign/__init__.py +1 -0
  130. tupaxpl-1.3.0/offsecforge/modules/campaign/forge_campaign.py +182 -0
  131. tupaxpl-1.3.0/offsecforge/modules/cve/__init__.py +26 -0
  132. tupaxpl-1.3.0/offsecforge/modules/cve/citrix/__init__.py +1 -0
  133. tupaxpl-1.3.0/offsecforge/modules/cve/citrix/citrix_netscaler_citrixbleed2_cve_2025_5777.py +73 -0
  134. tupaxpl-1.3.0/offsecforge/modules/cve/citrix/citrix_netscaler_saml_rce_cve_2026_8452.py +182 -0
  135. tupaxpl-1.3.0/offsecforge/modules/cve/fortinet/__init__.py +1 -0
  136. tupaxpl-1.3.0/offsecforge/modules/cve/fortinet/fortinet_saml_bypass_cve_2025_59718.py +68 -0
  137. tupaxpl-1.3.0/offsecforge/modules/cve/ivanti/__init__.py +0 -0
  138. tupaxpl-1.3.0/offsecforge/modules/cve/ivanti/ivanti_connect_secure_auth_bypass_cve_2026_104935.py +197 -0
  139. tupaxpl-1.3.0/offsecforge/modules/cve/linux_kernel/__init__.py +0 -0
  140. tupaxpl-1.3.0/offsecforge/modules/cve/linux_kernel/linux_refluxfs_lpe_cve_2026_64600.py +204 -0
  141. tupaxpl-1.3.0/offsecforge/modules/cve/ubiquiti/__init__.py +1 -0
  142. tupaxpl-1.3.0/offsecforge/modules/cve/ubiquiti/ubiquiti_unifi_cve_2026_22557.py +82 -0
  143. tupaxpl-1.3.0/offsecforge/modules/exploit/byovd_driver_hunt.py +355 -0
  144. tupaxpl-1.3.0/offsecforge/modules/exploit/dom_xss_engine.py +74 -0
  145. tupaxpl-1.3.0/offsecforge/modules/exploit/jwt_algorithm_confusion_bypass.py +73 -0
  146. tupaxpl-1.3.0/offsecforge/modules/exploit/linux_kvm_arm64_escape_cve_2026_89775.py +288 -0
  147. tupaxpl-1.3.0/offsecforge/modules/exploit/linux_pwnescape_vm_escape_cve_2026_99999.py +714 -0
  148. tupaxpl-1.3.0/offsecforge/modules/exploit/postgresql_fuzzystrmatch_oob_cve_2026_15742.py +46 -0
  149. tupaxpl-1.3.0/offsecforge/modules/exploit/roundcube_sqli_preauth_cve_2026_48842.py +48 -0
  150. tupaxpl-1.3.0/offsecforge/modules/exploit/vcenter_srp_auth_bypass_cve_2026_59309.py +336 -0
  151. tupaxpl-1.3.0/offsecforge/modules/exploit/vcenter_syslog_traversal_cve_2026_59310.py +277 -0
  152. tupaxpl-1.3.0/offsecforge/modules/exploit/windows_dangling_com_lpe_cve_2026_66804.py +301 -0
  153. tupaxpl-1.3.0/offsecforge/modules/exploit/windows_wmi_lpe_cve_2026_42980.py +276 -0
  154. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-12227_poc.py +658 -0
  155. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-13355_poc.py +1198 -0
  156. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-14281_poc.py +637 -0
  157. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-19658_poc.py +862 -0
  158. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-6433_poc.py +237 -0
  159. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-8181_poc.py +703 -0
  160. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-89055_poc.py +588 -0
  161. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_murrez_batch/CVE-2026-92229_poc.py +828 -0
  162. tupaxpl-1.3.0/offsecforge/modules/exploit/wordpress_php_template_traversal_cve_2026_87902.py +46 -0
  163. tupaxpl-1.3.0/offsecforge/modules/hunt/__init__.py +1 -0
  164. tupaxpl-1.3.0/offsecforge/modules/hunt/forge_hunt.py +195 -0
  165. tupaxpl-1.3.0/offsecforge/modules/ics_ot/__init__.py +1 -0
  166. tupaxpl-1.3.0/offsecforge/modules/ics_ot/stuxnet/__init__.py +1 -0
  167. tupaxpl-1.3.0/offsecforge/modules/ics_ot/stuxnet/rootkit_analysis.py +168 -0
  168. tupaxpl-1.3.0/offsecforge/modules/intel/siem_attacks/grafana_exploit_suite.py +155 -0
  169. tupaxpl-1.3.0/offsecforge/modules/intel/siem_attacks/splunk_rce_suite.py +140 -0
  170. tupaxpl-1.3.0/offsecforge/modules/iot/__init__.py +1 -0
  171. tupaxpl-1.3.0/offsecforge/modules/iot/huawei/__init__.py +1 -0
  172. tupaxpl-1.3.0/offsecforge/modules/iot/mikrotik/__init__.py +1 -0
  173. tupaxpl-1.3.0/offsecforge/modules/iot/mikrotik/harden_chr.py +257 -0
  174. tupaxpl-1.3.0/offsecforge/modules/iot/mikrotik/run_security_suite.py +555 -0
  175. tupaxpl-1.3.0/offsecforge/modules/iot/mikrotik/setup_users_groups.py +163 -0
  176. tupaxpl-1.3.0/offsecforge/modules/mobile/__init__.py +0 -0
  177. tupaxpl-1.3.0/offsecforge/modules/mobile/android_contacts_sqli_cve_2026_28576.py +223 -0
  178. tupaxpl-1.3.0/offsecforge/modules/post_exploitation/silph_credential_dump.py +844 -0
  179. tupaxpl-1.3.0/offsecforge/modules/post_exploitation/vmkatz_credential_extract.py +273 -0
  180. tupaxpl-1.3.0/offsecforge/modules/re/__init__.py +1 -0
  181. tupaxpl-1.3.0/offsecforge/modules/re/frida/__init__.py +1 -0
  182. tupaxpl-1.3.0/offsecforge/modules/re/frida/bypass_patches.py +369 -0
  183. tupaxpl-1.3.0/offsecforge/modules/re/frida/emudesk_patcher.py +169 -0
  184. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_arc_fix.py +153 -0
  185. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_bypass.py +282 -0
  186. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_clean_bypass.py +146 -0
  187. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_combined_final.py +155 -0
  188. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_corrected.py +169 -0
  189. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_final_bypass.py +144 -0
  190. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_ipc_logger.py +200 -0
  191. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_js_inject.py +220 -0
  192. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_quickattach.py +156 -0
  193. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_resp_override.py +164 -0
  194. tupaxpl-1.3.0/offsecforge/modules/re/frida/frida_spawn_bypass.py +228 -0
  195. tupaxpl-1.3.0/offsecforge/modules/re/pe_analysis/__init__.py +1 -0
  196. tupaxpl-1.3.0/offsecforge/modules/sessions/__init__.py +1 -0
  197. tupaxpl-1.3.0/offsecforge/modules/sessions/session_hub.py +157 -0
  198. tupaxpl-1.3.0/offsecforge/modules/sessions/sessions_cmd.py +107 -0
  199. tupaxpl-1.3.0/offsecforge/modules/vaultwarden_audit.py +258 -0
  200. tupaxpl-1.3.0/offsecforge/modules/webapp/__init__.py +1 -0
  201. tupaxpl-1.3.0/offsecforge/modules/webapp/intercept_apis.py +253 -0
  202. tupaxpl-1.3.0/offsecforge/modules/webapp/nextjs_api_scan.py +277 -0
  203. tupaxpl-1.3.0/offsecforge/modules/webapp/smartfit_owasp_tests.py +1116 -0
  204. tupaxpl-1.3.0/offsecforge/modules/webapp/test_exposed_apis.py +258 -0
  205. tupaxpl-1.3.0/offsecforge/modules/webapp/validate_findings.py +95 -0
  206. tupaxpl-1.3.0/offsecforge/modules/webapp_audit.py +403 -0
  207. tupaxpl-1.3.0/offsecforge/modules/wireless/__init__.py +1 -0
  208. tupaxpl-1.3.0/offsecforge/modules/wireless/validate_wxf_modules.py +75 -0
  209. tupaxpl-1.3.0/offsecforge/output/__init__.py +1 -0
  210. tupaxpl-1.3.0/offsecforge/pentestgpt/__init__.py +1 -0
  211. tupaxpl-1.3.0/offsecforge/pentestgpt/pentestgpt_engine.py +198 -0
  212. tupaxpl-1.3.0/offsecforge/py.typed +0 -0
  213. tupaxpl-1.3.0/offsecforge/recon/bounty_pipeline.py +214 -0
  214. tupaxpl-1.3.0/offsecforge/research/external_tools_registry.py +179 -0
  215. tupaxpl-1.3.0/offsecforge/research/poc_index_feed.py +124 -0
  216. tupaxpl-1.3.0/offsecforge/resources/__init__.py +1 -0
  217. tupaxpl-1.3.0/offsecforge/resources/credentials/__init__.py +1 -0
  218. tupaxpl-1.3.0/offsecforge/resources/wordlists/__init__.py +1 -0
  219. tupaxpl-1.3.0/offsecforge/social_engineering/__init__.py +1 -0
  220. tupaxpl-1.3.0/offsecforge/social_engineering/phishing/__init__.py +5 -0
  221. tupaxpl-1.3.0/offsecforge/social_engineering/phishing/tengu_bridge.py +306 -0
  222. tupaxpl-1.3.0/offsecforge/social_engineering/voice/__init__.py +10 -0
  223. tupaxpl-1.3.0/offsecforge/social_engineering/voice/voicestudio_bridge.py +152 -0
  224. tupaxpl-1.3.0/offsecforge/social_engineering/voice/voxcpm_bridge.py +169 -0
  225. tupaxpl-1.3.0/offsecforge/testing/atomic_red_runner.py +115 -0
  226. tupaxpl-1.3.0/offsecforge/tools/entropia_compiler.py +257 -0
  227. tupaxpl-1.3.0/offsecforge/tools/evasion_test.py +104 -0
  228. tupaxpl-1.3.0/offsecforge/wordlists/wordlist_generator.py +254 -0
  229. tupaxpl-1.3.0/pentest_engine/__init__.py +6 -0
  230. tupaxpl-1.3.0/pentest_engine/__main__.py +633 -0
  231. tupaxpl-1.3.0/pentest_engine/api/__init__.py +7 -0
  232. tupaxpl-1.3.0/pentest_engine/api/app.py +362 -0
  233. tupaxpl-1.3.0/pentest_engine/api/auth.py +52 -0
  234. tupaxpl-1.3.0/pentest_engine/api/chat_service.py +153 -0
  235. tupaxpl-1.3.0/pentest_engine/api/limits.py +42 -0
  236. tupaxpl-1.3.0/pentest_engine/api/runs.py +38 -0
  237. tupaxpl-1.3.0/pentest_engine/api/schemas.py +131 -0
  238. tupaxpl-1.3.0/pentest_engine/api_smoke.py +216 -0
  239. tupaxpl-1.3.0/pentest_engine/audit.py +53 -0
  240. tupaxpl-1.3.0/pentest_engine/campaign/__init__.py +90 -0
  241. tupaxpl-1.3.0/pentest_engine/campaign/ares_bridge.py +15 -0
  242. tupaxpl-1.3.0/pentest_engine/campaign/engagement.py +267 -0
  243. tupaxpl-1.3.0/pentest_engine/capabilities.py +48 -0
  244. tupaxpl-1.3.0/pentest_engine/config.py +186 -0
  245. tupaxpl-1.3.0/pentest_engine/core/__init__.py +1 -0
  246. tupaxpl-1.3.0/pentest_engine/core/bitnet_backend.py +417 -0
  247. tupaxpl-1.3.0/pentest_engine/core/extraction.py +100 -0
  248. tupaxpl-1.3.0/pentest_engine/core/llm_config.py +239 -0
  249. tupaxpl-1.3.0/pentest_engine/core/ollama_client.py +496 -0
  250. tupaxpl-1.3.0/pentest_engine/core/scoring.py +53 -0
  251. tupaxpl-1.3.0/pentest_engine/errors.py +38 -0
  252. tupaxpl-1.3.0/pentest_engine/graph/__init__.py +16 -0
  253. tupaxpl-1.3.0/pentest_engine/graph/adapters.py +142 -0
  254. tupaxpl-1.3.0/pentest_engine/graph/builder.py +79 -0
  255. tupaxpl-1.3.0/pentest_engine/graph/nodes.py +618 -0
  256. tupaxpl-1.3.0/pentest_engine/graph/roles.py +168 -0
  257. tupaxpl-1.3.0/pentest_engine/graph/runner.py +105 -0
  258. tupaxpl-1.3.0/pentest_engine/graph/scenarios.py +84 -0
  259. tupaxpl-1.3.0/pentest_engine/graph/state.py +193 -0
  260. tupaxpl-1.3.0/pentest_engine/interface/__init__.py +1 -0
  261. tupaxpl-1.3.0/pentest_engine/interface/terminal.py +258 -0
  262. tupaxpl-1.3.0/pentest_engine/knowledge/__init__.py +7 -0
  263. tupaxpl-1.3.0/pentest_engine/knowledge/attack.py +80 -0
  264. tupaxpl-1.3.0/pentest_engine/knowledge/bm25.py +120 -0
  265. tupaxpl-1.3.0/pentest_engine/knowledge/chroma_store.py +190 -0
  266. tupaxpl-1.3.0/pentest_engine/knowledge/documents.py +79 -0
  267. tupaxpl-1.3.0/pentest_engine/knowledge/embeddings.py +82 -0
  268. tupaxpl-1.3.0/pentest_engine/knowledge/index_builder.py +72 -0
  269. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/__init__.py +7 -0
  270. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/atomic.py +150 -0
  271. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/base.py +89 -0
  272. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/bug_hunt.py +111 -0
  273. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/evtx_meta.py +104 -0
  274. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/harpia.py +198 -0
  275. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/kev.py +87 -0
  276. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/legacy_ast.py +135 -0
  277. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/mitre.py +86 -0
  278. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/nuclei.py +151 -0
  279. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/nvd.py +38 -0
  280. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/red_team_battery.py +131 -0
  281. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/registry.py +125 -0
  282. tupaxpl-1.3.0/pentest_engine/knowledge/ingest/sigma.py +139 -0
  283. tupaxpl-1.3.0/pentest_engine/knowledge/malware_research_ingest.py +149 -0
  284. tupaxpl-1.3.0/pentest_engine/knowledge/models.py +113 -0
  285. tupaxpl-1.3.0/pentest_engine/knowledge/retrieval.py +277 -0
  286. tupaxpl-1.3.0/pentest_engine/knowledge/stix_ingest.py +316 -0
  287. tupaxpl-1.3.0/pentest_engine/knowledge/store.py +115 -0
  288. tupaxpl-1.3.0/pentest_engine/models.py +148 -0
  289. tupaxpl-1.3.0/pentest_engine/policy.py +118 -0
  290. tupaxpl-1.3.0/pentest_engine/py.typed +0 -0
  291. tupaxpl-1.3.0/pentest_engine/rag_smoke.py +139 -0
  292. tupaxpl-1.3.0/pentest_engine/re_smoke.py +313 -0
  293. tupaxpl-1.3.0/pentest_engine/retrieval_smoke.py +132 -0
  294. tupaxpl-1.3.0/pentest_engine/security.py +54 -0
  295. tupaxpl-1.3.0/pentest_engine/session.py +239 -0
  296. tupaxpl-1.3.0/pentest_engine/smoke.py +243 -0
  297. tupaxpl-1.3.0/pentest_engine/tools/__init__.py +1 -0
  298. tupaxpl-1.3.0/pentest_engine/tools/artifact_paths.py +63 -0
  299. tupaxpl-1.3.0/pentest_engine/tools/atomic_dryrun.py +221 -0
  300. tupaxpl-1.3.0/pentest_engine/tools/atomic_runner.py +106 -0
  301. tupaxpl-1.3.0/pentest_engine/tools/binwalk_helper.py +162 -0
  302. tupaxpl-1.3.0/pentest_engine/tools/caldera_client.py +47 -0
  303. tupaxpl-1.3.0/pentest_engine/tools/compiler.py +109 -0
  304. tupaxpl-1.3.0/pentest_engine/tools/evtx_analyzer.py +188 -0
  305. tupaxpl-1.3.0/pentest_engine/tools/gateway.py +240 -0
  306. tupaxpl-1.3.0/pentest_engine/tools/ghidra_helper.py +176 -0
  307. tupaxpl-1.3.0/pentest_engine/tools/legacy_adapter.py +60 -0
  308. tupaxpl-1.3.0/pentest_engine/tools/nuclei_runner.py +179 -0
  309. tupaxpl-1.3.0/pentest_engine/tools/radare2_helper.py +113 -0
  310. tupaxpl-1.3.0/pentest_engine/tools/raidstorm_client.py +141 -0
  311. tupaxpl-1.3.0/pentest_engine/tools/sandbox.py +317 -0
  312. tupaxpl-1.3.0/pentest_engine/tools/sigma_catalog.py +176 -0
  313. tupaxpl-1.3.0/pentest_engine/tools/strings_helper.py +86 -0
  314. tupaxpl-1.3.0/pentest_engine/tools/subprocess_safe.py +157 -0
  315. tupaxpl-1.3.0/pentest_engine/tools/xplforge_bridge.py +116 -0
  316. tupaxpl-1.3.0/pentest_engine/tools_smoke.py +212 -0
  317. tupaxpl-1.3.0/pentest_engine/training/__init__.py +22 -0
  318. tupaxpl-1.3.0/pentest_engine/training/baseline.py +198 -0
  319. tupaxpl-1.3.0/pentest_engine/training/dataset_builder.py +450 -0
  320. tupaxpl-1.3.0/pentest_engine/training/ollama_import.py +86 -0
  321. tupaxpl-1.3.0/pentest_engine/training/peft_runner.py +311 -0
  322. tupaxpl-1.3.0/pentest_engine/training/release_gate.py +56 -0
  323. tupaxpl-1.3.0/pentest_engine/training/resource_gate.py +191 -0
  324. tupaxpl-1.3.0/pentest_engine/training/schema.py +192 -0
  325. tupaxpl-1.3.0/pentest_engine/training/train_job.py +102 -0
  326. tupaxpl-1.3.0/pentest_engine/training_smoke.py +177 -0
  327. tupaxpl-1.3.0/pyproject.toml +173 -0
  328. tupaxpl-1.3.0/setup.cfg +4 -0
  329. tupaxpl-1.3.0/tests/test_basic.py +36 -0
  330. tupaxpl-1.3.0/tests/test_config.py +84 -0
  331. tupaxpl-1.3.0/tests/test_coverage_gate2.py +163 -0
  332. tupaxpl-1.3.0/tests/test_entrypoints.py +39 -0
  333. tupaxpl-1.3.0/tests/test_errors.py +64 -0
  334. tupaxpl-1.3.0/tests/test_integration.py +95 -0
  335. tupaxpl-1.3.0/tests/test_manifest.py +29 -0
  336. tupaxpl-1.3.0/tests/test_models.py +102 -0
  337. tupaxpl-1.3.0/tests/test_policy.py +100 -0
  338. tupaxpl-1.3.0/tests/test_reporting.py +116 -0
  339. tupaxpl-1.3.0/tests/test_session_hub.py +141 -0
  340. tupaxpl-1.3.0/tests/test_structure.py +34 -0
  341. tupaxpl-1.3.0/tests/test_version.py +28 -0
  342. tupaxpl-1.3.0/tools/__init__.py +1 -0
  343. tupaxpl-1.3.0/tools/contract_mapper.py +163 -0
  344. tupaxpl-1.3.0/tools/exploitgym_benchmark.py +149 -0
  345. tupaxpl-1.3.0/tools/llm_benchmark.py +168 -0
  346. tupaxpl-1.3.0/tupaxpl/__init__.py +3 -0
  347. tupaxpl-1.3.0/tupaxpl/__main__.py +4 -0
  348. tupaxpl-1.3.0/tupaxpl/py.typed +0 -0
  349. tupaxpl-1.3.0/tupaxpl/reporting/__init__.py +16 -0
  350. tupaxpl-1.3.0/tupaxpl/reporting/generator.py +182 -0
  351. tupaxpl-1.3.0/tupaxpl/run.py +70 -0
  352. tupaxpl-1.3.0/tupaxpl/session_hub.py +212 -0
  353. tupaxpl-1.3.0/tupaxpl.egg-info/PKG-INFO +34 -0
  354. tupaxpl-1.3.0/tupaxpl.egg-info/SOURCES.txt +356 -0
  355. tupaxpl-1.3.0/tupaxpl.egg-info/dependency_links.txt +1 -0
  356. tupaxpl-1.3.0/tupaxpl.egg-info/entry_points.txt +3 -0
  357. tupaxpl-1.3.0/tupaxpl.egg-info/requires.txt +13 -0
  358. tupaxpl-1.3.0/tupaxpl.egg-info/top_level.txt +4 -0
tupaxpl-1.3.0/LICENSE ADDED
@@ -0,0 +1,123 @@
1
+ # XPL-Suite Security Research License (XSRL) v1.0
2
+
3
+ Copyright (c) 2024-2026 Andre Henrike de Oliveira (@mrhenrike) / Uniao Geek
4
+ All rights reserved.
5
+
6
+ ## 1. Definitions
7
+
8
+ - "Software" means the source code, documentation, binaries, scripts, configuration
9
+ files, and any other materials included in this repository.
10
+ - "Author" means the original copyright holder: Andre Henrike de Oliveira (@mrhenrike).
11
+ - "Original Repository" means the source repository hosted at
12
+ https://github.com/mrhenrike/TupaXPL-Forge from which the Software originates.
13
+ - "Upstream Credits" means the authors and licenses of third-party components,
14
+ libraries, or code referenced in the Software, as documented in source file headers,
15
+ CREDITS files, or README attribution sections.
16
+ - "Authorized Security Testing" means penetration testing, vulnerability assessment,
17
+ red team exercises, purple team exercises, security auditing, or similar activities
18
+ conducted with explicit written permission from the owner of the target system(s).
19
+
20
+ ## 2. Grant of Rights
21
+
22
+ Subject to the terms and conditions of this License, the Author grants you a
23
+ non-exclusive, worldwide, royalty-free license to:
24
+
25
+ a) **Use** the Software for educational purposes, academic research, security studies,
26
+ and Authorized Security Testing;
27
+ b) **Copy and reproduce** the Software;
28
+ c) **Modify** the Software and create derivative works;
29
+ d) **Fork** the Software and maintain independent copies;
30
+ e) **Distribute** the Software and derivative works, provided all conditions in
31
+ Section 3 are met.
32
+
33
+ ## 3. Conditions
34
+
35
+ Any use, copy, modification, fork, or distribution of the Software must comply with
36
+ ALL of the following conditions:
37
+
38
+ ### 3.1 Attribution
39
+
40
+ a) You must retain the Author's original copyright notice and attribution in all
41
+ copies and derivative works.
42
+ b) You must retain all Upstream Credits, including but not limited to: original author
43
+ names, license notices, and attribution statements of third-party code used as a
44
+ base or reference for the Software.
45
+ c) Modified files must carry a prominent notice stating that you changed the files and
46
+ the date of any change.
47
+ d) Derivative works must include a clear statement identifying the original Software
48
+ and its Author.
49
+ e) Any copy, fork, or derivative work must include a visible reference to the Original
50
+ Repository URL (https://github.com/mrhenrike/TupaXPL-Forge) in the project's
51
+ README or equivalent documentation, so that users can trace the Software back to
52
+ its source.
53
+ f) The Author's name and credits must not be removed, obscured, or replaced in any
54
+ copy, fork, or derivative work. The Author must remain credited as the original
55
+ creator in all circumstances.
56
+
57
+ ### 3.2 Same License
58
+
59
+ a) Any distribution of the Software or derivative works must be under this same
60
+ License (XSRL v1.0).
61
+ b) You may not apply any additional restrictions or alternative license terms to the
62
+ Software or derivative works.
63
+ c) You may not sublicense the Software under different terms.
64
+
65
+ ### 3.3 Non-Commercial Use Only
66
+
67
+ a) The Software may not be used, in whole or in part, for commercial purposes.
68
+ b) "Commercial purposes" includes but is not limited to: selling the Software or
69
+ derivative works, incorporating the Software into commercial products or services,
70
+ using the Software to generate revenue directly or indirectly, and offering the
71
+ Software as part of a paid service.
72
+ c) Use in non-profit organizations, academic institutions, and personal projects is
73
+ permitted, provided no commercial gain is derived.
74
+
75
+ ### 3.4 Ethical Use Only
76
+
77
+ a) The Software may only be used for:
78
+ - Educational purposes and academic research;
79
+ - Security studies, training, and skill development;
80
+ - Authorized Security Testing (as defined in Section 1);
81
+ - Capture The Flag (CTF) competitions and security labs;
82
+ - Defensive security, incident response, and threat analysis.
83
+
84
+ b) The Software may NOT be used for:
85
+ - Unauthorized access to systems, networks, or data;
86
+ - Any activity that violates applicable laws or regulations;
87
+ - Malicious purposes, including but not limited to: deploying malware against
88
+ unauthorized targets, conducting denial-of-service attacks, unauthorized
89
+ surveillance, data theft, or any form of cybercrime;
90
+ - Targeting individuals, organizations, or infrastructure without explicit
91
+ authorization;
92
+ - Any purpose that causes harm to individuals or organizations.
93
+
94
+ ## 4. No Warranty
95
+
96
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED,
97
+ INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A
98
+ PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
99
+ ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
100
+ OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
101
+ OTHER DEALINGS IN THE SOFTWARE.
102
+
103
+ ## 5. Limitation of Liability
104
+
105
+ The Author shall not be held responsible for any misuse of the Software. Users are
106
+ solely responsible for ensuring their use of the Software complies with all applicable
107
+ laws, regulations, and ethical standards.
108
+
109
+ ## 6. Termination
110
+
111
+ This License and the rights granted hereunder will terminate automatically if you fail
112
+ to comply with any of the terms and conditions of this License. Upon termination, you
113
+ must cease all use and destroy all copies of the Software in your possession.
114
+
115
+ ## 7. Severability
116
+
117
+ If any provision of this License is held to be unenforceable, such provision shall be
118
+ reformed only to the extent necessary to make it enforceable, and the remaining
119
+ provisions shall continue in full force and effect.
120
+
121
+ ---
122
+
123
+ SPDX-License-Identifier: LicenseRef-XSRL-1.0
tupaxpl-1.3.0/PKG-INFO ADDED
@@ -0,0 +1,34 @@
1
+ Metadata-Version: 2.4
2
+ Name: tupaxpl
3
+ Version: 1.3.0
4
+ Summary: TupaXPL-Forge — Offensive Security Platform (LLM+LangGraph runtime)
5
+ Author-email: Andre Henrike <safelabs.support@visioncybersecurity.com>
6
+ License: XSRL-1.0
7
+ Project-URL: Homepage, https://github.com/mrhenrike/TupaXPL-Forge
8
+ Project-URL: Repository, https://github.com/mrhenrike/TupaXPL-Forge
9
+ Project-URL: Documentation, https://github.com/mrhenrike/TupaXPL-Forge/wiki
10
+ Project-URL: Bug Tracker, https://github.com/mrhenrike/TupaXPL-Forge/issues
11
+ Project-URL: Changelog, https://github.com/mrhenrike/TupaXPL-Forge/releases
12
+ Keywords: security,pentest,offensive,llm,langgraph
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Intended Audience :: Information Technology
15
+ Classifier: Programming Language :: Python :: 3
16
+ Classifier: Programming Language :: Python :: 3.11
17
+ Classifier: Programming Language :: Python :: 3.12
18
+ Classifier: Topic :: Security
19
+ Requires-Python: >=3.11
20
+ License-File: LICENSE
21
+ Requires-Dist: rich>=14.1.0
22
+ Requires-Dist: prompt_toolkit>=3.0.51
23
+ Requires-Dist: PyYAML>=6.0.3
24
+ Requires-Dist: langgraph>=1.0.1
25
+ Requires-Dist: langchain-core>=1.5.3
26
+ Requires-Dist: pydantic>=2.13.4
27
+ Requires-Dist: pydantic-core>=2.46.4
28
+ Requires-Dist: python-evtx>=0.8.1
29
+ Requires-Dist: chromadb>=1.0.15
30
+ Requires-Dist: fastapi>=0.141.1
31
+ Requires-Dist: uvicorn>=0.35.0
32
+ Requires-Dist: httpx>=0.28.1
33
+ Requires-Dist: xpl-core>=0.1.0
34
+ Dynamic: license-file
@@ -0,0 +1,129 @@
1
+ <p align="center">
2
+ <img src="docs/img/tupaxpl-forge-banner_16x9.png" alt="TupaXPL-Forge Banner" width="100%"/>
3
+ </p>
4
+
5
+ ![Python](https://img.shields.io/badge/Python-3.8%2B-blue?style=flat-square&logo=python)
6
+ [![Platform](https://img.shields.io/badge/Platform-Linux%20%7C%20macOS%20%7C%20Windows-informational?style=flat-square)](README.md#compatibility)
7
+ [![License](https://img.shields.io/badge/License-XSRL--1.0-blue?style=flat-square)](LICENSE)
8
+ [![XPL Suite](https://img.shields.io/badge/XPL--Forge-Suite-red?style=flat-square)](https://github.com/mrhenrike)
9
+ [![Issues](https://img.shields.io/github/issues/mrhenrike/TupaXPL-Forge?style=flat-square)](https://github.com/mrhenrike/TupaXPL-Forge/issues)
10
+ [![Last Commit](https://img.shields.io/github/last-commit/mrhenrike/TupaXPL-Forge?style=flat-square)](https://github.com/mrhenrike/TupaXPL-Forge/commits)
11
+
12
+ ---
13
+
14
+ > **Platform Note:** This framework is designed and tested primarily on **Linux** (Debian/Ubuntu/Kali). Most hardware-dependent modules (wireless adapters, USB devices, raw socket access, firmware tools) require Linux. Running on Windows or macOS may cause errors or limited functionality in many modules. Linux is strongly recommended for maximum compatibility.
15
+
16
+ ---
17
+
18
+ # TupaXPL-Forge
19
+
20
+ **Unified Offensive Security Platform** — LangGraph AI agent + EmbedXPL E2E execution + local unrestricted LLM + red team campaign orchestration.
21
+
22
+ > Named after Tupã, the indigenous Brazilian god of thunder and lightning.
23
+ > Part of the XPL-Forge ecosystem: EmbedXPL · FirewallXPL · IndustrialXPL · WirelessXPL · PrinterXPL.
24
+
25
+ ## Overview
26
+
27
+ TupaXPL-Forge merges the `pentest-engine` LangGraph agent infrastructure with the `OffSecForge` campaign orchestrator into a single unified offensive security platform.
28
+
29
+ ```
30
+ tupaxpl/
31
+ forge.py # Unified CLI entrypoint
32
+ pentest_engine/ # LangGraph agent: tools, RAG, training, API
33
+ core/ # Ollama client, extraction, scoring
34
+ graph/ # StateGraph: authorize/recon/exploit/observe/report
35
+ tools/ # Ghidra, r2, binwalk, compiler, nuclei, atomic, gateway
36
+ knowledge/ # Chroma + BM25 RAG: ATT&CK, Sigma, Atomic, EmbedXPL
37
+ training/ # PEFT/LoRA fine-tuning pipeline
38
+ api/ # FastAPI at :8080
39
+ offsecforge/ # Campaign orchestrator
40
+ campaign.py # Red team campaign management
41
+ ai/ # LLM core (unrestricted), prompt library, code gen
42
+ builders/ # Exploit builder, payload builder, report builder, MITRE mapper
43
+ intel/ # EmbedXPL bridge (E2E), CVE feed
44
+ modules/ # recon, exploit, post, forensics
45
+ legacy/ # pentestgpt_arsenal
46
+ ```
47
+
48
+ ## Quick start
49
+
50
+ ```bash
51
+ # Unrestricted mode (bypasses all policy gates)
52
+ OFFSEC_MODE=unrestricted python forge.py chat
53
+
54
+ # Generate exploit module for a CVE
55
+ python forge.py generate exploit CVE-2024-53703
56
+
57
+ # Generate offensive payload
58
+ python forge.py generate payload "reverse shell linux x64"
59
+
60
+ # Run full campaign
61
+ python forge.py campaign new "Q3 Red Team" 192.168.1.0/24
62
+ python forge.py campaign run <id>
63
+
64
+ # Binary RE
65
+ python forge.py analyze ./malware.bin --ghidra
66
+
67
+ # Code security review
68
+ python forge.py review ./target.py
69
+ ```
70
+
71
+ ## Requirements
72
+
73
+ - Python 3.11+
74
+ - Ollama (local LLM server): `ollama pull dolphin-llama3:8b-v2.9-q8_0`
75
+ - EmbedXPL-Forge (set `EMBEDXPL_PATH`)
76
+
77
+ ## LLM models (via Ollama)
78
+
79
+ | Model | Use | VRAM |
80
+ |---|---|---|
81
+ | `dolphin-llama3:8b-v2.9-q8_0` | Zero safety filters | 8 GB |
82
+ | `qwen2.5-coder:14b-instruct-q4_K_M` | Best code quality | 8.5 GB |
83
+ | `deepseek-coder-v2:16b-lite-instruct-q4_K_M` | Max quality | 10 GB |
84
+
85
+ ## Environment
86
+
87
+ | Variable | Default | Description |
88
+ |---|---|---|
89
+ | `OFFSEC_MODE` | `standard` | Set to `unrestricted` to bypass PolicyGate |
90
+ | `PE_SAFE` | `true` | Set to `false` to disable safe mode |
91
+ | `PE_EXEC` | `false` | Set to `true` to enable execution |
92
+ | `OLLAMA_HOST` | `http://127.0.0.1:11434` | Ollama server |
93
+ | `EMBEDXPL_PATH` | auto-detect | EmbedXPL-Forge root |
94
+
95
+ ## Author
96
+
97
+ Andre Henrique (@mrhenrike) | Uniao Geek | https://uniaogeek.com.br/
98
+ ---
99
+
100
+ ## Contact
101
+
102
+ **Support / general inquiries:** security.research@uniaogeek.com.br
103
+ **Security issues:** [SECURITY.md](SECURITY.md)
104
+
105
+ ---
106
+
107
+ ### André Henrique
108
+
109
+ | | |
110
+ |---|---|
111
+ | GitHub | [@mrhenrike](https://github.com/mrhenrike) |
112
+ | X / Twitter | [@mrhenrike](https://x.com/mrhenrike) |
113
+ | LinkedIn | [mrhenrike](https://www.linkedin.com/in/mrhenrike/) |
114
+
115
+ ### União Geek
116
+
117
+ | | |
118
+ |---|---|
119
+ | Website | [uniaogeek.com.br](https://uniaogeek.com.br/) |
120
+ | Blog | [uniaogeek.com.br/blog](https://uniaogeek.com.br/blog/) |
121
+ | GitHub | [Uniao-Geek](https://github.com/Uniao-Geek) |
122
+ | Instagram | [@uniaogeek](https://www.instagram.com/uniaogeek/) |
123
+
124
+ ---
125
+
126
+ **License:** XSRL-1.0 - Copyright (c) 2024-2026 Andre Henrike de Oliveira / Uniao Geek
127
+ **Created by:** André Henrique ([@mrhenrike](https://github.com/mrhenrike)) | [União Geek](https://uniaogeek.com.br/)
128
+
129
+ [Leia em Português](README.pt-BR.md) - [Command coverage](docs/commands.md) - [Wiki](../../wiki)
@@ -0,0 +1,5 @@
1
+ """OffSecForge — Offensive Security Test Campaign Constructor.
2
+
3
+ Author: Andre Henrique (@mrhenrike) | Uniao Geek
4
+ """
5
+ __version__ = "1.3.0"
@@ -0,0 +1,58 @@
1
+ """Acquisition layer __init__ - unified interface.
2
+
3
+ Author: Andre Henrique (@mrhenrike) | Uniao Geek
4
+ """
5
+ from offsecforge.acquisition.nvd_client import NvdClient, KevClient
6
+ from offsecforge.acquisition.github_poc_finder import GitHubPocFinder
7
+ from offsecforge.acquisition.exploit_db import ExploitDB, MalwareBazaar
8
+ from offsecforge.acquisition.exploit_downloader import ExploitDownloader
9
+
10
+ __all__ = [
11
+ "ExploitDB",
12
+ "ExploitDownloader",
13
+ "GitHubPocFinder",
14
+ "KevClient",
15
+ "MalwareBazaar",
16
+ "NvdClient",
17
+ ]
18
+
19
+
20
+ def hunt(cve_id: str) -> dict:
21
+ """One-shot CVE intelligence: NVD + KEV + PoCs.
22
+
23
+ Returns a unified intel dict for a CVE.
24
+ """
25
+ nvd = NvdClient()
26
+ kev = KevClient()
27
+ gh = GitHubPocFinder()
28
+ edb = ExploitDB()
29
+
30
+ cve_data = nvd.get(cve_id) or {"id": cve_id, "description": "", "cvss_v3": 0, "severity": "UNKNOWN"}
31
+ kev_entry = kev.get(cve_id)
32
+ pocs = gh.find(cve_id)
33
+ edb_results = edb.search_cve(cve_id)
34
+
35
+ return {
36
+ "cve_id": cve_id,
37
+ "nvd": cve_data,
38
+ "is_kev": kev_entry is not None,
39
+ "kev": kev_entry,
40
+ "pocs": pocs,
41
+ "exploitdb": edb_results,
42
+ "poc_count": len(pocs),
43
+ "has_metasploit": any("metasploit" in (p.get("description") or "").lower() for p in pocs),
44
+ "recommendation": _recommend(cve_data, kev_entry is not None, len(pocs)),
45
+ }
46
+
47
+
48
+ def _recommend(cve: dict, is_kev: bool, poc_count: int) -> str:
49
+ score = cve.get("cvss_v3", 0)
50
+ if is_kev and score >= 9.0:
51
+ return "CRITICAL - actively exploited, CVSS 9+, immediate priority"
52
+ elif is_kev:
53
+ return "HIGH - in CISA KEV, actively exploited in the wild"
54
+ elif score >= 9.0 and poc_count > 0:
55
+ return "HIGH - CVSS 9+, public PoC available"
56
+ elif score >= 7.0:
57
+ return "MEDIUM - high CVSS, investigate for exploitation path"
58
+ return "LOW - assess based on target context"
@@ -0,0 +1,89 @@
1
+ """ExploitDB / searchsploit bridge.
2
+
3
+ Author: Andre Henrique (@mrhenrike) | Uniao Geek
4
+ """
5
+ from __future__ import annotations
6
+ import json
7
+ import subprocess
8
+ from typing import Optional
9
+
10
+
11
+ class ExploitDB:
12
+ """Interface to ExploitDB via searchsploit (installed in WSL/Kali)."""
13
+
14
+ def search(self, query: str, limit: int = 10) -> list[dict]:
15
+ """Search ExploitDB for exploits matching query."""
16
+ return self._run_searchsploit(["--json", query])
17
+
18
+ def search_cve(self, cve_id: str) -> list[dict]:
19
+ """Search ExploitDB by CVE ID."""
20
+ return self._run_searchsploit(["--json", "--cve", cve_id])
21
+
22
+ def download(self, exploit_id: str, output_dir: str = "/tmp") -> Optional[str]:
23
+ """Download an exploit by its EDB ID."""
24
+ result = subprocess.run(
25
+ self._wsl_cmd(["searchsploit", "--mirror", exploit_id]),
26
+ capture_output=True, text=True, timeout=30, cwd=output_dir,
27
+ )
28
+ if result.returncode == 0:
29
+ return result.stdout.strip()
30
+ return None
31
+
32
+ def _run_searchsploit(self, args: list[str]) -> list[dict]:
33
+ cmd = self._wsl_cmd(["searchsploit"] + args)
34
+ try:
35
+ result = subprocess.run(cmd, capture_output=True, text=True, timeout=20)
36
+ if result.returncode == 0:
37
+ data = json.loads(result.stdout)
38
+ return [self._parse(e) for e in data.get("RESULTS_EXPLOIT", [])]
39
+ except Exception:
40
+ pass
41
+ return []
42
+
43
+ def _parse(self, e: dict) -> dict:
44
+ return {
45
+ "id": e.get("EDB-ID", ""),
46
+ "title": e.get("Title", ""),
47
+ "date": e.get("Date", ""),
48
+ "author": e.get("Author", ""),
49
+ "type": e.get("Type", ""),
50
+ "platform": e.get("Platform", ""),
51
+ "path": e.get("Path", ""),
52
+ "codes": e.get("Codes", ""),
53
+ }
54
+
55
+ def _wsl_cmd(self, cmd: list[str]) -> list[str]:
56
+ """Wrap command for WSL execution on Windows."""
57
+ import sys
58
+ if sys.platform == "win32":
59
+ return ["wsl", "-d", "Ubuntu", "--"] + cmd
60
+ return cmd
61
+
62
+
63
+ class MalwareBazaar:
64
+ """MalwareBazaar (abuse.ch) API client for malware samples."""
65
+
66
+ API = "https://mb-api.abuse.ch/api/v1/"
67
+
68
+ def search_tag(self, tag: str, limit: int = 10) -> list[dict]:
69
+ return self._query({"query": "get_taginfo", "tag": tag, "limit": limit})
70
+
71
+ def search_signature(self, sig: str) -> list[dict]:
72
+ return self._query({"query": "get_siginfo", "signature": sig, "limit": 10})
73
+
74
+ def get_hash(self, sha256: str) -> Optional[dict]:
75
+ results = self._query({"query": "get_info", "hash": sha256})
76
+ return results[0] if results else None
77
+
78
+ def _query(self, payload: dict) -> list[dict]:
79
+ import urllib.request
80
+ import urllib.parse
81
+ data = urllib.parse.urlencode(payload).encode()
82
+ try:
83
+ req = urllib.request.Request(self.API, data=data, method="POST")
84
+ req.add_header("User-Agent", "TupaXPL-Forge/2.0")
85
+ with urllib.request.urlopen(req, timeout=15) as r:
86
+ result = json.loads(r.read())
87
+ return result.get("data", [])
88
+ except Exception:
89
+ return []
@@ -0,0 +1,101 @@
1
+ """Exploit downloader - downloads and caches exploits locally.
2
+
3
+ Never deletes cached exploits. Stores in .tmp/cache/exploits/<cve_id>/
4
+
5
+ Author: Andre Henrique (@mrhenrike) | Uniao Geek
6
+ """
7
+ from __future__ import annotations
8
+ import hashlib
9
+ import json
10
+ import os
11
+ import ssl
12
+ import subprocess
13
+ import urllib.request
14
+ from datetime import datetime
15
+ from pathlib import Path
16
+ from typing import Optional
17
+
18
+ CACHE_DIR = Path(os.environ.get("TUPAXPL_CACHE", "")).resolve() or (
19
+ Path(__file__).resolve().parents[3] / ".tmp" / "cache" / "exploits"
20
+ )
21
+ _UA = "TupaXPL-Forge/2.0 Security Research"
22
+
23
+
24
+ class ExploitDownloader:
25
+ """Downloads and caches exploit PoCs and scripts locally. Never deletes."""
26
+
27
+ def __init__(self, cache_dir: Optional[Path] = None) -> None:
28
+ self.cache = cache_dir or CACHE_DIR
29
+ self.cache.mkdir(parents=True, exist_ok=True)
30
+
31
+ def download_url(self, cve_id: str, url: str, filename: Optional[str] = None) -> dict:
32
+ """Download a PoC from URL into the CVE cache directory."""
33
+ cve_dir = self.cache / cve_id.upper()
34
+ cve_dir.mkdir(parents=True, exist_ok=True)
35
+ # Derive filename
36
+ if not filename:
37
+ filename = url.split("/")[-1].split("?")[0] or "poc.py"
38
+ dst = cve_dir / filename
39
+ if dst.exists():
40
+ return {"status": "cached", "path": str(dst), "size": dst.stat().st_size}
41
+ try:
42
+ ctx = ssl.create_default_context()
43
+ ctx.check_hostname = False
44
+ ctx.verify_mode = ssl.CERT_NONE
45
+ req = urllib.request.Request(url, headers={"User-Agent": _UA})
46
+ with urllib.request.urlopen(req, context=ctx, timeout=30) as r:
47
+ data = r.read()
48
+ dst.write_bytes(data)
49
+ # Write metadata
50
+ meta = {
51
+ "cve_id": cve_id,
52
+ "source_url": url,
53
+ "filename": filename,
54
+ "downloaded": datetime.now().isoformat(),
55
+ "size": len(data),
56
+ "sha256": hashlib.sha256(data).hexdigest(),
57
+ }
58
+ (cve_dir / "metadata.json").write_text(
59
+ json.dumps(meta, indent=2), encoding="utf-8"
60
+ )
61
+ return {"status": "downloaded", "path": str(dst), "size": len(data)}
62
+ except Exception as e:
63
+ return {"status": "error", "error": str(e), "url": url}
64
+
65
+ def clone_repo(self, cve_id: str, repo_url: str) -> dict:
66
+ """Clone a GitHub PoC repo into the CVE cache directory."""
67
+ cve_dir = self.cache / cve_id.upper()
68
+ repo_name = repo_url.rstrip("/").split("/")[-1].removesuffix(".git")
69
+ dst = cve_dir / repo_name
70
+ if dst.exists():
71
+ return {"status": "cached", "path": str(dst)}
72
+ cve_dir.mkdir(parents=True, exist_ok=True)
73
+ result = subprocess.run(
74
+ ["git", "clone", "--depth=1", repo_url, str(dst)],
75
+ capture_output=True, text=True, timeout=60,
76
+ )
77
+ if result.returncode == 0:
78
+ return {"status": "cloned", "path": str(dst)}
79
+ return {"status": "error", "error": result.stderr[:200]}
80
+
81
+ def list_cached(self, cve_id: str = "") -> list[dict]:
82
+ """List all cached exploits, optionally filtered by CVE."""
83
+ results = []
84
+ search = self.cache / cve_id.upper() if cve_id else self.cache
85
+ if not search.exists():
86
+ return []
87
+ pattern = "**/*.py" if not cve_id else "*.py"
88
+ for f in search.glob(pattern if cve_id else "**/*.py"):
89
+ meta_file = f.parent / "metadata.json"
90
+ meta = json.loads(meta_file.read_text()) if meta_file.exists() else {}
91
+ results.append({
92
+ "path": str(f),
93
+ "cve": f.parts[-2] if not cve_id else cve_id,
94
+ "size": f.stat().st_size,
95
+ **meta,
96
+ })
97
+ return results
98
+
99
+ def get_cache_path(self, cve_id: str) -> Path:
100
+ """Return the cache directory for a CVE."""
101
+ return self.cache / cve_id.upper()
@@ -0,0 +1,79 @@
1
+ """GitHub PoC finder - searches nomi-sec/PoC-in-GitHub and trickest/cve.
2
+
3
+ Author: Andre Henrique (@mrhenrike) | Uniao Geek
4
+ """
5
+ from __future__ import annotations
6
+ import json
7
+ import ssl
8
+ import urllib.parse
9
+ import urllib.request
10
+ from typing import Any, Optional
11
+
12
+ _UA = "TupaXPL-Forge/2.0 Security Research"
13
+ _NOMI_BASE = "https://raw.githubusercontent.com/nomi-sec/PoC-in-GitHub/master"
14
+ _GH_SEARCH = "https://api.github.com/search/repositories"
15
+
16
+
17
+ def _get(url: str, timeout: float = 15.0) -> Any:
18
+ ctx = ssl.create_default_context()
19
+ ctx.check_hostname = False
20
+ ctx.verify_mode = ssl.CERT_NONE
21
+ headers = {"User-Agent": _UA, "Accept": "application/vnd.github+json"}
22
+ req = urllib.request.Request(url, headers=headers)
23
+ with urllib.request.urlopen(req, context=ctx, timeout=timeout) as r:
24
+ return json.loads(r.read())
25
+
26
+
27
+ class GitHubPocFinder:
28
+ """Multi-source PoC finder: nomi-sec, trickest/cve, GitHub Search."""
29
+
30
+ def find(self, cve_id: str) -> list[dict]:
31
+ """Find all PoC repos for a CVE ID."""
32
+ results = []
33
+ results.extend(self._nomi_sec(cve_id))
34
+ results.extend(self._github_search(cve_id))
35
+ # Deduplicate by URL
36
+ seen = set()
37
+ unique = []
38
+ for r in results:
39
+ url = r.get("url", "")
40
+ if url not in seen:
41
+ seen.add(url)
42
+ unique.append(r)
43
+ return sorted(unique, key=lambda x: x.get("stars", 0), reverse=True)
44
+
45
+ def _nomi_sec(self, cve_id: str) -> list[dict]:
46
+ """Query nomi-sec/PoC-in-GitHub index."""
47
+ try:
48
+ year = cve_id.split("-")[1]
49
+ url = f"{_NOMI_BASE}/{year}/{cve_id}.json"
50
+ data = _get(url)
51
+ return [{
52
+ "source": "nomi-sec",
53
+ "cve": cve_id,
54
+ "url": r.get("html_url", ""),
55
+ "description": r.get("description", ""),
56
+ "stars": r.get("stargazers_count", 0),
57
+ "language": r.get("language", ""),
58
+ "updated": r.get("updated_at", "")[:10],
59
+ } for r in (data if isinstance(data, list) else [])]
60
+ except Exception:
61
+ return []
62
+
63
+ def _github_search(self, cve_id: str, limit: int = 5) -> list[dict]:
64
+ """Search GitHub repositories by CVE ID."""
65
+ try:
66
+ query = urllib.parse.quote(f"{cve_id} exploit poc")
67
+ url = f"{_GH_SEARCH}?q={query}&sort=stars&per_page={limit}"
68
+ data = _get(url)
69
+ return [{
70
+ "source": "github-search",
71
+ "cve": cve_id,
72
+ "url": r.get("html_url", ""),
73
+ "description": (r.get("description") or "")[:200],
74
+ "stars": r.get("stargazers_count", 0),
75
+ "language": r.get("language", ""),
76
+ "updated": r.get("updated_at", "")[:10],
77
+ } for r in data.get("items", [])]
78
+ except Exception:
79
+ return []