Skip to content

Commit 814b591

Browse files
committed
feat: add comprehensive security scanning and hardening tools
Implements 11 new security MCP tools across 4 categories: ## Vulnerability Scanning - scan_container_vulnerabilities: Scan Docker images with Trivy/Grype - scan_filesystem_vulnerabilities: Scan filesystems for CVEs (LXC containers) ## Secrets Detection - scan_secrets_in_file: Detect exposed credentials in config files - scan_secrets_in_directory: Recursive secrets scanning - scan_docker_config_secrets: Check Docker registry credentials Detects 16+ secret patterns: - Cloud credentials (AWS, GitHub, Slack, Stripe, Twilio, etc.) - Private keys (RSA, DSA, EC, OpenSSH) - Database connection strings - JWT tokens, Docker auth, NPM tokens ## Firewall Management - get_firewall_status: View firewall state (UFW/iptables) - list_firewall_rules: List all rules with numbers - add_firewall_rule: Add allow/deny rules - delete_firewall_rule: Remove rules by number Supports UFW (Ubuntu/Debian) and iptables fallback. ## CIS Benchmarks - run_cis_benchmark: Security posture assessment Profiles: basic (10+ checks), intermediate (15+ checks), comprehensive (20+ checks) Check categories: - Filesystem permissions (passwd, shadow, SSH config) - SSH security (root login, password auth, empty passwords) - Network hardening (IP forwarding, ICMP redirects) - System auditing (auditd) - User account security (UID 0, password complexity) - Firewall configuration Returns security score with remediation steps. ## Infrastructure - New scopes: security:read, security:scan, security:write, security:admin - Risk levels: low (scanning), moderate (filesystem), critical (firewall changes) - Approval gates for firewall modifications - Comprehensive tests with unit and integration coverage Files: - src/services/security_scanner.py (Trivy/Grype integration) - src/services/secrets_scanner.py (16+ regex patterns) - src/services/firewall_manager.py (UFW/iptables) - src/services/cis_checker.py (Linux hardening checks) - src/tools/security_tools.py (11 MCP tools) - src/auth/scopes.py (security scopes) - tests/test_security_tools.py (test coverage)
1 parent b9ff08f commit 814b591

File tree

8 files changed

+2274
-1
lines changed

8 files changed

+2274
-1
lines changed

src/auth/scopes.py

Lines changed: 86 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,13 @@ class Scope(str, Enum):
3737
CONTAINER_ADMIN = "container:admin" # Update containers, pull images
3838
SYSTEM_ADMIN = "system:admin" # Install packages, system updates
3939
DOCKER_ADMIN = "docker:admin" # Full Docker access
40-
40+
41+
# Security scopes
42+
SECURITY_READ = "security:read" # View security scans, assessments
43+
SECURITY_SCAN = "security:scan" # Run vulnerability scans
44+
SECURITY_WRITE = "security:write" # Modify firewall rules (high risk)
45+
SECURITY_ADMIN = "security:admin" # Full security management
46+
4147
# Meta scopes
4248
ADMIN = "admin" # All permissions
4349
READ_ONLY = "readonly" # All read permissions
@@ -210,6 +216,84 @@ class ToolScopeRequirement:
210216
requires_approval=True,
211217
description="Install system packages (code execution risk)"
212218
),
219+
220+
# Security Tools - Vulnerability Scanning
221+
"scan_container_vulnerabilities": ToolScopeRequirement(
222+
tool_name="scan_container_vulnerabilities",
223+
required_scopes=[Scope.SECURITY_SCAN],
224+
risk_level="low",
225+
description="Scan containers for vulnerabilities"
226+
),
227+
"scan_filesystem_vulnerabilities": ToolScopeRequirement(
228+
tool_name="scan_filesystem_vulnerabilities",
229+
required_scopes=[Scope.SECURITY_SCAN],
230+
risk_level="moderate",
231+
description="Scan filesystem for vulnerabilities"
232+
),
233+
234+
# Security Tools - Secrets Scanning
235+
"scan_secrets_in_file": ToolScopeRequirement(
236+
tool_name="scan_secrets_in_file",
237+
required_scopes=[Scope.SECURITY_SCAN],
238+
risk_level="moderate",
239+
description="Scan file for exposed secrets"
240+
),
241+
"scan_secrets_in_directory": ToolScopeRequirement(
242+
tool_name="scan_secrets_in_directory",
243+
required_scopes=[Scope.SECURITY_SCAN],
244+
risk_level="moderate",
245+
description="Scan directory for exposed secrets"
246+
),
247+
"scan_docker_config_secrets": ToolScopeRequirement(
248+
tool_name="scan_docker_config_secrets",
249+
required_scopes=[Scope.SECURITY_SCAN],
250+
risk_level="moderate",
251+
description="Scan Docker config for credentials"
252+
),
253+
254+
# Security Tools - Firewall Management
255+
"get_firewall_status": ToolScopeRequirement(
256+
tool_name="get_firewall_status",
257+
required_scopes=[Scope.SECURITY_READ],
258+
risk_level="low",
259+
description="View firewall status"
260+
),
261+
"list_firewall_rules": ToolScopeRequirement(
262+
tool_name="list_firewall_rules",
263+
required_scopes=[Scope.SECURITY_READ],
264+
risk_level="low",
265+
description="List firewall rules"
266+
),
267+
"add_firewall_rule": ToolScopeRequirement(
268+
tool_name="add_firewall_rule",
269+
required_scopes=[Scope.SECURITY_WRITE],
270+
risk_level="critical",
271+
requires_approval=True,
272+
description="Add firewall rule (can lock out access)"
273+
),
274+
"delete_firewall_rule": ToolScopeRequirement(
275+
tool_name="delete_firewall_rule",
276+
required_scopes=[Scope.SECURITY_WRITE],
277+
risk_level="critical",
278+
requires_approval=True,
279+
description="Delete firewall rule (can expose services)"
280+
),
281+
282+
# Security Tools - CIS Benchmarks
283+
"run_cis_benchmark": ToolScopeRequirement(
284+
tool_name="run_cis_benchmark",
285+
required_scopes=[Scope.SECURITY_READ],
286+
risk_level="low",
287+
description="Run CIS security assessment"
288+
),
289+
290+
# Security Tools - Utility
291+
"get_security_scanner_info": ToolScopeRequirement(
292+
tool_name="get_security_scanner_info",
293+
required_scopes=[Scope.SECURITY_READ],
294+
risk_level="low",
295+
description="Get security scanner availability"
296+
),
213297
}
214298

215299

@@ -235,6 +319,7 @@ def expand_scopes(scopes: List[str]) -> Set[str]:
235319
Scope.NETWORK_READ,
236320
Scope.CONTAINER_READ,
237321
Scope.FILE_READ,
322+
Scope.SECURITY_READ,
238323
])
239324

240325
return expanded

0 commit comments

Comments
 (0)