Production hardening: security fixes, code quality, 724 skills complete

- Fix 25 shell=True subprocess calls with list-based commands
- Fix 49 verify=False in defensive skills (env-var override)
- Add timeout to 231 HTTP/subprocess/socket calls
- Fix 6 SQL injection patterns with whitelist validation
- Replace 8 __import__() with standard imports
- Remove 701 unused imports across 442 files
- Add authorized-testing disclaimers to all offensive skills
- Complete 11 incomplete skill directories
- Expand 10 stub SKILL.md files with full content
- Fix 2 YAML parse errors in frontmatter
- Fix 5 pre-existing syntax errors
- Convert 22 hardcoded paths/ports to environment variables
- Back up 21 redundant skill pairs to .bak
- Fix 2 global declaration errors
- 724/724 skills with full folder anatomy (SKILL.md + agent.py + api-reference.md + LICENSE)
- 0 compile errors across all 724 agent.py files
This commit is contained in:
mukul975
2026-03-19 13:26:49 +01:00
parent 63b442d347
commit c47eed6a64
900 changed files with 23085 additions and 2720 deletions
@@ -5,7 +5,6 @@ import argparse
import email
import json
import re
import sys
import time
import requests
@@ -37,7 +36,7 @@ class SOARClient:
"status": "new",
"sensitivity": "amber",
}
resp = self.session.post(f"{self.base_url}/rest/container", json=payload)
resp = self.session.post(f"{self.base_url}/rest/container", json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
return {"container_id": data.get("id"), "success": data.get("success", False)}
@@ -54,7 +53,7 @@ class SOARClient:
"cef": cef,
"run_automation": run_automation,
}
resp = self.session.post(f"{self.base_url}/rest/artifact", json=payload)
resp = self.session.post(f"{self.base_url}/rest/artifact", json=payload, timeout=30)
resp.raise_for_status()
data = resp.json()
return {"artifact_id": data.get("id"), "success": data.get("success", False)}
@@ -67,14 +66,15 @@ class SOARClient:
"scope": scope,
"run": True,
}
resp = self.session.post(f"{self.base_url}/rest/playbook_run", json=payload)
resp = self.session.post(f"{self.base_url}/rest/playbook_run", json=payload, timeout=30)
resp.raise_for_status()
return resp.json()
def get_action_runs(self, container_id: int) -> list:
resp = self.session.get(
f"{self.base_url}/rest/action_run",
params={"_filter_container": container_id, "page_size": 100}
params={"_filter_container": container_id, "page_size": 100},
timeout=30,
)
resp.raise_for_status()
return resp.json().get("data", [])