souleyez 2.27.0__py3-none-any.whl → 2.28.0__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.
- souleyez/__init__.py +1 -1
- souleyez/core/tool_chaining.py +36 -12
- souleyez/docs/README.md +2 -2
- souleyez/docs/user-guide/configuration.md +1 -1
- souleyez/docs/user-guide/scope-management.md +683 -0
- souleyez/engine/background.py +38 -1
- souleyez/engine/result_handler.py +167 -10
- souleyez/main.py +222 -1
- souleyez/plugins/nuclei.py +2 -1
- souleyez/plugins/searchsploit.py +21 -18
- souleyez/security/scope_validator.py +615 -0
- souleyez/storage/hosts.py +87 -2
- souleyez/storage/migrations/_026_add_engagement_scope.py +87 -0
- souleyez/ui/interactive.py +289 -5
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/METADATA +9 -3
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/RECORD +20 -17
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/WHEEL +0 -0
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/entry_points.txt +0 -0
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/licenses/LICENSE +0 -0
- {souleyez-2.27.0.dist-info → souleyez-2.28.0.dist-info}/top_level.txt +0 -0
souleyez/__init__.py
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
__version__ = '2.
|
|
1
|
+
__version__ = '2.28.0'
|
souleyez/core/tool_chaining.py
CHANGED
|
@@ -591,6 +591,23 @@ class ChainRule:
|
|
|
591
591
|
if svc_port in group.get('ports', []):
|
|
592
592
|
port = str(svc_port)
|
|
593
593
|
break
|
|
594
|
+
elif 'has:services' in self.trigger_condition:
|
|
595
|
+
# For has:services condition, extract port from the services array
|
|
596
|
+
# Prioritize HTTP services for web tools (gobuster, nuclei, etc.)
|
|
597
|
+
services = context.get('services', [])
|
|
598
|
+
http_ports = {80, 443, 8080, 8443, 8000, 8888, 3000, 5000}
|
|
599
|
+
|
|
600
|
+
# First pass: look for HTTP service by name or common HTTP ports
|
|
601
|
+
for svc in services:
|
|
602
|
+
svc_name = svc.get('service_name', '').lower()
|
|
603
|
+
svc_port = svc.get('port')
|
|
604
|
+
if svc_name == 'http' or svc_name == 'https' or svc_port in http_ports:
|
|
605
|
+
port = str(svc_port)
|
|
606
|
+
break
|
|
607
|
+
|
|
608
|
+
# Second pass: if no HTTP service, use the first service's port
|
|
609
|
+
if not port and services:
|
|
610
|
+
port = str(services[0].get('port', ''))
|
|
594
611
|
|
|
595
612
|
# Calculate subnet for {subnet} placeholder (e.g., 10.0.0.88 → 10.0.0.0/24)
|
|
596
613
|
subnet = ''
|
|
@@ -5827,18 +5844,25 @@ class ToolChaining:
|
|
|
5827
5844
|
# Auto mode: enqueue immediately
|
|
5828
5845
|
print(f" 🔗 Chaining {cmd['tool']} for {cmd_target}: {cmd['reason']}")
|
|
5829
5846
|
# enqueue_job will acquire _lock again (nested lock is safe - same thread)
|
|
5830
|
-
|
|
5831
|
-
|
|
5832
|
-
|
|
5833
|
-
|
|
5834
|
-
|
|
5835
|
-
|
|
5836
|
-
|
|
5837
|
-
|
|
5838
|
-
|
|
5839
|
-
|
|
5840
|
-
|
|
5841
|
-
|
|
5847
|
+
try:
|
|
5848
|
+
job_id = enqueue_job(
|
|
5849
|
+
tool=cmd['tool'],
|
|
5850
|
+
target=cmd_target,
|
|
5851
|
+
args=resolved_args,
|
|
5852
|
+
label=source_tool,
|
|
5853
|
+
engagement_id=engagement_id,
|
|
5854
|
+
parent_id=parent_job_id,
|
|
5855
|
+
reason=cmd.get('reason', f"Auto-chain from {source_tool}"),
|
|
5856
|
+
metadata=cmd.get('metadata'), # Pass through deduplication metadata
|
|
5857
|
+
rule_id=cmd.get('rule_id') # Pass rule ID for tracking
|
|
5858
|
+
)
|
|
5859
|
+
job_ids.append(job_id)
|
|
5860
|
+
except Exception as scope_err:
|
|
5861
|
+
# Handle scope violations gracefully - skip out-of-scope targets
|
|
5862
|
+
if 'ScopeViolationError' in type(scope_err).__name__ or 'out of scope' in str(scope_err).lower():
|
|
5863
|
+
print(f" ⚠️ Skipped (out of scope): {cmd_target}")
|
|
5864
|
+
else:
|
|
5865
|
+
raise # Re-raise unexpected errors
|
|
5842
5866
|
|
|
5843
5867
|
# Lock released here - next iteration gets fresh lock
|
|
5844
5868
|
|
souleyez/docs/README.md
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# SoulEyez Documentation
|
|
2
2
|
|
|
3
|
-
**Version:** 2.
|
|
4
|
-
**Last Updated:** January
|
|
3
|
+
**Version:** 2.28.0
|
|
4
|
+
**Last Updated:** January 9, 2026
|
|
5
5
|
**Organization:** CyberSoul Security
|
|
6
6
|
|
|
7
7
|
Welcome to the SoulEyez documentation! This documentation covers architecture, development, user guides, and operational information for the SoulEyez penetration testing platform.
|