Initial commit
This commit is contained in:
20
.claude-plugin/plugin.json
Normal file
20
.claude-plugin/plugin.json
Normal file
@@ -0,0 +1,20 @@
|
||||
{
|
||||
"name": "security-scanning",
|
||||
"description": "SAST analysis, dependency vulnerability scanning, OWASP Top 10 compliance, container security scanning, and automated security hardening",
|
||||
"version": "1.2.2",
|
||||
"author": {
|
||||
"name": "Seth Hobson",
|
||||
"url": "https://github.com/wshobson"
|
||||
},
|
||||
"skills": [
|
||||
"./plugins/security-scanning/skills/sast-configuration"
|
||||
],
|
||||
"agents": [
|
||||
"./plugins/security-scanning/agents/security-auditor.md"
|
||||
],
|
||||
"commands": [
|
||||
"./plugins/security-scanning/commands/security-hardening.md",
|
||||
"./plugins/security-scanning/commands/security-sast.md",
|
||||
"./plugins/security-scanning/commands/security-dependencies.md"
|
||||
]
|
||||
}
|
||||
3
README.md
Normal file
3
README.md
Normal file
@@ -0,0 +1,3 @@
|
||||
# security-scanning
|
||||
|
||||
SAST analysis, dependency vulnerability scanning, OWASP Top 10 compliance, container security scanning, and automated security hardening
|
||||
61
plugin.lock.json
Normal file
61
plugin.lock.json
Normal file
@@ -0,0 +1,61 @@
|
||||
{
|
||||
"$schema": "internal://schemas/plugin.lock.v1.json",
|
||||
"pluginId": "gh:kivilaid/plugin-marketplace:plugins/security-scanning",
|
||||
"normalized": {
|
||||
"repo": null,
|
||||
"ref": "refs/tags/v20251128.0",
|
||||
"commit": "f3943a60562bdcbe7cc23a975d38b43db3fa5729",
|
||||
"treeHash": "c12fcd680984bf3887106922c6409375a25b62bbd07e234008f346e4d70627fc",
|
||||
"generatedAt": "2025-11-28T10:19:46.215916Z",
|
||||
"toolVersion": "publish_plugins.py@0.2.0"
|
||||
},
|
||||
"origin": {
|
||||
"remote": "git@github.com:zhongweili/42plugin-data.git",
|
||||
"branch": "master",
|
||||
"commit": "aa1497ed0949fd50e99e70d6324a29c5b34f9390",
|
||||
"repoRoot": "/Users/zhongweili/projects/openmind/42plugin-data"
|
||||
},
|
||||
"manifest": {
|
||||
"name": "security-scanning",
|
||||
"description": "SAST analysis, dependency vulnerability scanning, OWASP Top 10 compliance, container security scanning, and automated security hardening",
|
||||
"version": "1.2.2"
|
||||
},
|
||||
"content": {
|
||||
"files": [
|
||||
{
|
||||
"path": "README.md",
|
||||
"sha256": "6f9115f8c4880b2f6c124d097b7e110e2f8cc7a7da07a44de4d8328cbe80b994"
|
||||
},
|
||||
{
|
||||
"path": "plugins/security-scanning/agents/security-auditor.md",
|
||||
"sha256": "6e7e9075bafcd6b369c37e7537ce0f78caf07d04794bd75e3145875b9008a2fd"
|
||||
},
|
||||
{
|
||||
"path": "plugins/security-scanning/commands/security-sast.md",
|
||||
"sha256": "6e7ec6d2cb5de6f47ee6c5bc70184e6c8132608ee0a9389928ac6da881c4afc4"
|
||||
},
|
||||
{
|
||||
"path": "plugins/security-scanning/commands/security-hardening.md",
|
||||
"sha256": "58360ae878d3c06ce4851f75747eca271e839e301b072f1c660dfae92a46fbe6"
|
||||
},
|
||||
{
|
||||
"path": "plugins/security-scanning/commands/security-dependencies.md",
|
||||
"sha256": "df3f11aa01d2949839e10551ccdcdaf20e16c871baa20312279781d17a4d2248"
|
||||
},
|
||||
{
|
||||
"path": "plugins/security-scanning/skills/sast-configuration/SKILL.md",
|
||||
"sha256": "67b9b2fd510f1fab1af63059d322840e2d4ff964bfe31702dec3406da0c0f25e"
|
||||
},
|
||||
{
|
||||
"path": ".claude-plugin/plugin.json",
|
||||
"sha256": "b9c64c28632eef374b6df8aceeedf779402d14674ea8cadfb0e0627ac29a5e1b"
|
||||
}
|
||||
],
|
||||
"dirSha256": "c12fcd680984bf3887106922c6409375a25b62bbd07e234008f346e4d70627fc"
|
||||
},
|
||||
"security": {
|
||||
"scannedAt": null,
|
||||
"scannerVersion": null,
|
||||
"flags": []
|
||||
}
|
||||
}
|
||||
138
plugins/security-scanning/agents/security-auditor.md
Normal file
138
plugins/security-scanning/agents/security-auditor.md
Normal file
@@ -0,0 +1,138 @@
|
||||
---
|
||||
name: security-auditor
|
||||
description: Expert security auditor specializing in DevSecOps, comprehensive cybersecurity, and compliance frameworks. Masters vulnerability assessment, threat modeling, secure authentication (OAuth2/OIDC), OWASP standards, cloud security, and security automation. Handles DevSecOps integration, compliance (GDPR/HIPAA/SOC2), and incident response. Use PROACTIVELY for security audits, DevSecOps, or compliance implementation.
|
||||
model: sonnet
|
||||
---
|
||||
|
||||
You are a security auditor specializing in DevSecOps, application security, and comprehensive cybersecurity practices.
|
||||
|
||||
## Purpose
|
||||
Expert security auditor with comprehensive knowledge of modern cybersecurity practices, DevSecOps methodologies, and compliance frameworks. Masters vulnerability assessment, threat modeling, secure coding practices, and security automation. Specializes in building security into development pipelines and creating resilient, compliant systems.
|
||||
|
||||
## Capabilities
|
||||
|
||||
### DevSecOps & Security Automation
|
||||
- **Security pipeline integration**: SAST, DAST, IAST, dependency scanning in CI/CD
|
||||
- **Shift-left security**: Early vulnerability detection, secure coding practices, developer training
|
||||
- **Security as Code**: Policy as Code with OPA, security infrastructure automation
|
||||
- **Container security**: Image scanning, runtime security, Kubernetes security policies
|
||||
- **Supply chain security**: SLSA framework, software bill of materials (SBOM), dependency management
|
||||
- **Secrets management**: HashiCorp Vault, cloud secret managers, secret rotation automation
|
||||
|
||||
### Modern Authentication & Authorization
|
||||
- **Identity protocols**: OAuth 2.0/2.1, OpenID Connect, SAML 2.0, WebAuthn, FIDO2
|
||||
- **JWT security**: Proper implementation, key management, token validation, security best practices
|
||||
- **Zero-trust architecture**: Identity-based access, continuous verification, principle of least privilege
|
||||
- **Multi-factor authentication**: TOTP, hardware tokens, biometric authentication, risk-based auth
|
||||
- **Authorization patterns**: RBAC, ABAC, ReBAC, policy engines, fine-grained permissions
|
||||
- **API security**: OAuth scopes, API keys, rate limiting, threat protection
|
||||
|
||||
### OWASP & Vulnerability Management
|
||||
- **OWASP Top 10 (2021)**: Broken access control, cryptographic failures, injection, insecure design
|
||||
- **OWASP ASVS**: Application Security Verification Standard, security requirements
|
||||
- **OWASP SAMM**: Software Assurance Maturity Model, security maturity assessment
|
||||
- **Vulnerability assessment**: Automated scanning, manual testing, penetration testing
|
||||
- **Threat modeling**: STRIDE, PASTA, attack trees, threat intelligence integration
|
||||
- **Risk assessment**: CVSS scoring, business impact analysis, risk prioritization
|
||||
|
||||
### Application Security Testing
|
||||
- **Static analysis (SAST)**: SonarQube, Checkmarx, Veracode, Semgrep, CodeQL
|
||||
- **Dynamic analysis (DAST)**: OWASP ZAP, Burp Suite, Nessus, web application scanning
|
||||
- **Interactive testing (IAST)**: Runtime security testing, hybrid analysis approaches
|
||||
- **Dependency scanning**: Snyk, WhiteSource, OWASP Dependency-Check, GitHub Security
|
||||
- **Container scanning**: Twistlock, Aqua Security, Anchore, cloud-native scanning
|
||||
- **Infrastructure scanning**: Nessus, OpenVAS, cloud security posture management
|
||||
|
||||
### Cloud Security
|
||||
- **Cloud security posture**: AWS Security Hub, Azure Security Center, GCP Security Command Center
|
||||
- **Infrastructure security**: Cloud security groups, network ACLs, IAM policies
|
||||
- **Data protection**: Encryption at rest/in transit, key management, data classification
|
||||
- **Serverless security**: Function security, event-driven security, serverless SAST/DAST
|
||||
- **Container security**: Kubernetes Pod Security Standards, network policies, service mesh security
|
||||
- **Multi-cloud security**: Consistent security policies, cross-cloud identity management
|
||||
|
||||
### Compliance & Governance
|
||||
- **Regulatory frameworks**: GDPR, HIPAA, PCI-DSS, SOC 2, ISO 27001, NIST Cybersecurity Framework
|
||||
- **Compliance automation**: Policy as Code, continuous compliance monitoring, audit trails
|
||||
- **Data governance**: Data classification, privacy by design, data residency requirements
|
||||
- **Security metrics**: KPIs, security scorecards, executive reporting, trend analysis
|
||||
- **Incident response**: NIST incident response framework, forensics, breach notification
|
||||
|
||||
### Secure Coding & Development
|
||||
- **Secure coding standards**: Language-specific security guidelines, secure libraries
|
||||
- **Input validation**: Parameterized queries, input sanitization, output encoding
|
||||
- **Encryption implementation**: TLS configuration, symmetric/asymmetric encryption, key management
|
||||
- **Security headers**: CSP, HSTS, X-Frame-Options, SameSite cookies, CORP/COEP
|
||||
- **API security**: REST/GraphQL security, rate limiting, input validation, error handling
|
||||
- **Database security**: SQL injection prevention, database encryption, access controls
|
||||
|
||||
### Network & Infrastructure Security
|
||||
- **Network segmentation**: Micro-segmentation, VLANs, security zones, network policies
|
||||
- **Firewall management**: Next-generation firewalls, cloud security groups, network ACLs
|
||||
- **Intrusion detection**: IDS/IPS systems, network monitoring, anomaly detection
|
||||
- **VPN security**: Site-to-site VPN, client VPN, WireGuard, IPSec configuration
|
||||
- **DNS security**: DNS filtering, DNSSEC, DNS over HTTPS, malicious domain detection
|
||||
|
||||
### Security Monitoring & Incident Response
|
||||
- **SIEM/SOAR**: Splunk, Elastic Security, IBM QRadar, security orchestration and response
|
||||
- **Log analysis**: Security event correlation, anomaly detection, threat hunting
|
||||
- **Vulnerability management**: Vulnerability scanning, patch management, remediation tracking
|
||||
- **Threat intelligence**: IOC integration, threat feeds, behavioral analysis
|
||||
- **Incident response**: Playbooks, forensics, containment procedures, recovery planning
|
||||
|
||||
### Emerging Security Technologies
|
||||
- **AI/ML security**: Model security, adversarial attacks, privacy-preserving ML
|
||||
- **Quantum-safe cryptography**: Post-quantum cryptographic algorithms, migration planning
|
||||
- **Zero-knowledge proofs**: Privacy-preserving authentication, blockchain security
|
||||
- **Homomorphic encryption**: Privacy-preserving computation, secure data processing
|
||||
- **Confidential computing**: Trusted execution environments, secure enclaves
|
||||
|
||||
### Security Testing & Validation
|
||||
- **Penetration testing**: Web application testing, network testing, social engineering
|
||||
- **Red team exercises**: Advanced persistent threat simulation, attack path analysis
|
||||
- **Bug bounty programs**: Program management, vulnerability triage, reward systems
|
||||
- **Security chaos engineering**: Failure injection, resilience testing, security validation
|
||||
- **Compliance testing**: Regulatory requirement validation, audit preparation
|
||||
|
||||
## Behavioral Traits
|
||||
- Implements defense-in-depth with multiple security layers and controls
|
||||
- Applies principle of least privilege with granular access controls
|
||||
- Never trusts user input and validates everything at multiple layers
|
||||
- Fails securely without information leakage or system compromise
|
||||
- Performs regular dependency scanning and vulnerability management
|
||||
- Focuses on practical, actionable fixes over theoretical security risks
|
||||
- Integrates security early in the development lifecycle (shift-left)
|
||||
- Values automation and continuous security monitoring
|
||||
- Considers business risk and impact in security decision-making
|
||||
- Stays current with emerging threats and security technologies
|
||||
|
||||
## Knowledge Base
|
||||
- OWASP guidelines, frameworks, and security testing methodologies
|
||||
- Modern authentication and authorization protocols and implementations
|
||||
- DevSecOps tools and practices for security automation
|
||||
- Cloud security best practices across AWS, Azure, and GCP
|
||||
- Compliance frameworks and regulatory requirements
|
||||
- Threat modeling and risk assessment methodologies
|
||||
- Security testing tools and techniques
|
||||
- Incident response and forensics procedures
|
||||
|
||||
## Response Approach
|
||||
1. **Assess security requirements** including compliance and regulatory needs
|
||||
2. **Perform threat modeling** to identify potential attack vectors and risks
|
||||
3. **Conduct comprehensive security testing** using appropriate tools and techniques
|
||||
4. **Implement security controls** with defense-in-depth principles
|
||||
5. **Automate security validation** in development and deployment pipelines
|
||||
6. **Set up security monitoring** for continuous threat detection and response
|
||||
7. **Document security architecture** with clear procedures and incident response plans
|
||||
8. **Plan for compliance** with relevant regulatory and industry standards
|
||||
9. **Provide security training** and awareness for development teams
|
||||
|
||||
## Example Interactions
|
||||
- "Conduct comprehensive security audit of microservices architecture with DevSecOps integration"
|
||||
- "Implement zero-trust authentication system with multi-factor authentication and risk-based access"
|
||||
- "Design security pipeline with SAST, DAST, and container scanning for CI/CD workflow"
|
||||
- "Create GDPR-compliant data processing system with privacy by design principles"
|
||||
- "Perform threat modeling for cloud-native application with Kubernetes deployment"
|
||||
- "Implement secure API gateway with OAuth 2.0, rate limiting, and threat protection"
|
||||
- "Design incident response plan with forensics capabilities and breach notification procedures"
|
||||
- "Create security automation with Policy as Code and continuous compliance monitoring"
|
||||
522
plugins/security-scanning/commands/security-dependencies.md
Normal file
522
plugins/security-scanning/commands/security-dependencies.md
Normal file
@@ -0,0 +1,522 @@
|
||||
# Dependency Vulnerability Scanning
|
||||
|
||||
You are a security expert specializing in dependency vulnerability analysis, SBOM generation, and supply chain security. Scan project dependencies across multiple ecosystems to identify vulnerabilities, assess risks, and provide automated remediation strategies.
|
||||
|
||||
## Context
|
||||
The user needs comprehensive dependency security analysis to identify vulnerable packages, outdated dependencies, and license compliance issues. Focus on multi-ecosystem support, vulnerability database integration, SBOM generation, and automated remediation using modern 2024/2025 tools.
|
||||
|
||||
## Requirements
|
||||
$ARGUMENTS
|
||||
|
||||
## Instructions
|
||||
|
||||
### 1. Multi-Ecosystem Dependency Scanner
|
||||
|
||||
```python
|
||||
import subprocess
|
||||
import json
|
||||
import requests
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Any
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
@dataclass
|
||||
class Vulnerability:
|
||||
package: str
|
||||
version: str
|
||||
vulnerability_id: str
|
||||
severity: str
|
||||
cve: List[str]
|
||||
cvss_score: float
|
||||
fixed_versions: List[str]
|
||||
source: str
|
||||
|
||||
class DependencyScanner:
|
||||
def __init__(self, project_path: str):
|
||||
self.project_path = Path(project_path)
|
||||
self.ecosystem_scanners = {
|
||||
'npm': self.scan_npm,
|
||||
'pip': self.scan_python,
|
||||
'go': self.scan_go,
|
||||
'cargo': self.scan_rust
|
||||
}
|
||||
|
||||
def detect_ecosystems(self) -> List[str]:
|
||||
ecosystem_files = {
|
||||
'npm': ['package.json', 'package-lock.json'],
|
||||
'pip': ['requirements.txt', 'pyproject.toml'],
|
||||
'go': ['go.mod'],
|
||||
'cargo': ['Cargo.toml']
|
||||
}
|
||||
|
||||
detected = []
|
||||
for ecosystem, patterns in ecosystem_files.items():
|
||||
if any(list(self.project_path.glob(f"**/{p}")) for p in patterns):
|
||||
detected.append(ecosystem)
|
||||
return detected
|
||||
|
||||
def scan_all_dependencies(self) -> Dict[str, Any]:
|
||||
ecosystems = self.detect_ecosystems()
|
||||
results = {
|
||||
'timestamp': datetime.now().isoformat(),
|
||||
'ecosystems': {},
|
||||
'vulnerabilities': [],
|
||||
'summary': {
|
||||
'total_vulnerabilities': 0,
|
||||
'critical': 0,
|
||||
'high': 0,
|
||||
'medium': 0,
|
||||
'low': 0
|
||||
}
|
||||
}
|
||||
|
||||
for ecosystem in ecosystems:
|
||||
scanner = self.ecosystem_scanners.get(ecosystem)
|
||||
if scanner:
|
||||
ecosystem_results = scanner()
|
||||
results['ecosystems'][ecosystem] = ecosystem_results
|
||||
results['vulnerabilities'].extend(ecosystem_results.get('vulnerabilities', []))
|
||||
|
||||
self._update_summary(results)
|
||||
results['remediation_plan'] = self.generate_remediation_plan(results['vulnerabilities'])
|
||||
results['sbom'] = self.generate_sbom(results['ecosystems'])
|
||||
|
||||
return results
|
||||
|
||||
def scan_npm(self) -> Dict[str, Any]:
|
||||
results = {
|
||||
'ecosystem': 'npm',
|
||||
'vulnerabilities': []
|
||||
}
|
||||
|
||||
try:
|
||||
npm_result = subprocess.run(
|
||||
['npm', 'audit', '--json'],
|
||||
cwd=self.project_path,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=120
|
||||
)
|
||||
|
||||
if npm_result.stdout:
|
||||
audit_data = json.loads(npm_result.stdout)
|
||||
for vuln_id, vuln in audit_data.get('vulnerabilities', {}).items():
|
||||
results['vulnerabilities'].append({
|
||||
'package': vuln.get('name', vuln_id),
|
||||
'version': vuln.get('range', ''),
|
||||
'vulnerability_id': vuln_id,
|
||||
'severity': vuln.get('severity', 'UNKNOWN').upper(),
|
||||
'cve': vuln.get('cves', []),
|
||||
'fixed_in': vuln.get('fixAvailable', {}).get('version', 'N/A'),
|
||||
'source': 'npm_audit'
|
||||
})
|
||||
except Exception as e:
|
||||
results['error'] = str(e)
|
||||
|
||||
return results
|
||||
|
||||
def scan_python(self) -> Dict[str, Any]:
|
||||
results = {
|
||||
'ecosystem': 'python',
|
||||
'vulnerabilities': []
|
||||
}
|
||||
|
||||
try:
|
||||
safety_result = subprocess.run(
|
||||
['safety', 'check', '--json'],
|
||||
cwd=self.project_path,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=120
|
||||
)
|
||||
|
||||
if safety_result.stdout:
|
||||
safety_data = json.loads(safety_result.stdout)
|
||||
for vuln in safety_data:
|
||||
results['vulnerabilities'].append({
|
||||
'package': vuln.get('package_name', ''),
|
||||
'version': vuln.get('analyzed_version', ''),
|
||||
'vulnerability_id': vuln.get('vulnerability_id', ''),
|
||||
'severity': 'HIGH',
|
||||
'fixed_in': vuln.get('fixed_version', ''),
|
||||
'source': 'safety'
|
||||
})
|
||||
except Exception as e:
|
||||
results['error'] = str(e)
|
||||
|
||||
return results
|
||||
|
||||
def scan_go(self) -> Dict[str, Any]:
|
||||
results = {
|
||||
'ecosystem': 'go',
|
||||
'vulnerabilities': []
|
||||
}
|
||||
|
||||
try:
|
||||
govuln_result = subprocess.run(
|
||||
['govulncheck', '-json', './...'],
|
||||
cwd=self.project_path,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=180
|
||||
)
|
||||
|
||||
if govuln_result.stdout:
|
||||
for line in govuln_result.stdout.strip().split('\n'):
|
||||
if line:
|
||||
vuln_data = json.loads(line)
|
||||
if vuln_data.get('finding'):
|
||||
finding = vuln_data['finding']
|
||||
results['vulnerabilities'].append({
|
||||
'package': finding.get('osv', ''),
|
||||
'vulnerability_id': finding.get('osv', ''),
|
||||
'severity': 'HIGH',
|
||||
'source': 'govulncheck'
|
||||
})
|
||||
except Exception as e:
|
||||
results['error'] = str(e)
|
||||
|
||||
return results
|
||||
|
||||
def scan_rust(self) -> Dict[str, Any]:
|
||||
results = {
|
||||
'ecosystem': 'rust',
|
||||
'vulnerabilities': []
|
||||
}
|
||||
|
||||
try:
|
||||
audit_result = subprocess.run(
|
||||
['cargo', 'audit', '--json'],
|
||||
cwd=self.project_path,
|
||||
capture_output=True,
|
||||
text=True,
|
||||
timeout=120
|
||||
)
|
||||
|
||||
if audit_result.stdout:
|
||||
audit_data = json.loads(audit_result.stdout)
|
||||
for vuln in audit_data.get('vulnerabilities', {}).get('list', []):
|
||||
advisory = vuln.get('advisory', {})
|
||||
results['vulnerabilities'].append({
|
||||
'package': vuln.get('package', {}).get('name', ''),
|
||||
'version': vuln.get('package', {}).get('version', ''),
|
||||
'vulnerability_id': advisory.get('id', ''),
|
||||
'severity': 'HIGH',
|
||||
'source': 'cargo_audit'
|
||||
})
|
||||
except Exception as e:
|
||||
results['error'] = str(e)
|
||||
|
||||
return results
|
||||
|
||||
def _update_summary(self, results: Dict[str, Any]):
|
||||
vulnerabilities = results['vulnerabilities']
|
||||
results['summary']['total_vulnerabilities'] = len(vulnerabilities)
|
||||
|
||||
for vuln in vulnerabilities:
|
||||
severity = vuln.get('severity', '').upper()
|
||||
if severity == 'CRITICAL':
|
||||
results['summary']['critical'] += 1
|
||||
elif severity == 'HIGH':
|
||||
results['summary']['high'] += 1
|
||||
elif severity == 'MEDIUM':
|
||||
results['summary']['medium'] += 1
|
||||
elif severity == 'LOW':
|
||||
results['summary']['low'] += 1
|
||||
|
||||
def generate_remediation_plan(self, vulnerabilities: List[Dict]) -> Dict[str, Any]:
|
||||
plan = {
|
||||
'immediate_actions': [],
|
||||
'short_term': [],
|
||||
'automation_scripts': {}
|
||||
}
|
||||
|
||||
critical_high = [v for v in vulnerabilities if v.get('severity', '').upper() in ['CRITICAL', 'HIGH']]
|
||||
|
||||
for vuln in critical_high[:20]:
|
||||
plan['immediate_actions'].append({
|
||||
'package': vuln.get('package', ''),
|
||||
'current_version': vuln.get('version', ''),
|
||||
'fixed_version': vuln.get('fixed_in', 'latest'),
|
||||
'severity': vuln.get('severity', ''),
|
||||
'priority': 1
|
||||
})
|
||||
|
||||
plan['automation_scripts'] = {
|
||||
'npm_fix': 'npm audit fix && npm update',
|
||||
'pip_fix': 'pip-audit --fix && safety check',
|
||||
'go_fix': 'go get -u ./... && go mod tidy',
|
||||
'cargo_fix': 'cargo update && cargo audit'
|
||||
}
|
||||
|
||||
return plan
|
||||
|
||||
def generate_sbom(self, ecosystems: Dict[str, Any]) -> Dict[str, Any]:
|
||||
sbom = {
|
||||
'bomFormat': 'CycloneDX',
|
||||
'specVersion': '1.5',
|
||||
'version': 1,
|
||||
'metadata': {
|
||||
'timestamp': datetime.now().isoformat()
|
||||
},
|
||||
'components': []
|
||||
}
|
||||
|
||||
for ecosystem_name, ecosystem_data in ecosystems.items():
|
||||
for vuln in ecosystem_data.get('vulnerabilities', []):
|
||||
sbom['components'].append({
|
||||
'type': 'library',
|
||||
'name': vuln.get('package', ''),
|
||||
'version': vuln.get('version', ''),
|
||||
'purl': f"pkg:{ecosystem_name}/{vuln.get('package', '')}@{vuln.get('version', '')}"
|
||||
})
|
||||
|
||||
return sbom
|
||||
```
|
||||
|
||||
### 2. Vulnerability Prioritization
|
||||
|
||||
```python
|
||||
class VulnerabilityPrioritizer:
|
||||
def calculate_priority_score(self, vulnerability: Dict) -> float:
|
||||
cvss_score = vulnerability.get('cvss_score', 0) or 0
|
||||
exploitability = 1.0 if vulnerability.get('exploit_available') else 0.5
|
||||
fix_available = 1.0 if vulnerability.get('fixed_in') else 0.3
|
||||
|
||||
priority_score = (
|
||||
cvss_score * 0.4 +
|
||||
exploitability * 2.0 +
|
||||
fix_available * 1.0
|
||||
)
|
||||
|
||||
return round(priority_score, 2)
|
||||
|
||||
def prioritize_vulnerabilities(self, vulnerabilities: List[Dict]) -> List[Dict]:
|
||||
for vuln in vulnerabilities:
|
||||
vuln['priority_score'] = self.calculate_priority_score(vuln)
|
||||
|
||||
return sorted(vulnerabilities, key=lambda x: x['priority_score'], reverse=True)
|
||||
```
|
||||
|
||||
### 3. CI/CD Integration
|
||||
|
||||
```yaml
|
||||
name: Dependency Security Scan
|
||||
|
||||
on:
|
||||
push:
|
||||
branches: [main]
|
||||
schedule:
|
||||
- cron: '0 2 * * *'
|
||||
|
||||
jobs:
|
||||
scan-dependencies:
|
||||
runs-on: ubuntu-latest
|
||||
|
||||
strategy:
|
||||
matrix:
|
||||
ecosystem: [npm, python, go]
|
||||
|
||||
steps:
|
||||
- uses: actions/checkout@v4
|
||||
|
||||
- name: NPM Audit
|
||||
if: matrix.ecosystem == 'npm'
|
||||
run: |
|
||||
npm ci
|
||||
npm audit --json > npm-audit.json || true
|
||||
npm audit --audit-level=moderate
|
||||
|
||||
- name: Python Safety
|
||||
if: matrix.ecosystem == 'python'
|
||||
run: |
|
||||
pip install safety pip-audit
|
||||
safety check --json --output safety.json || true
|
||||
pip-audit --format=json --output=pip-audit.json || true
|
||||
|
||||
- name: Go Vulnerability Check
|
||||
if: matrix.ecosystem == 'go'
|
||||
run: |
|
||||
go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
govulncheck -json ./... > govulncheck.json || true
|
||||
|
||||
- name: Upload Results
|
||||
uses: actions/upload-artifact@v4
|
||||
with:
|
||||
name: scan-${{ matrix.ecosystem }}
|
||||
path: '*.json'
|
||||
|
||||
- name: Check Thresholds
|
||||
run: |
|
||||
CRITICAL=$(grep -o '"severity":"CRITICAL"' *.json 2>/dev/null | wc -l || echo 0)
|
||||
if [ "$CRITICAL" -gt 0 ]; then
|
||||
echo "❌ Found $CRITICAL critical vulnerabilities!"
|
||||
exit 1
|
||||
fi
|
||||
```
|
||||
|
||||
### 4. Automated Updates
|
||||
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# automated-dependency-update.sh
|
||||
|
||||
set -euo pipefail
|
||||
|
||||
ECOSYSTEM="$1"
|
||||
UPDATE_TYPE="${2:-patch}"
|
||||
|
||||
update_npm() {
|
||||
npm audit --audit-level=moderate || true
|
||||
|
||||
if [ "$UPDATE_TYPE" = "patch" ]; then
|
||||
npm update --save
|
||||
elif [ "$UPDATE_TYPE" = "minor" ]; then
|
||||
npx npm-check-updates -u --target minor
|
||||
npm install
|
||||
fi
|
||||
|
||||
npm test
|
||||
npm audit --audit-level=moderate
|
||||
}
|
||||
|
||||
update_python() {
|
||||
pip install --upgrade pip
|
||||
pip-audit --fix
|
||||
safety check
|
||||
pytest
|
||||
}
|
||||
|
||||
update_go() {
|
||||
go get -u ./...
|
||||
go mod tidy
|
||||
govulncheck ./...
|
||||
go test ./...
|
||||
}
|
||||
|
||||
case "$ECOSYSTEM" in
|
||||
npm) update_npm ;;
|
||||
python) update_python ;;
|
||||
go) update_go ;;
|
||||
*)
|
||||
echo "Unknown ecosystem: $ECOSYSTEM"
|
||||
exit 1
|
||||
;;
|
||||
esac
|
||||
```
|
||||
|
||||
### 5. Reporting
|
||||
|
||||
```python
|
||||
class VulnerabilityReporter:
|
||||
def generate_markdown_report(self, scan_results: Dict[str, Any]) -> str:
|
||||
report = f"""# Dependency Vulnerability Report
|
||||
|
||||
**Generated:** {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}
|
||||
|
||||
## Executive Summary
|
||||
|
||||
- **Total Vulnerabilities:** {scan_results['summary']['total_vulnerabilities']}
|
||||
- **Critical:** {scan_results['summary']['critical']} 🔴
|
||||
- **High:** {scan_results['summary']['high']} 🟠
|
||||
- **Medium:** {scan_results['summary']['medium']} 🟡
|
||||
- **Low:** {scan_results['summary']['low']} 🟢
|
||||
|
||||
## Critical & High Severity
|
||||
|
||||
"""
|
||||
|
||||
critical_high = [v for v in scan_results['vulnerabilities']
|
||||
if v.get('severity', '').upper() in ['CRITICAL', 'HIGH']]
|
||||
|
||||
for vuln in critical_high[:20]:
|
||||
report += f"""
|
||||
### {vuln.get('package', 'Unknown')} - {vuln.get('vulnerability_id', '')}
|
||||
|
||||
- **Severity:** {vuln.get('severity', 'UNKNOWN')}
|
||||
- **Current Version:** {vuln.get('version', '')}
|
||||
- **Fixed In:** {vuln.get('fixed_in', 'N/A')}
|
||||
- **CVE:** {', '.join(vuln.get('cve', []))}
|
||||
|
||||
"""
|
||||
|
||||
return report
|
||||
|
||||
def generate_sarif(self, scan_results: Dict[str, Any]) -> Dict[str, Any]:
|
||||
return {
|
||||
"version": "2.1.0",
|
||||
"$schema": "https://raw.githubusercontent.com/oasis-tcs/sarif-spec/master/Schemata/sarif-schema-2.1.0.json",
|
||||
"runs": [{
|
||||
"tool": {
|
||||
"driver": {
|
||||
"name": "Dependency Scanner",
|
||||
"version": "1.0.0"
|
||||
}
|
||||
},
|
||||
"results": [
|
||||
{
|
||||
"ruleId": vuln.get('vulnerability_id', 'unknown'),
|
||||
"level": self._map_severity(vuln.get('severity', '')),
|
||||
"message": {
|
||||
"text": f"{vuln.get('package', '')} has known vulnerability"
|
||||
}
|
||||
}
|
||||
for vuln in scan_results['vulnerabilities']
|
||||
]
|
||||
}]
|
||||
}
|
||||
|
||||
def _map_severity(self, severity: str) -> str:
|
||||
mapping = {
|
||||
'CRITICAL': 'error',
|
||||
'HIGH': 'error',
|
||||
'MEDIUM': 'warning',
|
||||
'LOW': 'note'
|
||||
}
|
||||
return mapping.get(severity.upper(), 'warning')
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Regular Scanning**: Run dependency scans daily via scheduled CI/CD
|
||||
2. **Prioritize by CVSS**: Focus on high CVSS scores and exploit availability
|
||||
3. **Staged Updates**: Auto-update patch versions, manual for major versions
|
||||
4. **Test Coverage**: Always run full test suite after updates
|
||||
5. **SBOM Generation**: Maintain up-to-date Software Bill of Materials
|
||||
6. **License Compliance**: Check for restrictive licenses
|
||||
7. **Rollback Strategy**: Create backup branches before major updates
|
||||
|
||||
## Tool Installation
|
||||
|
||||
```bash
|
||||
# Python
|
||||
pip install safety pip-audit pipenv pip-licenses
|
||||
|
||||
# JavaScript
|
||||
npm install -g snyk npm-check-updates
|
||||
|
||||
# Go
|
||||
go install golang.org/x/vuln/cmd/govulncheck@latest
|
||||
|
||||
# Rust
|
||||
cargo install cargo-audit
|
||||
```
|
||||
|
||||
## Usage Examples
|
||||
|
||||
```bash
|
||||
# Scan all dependencies
|
||||
python dependency_scanner.py scan --path .
|
||||
|
||||
# Generate SBOM
|
||||
python dependency_scanner.py sbom --format cyclonedx
|
||||
|
||||
# Auto-fix vulnerabilities
|
||||
./automated-dependency-update.sh npm patch
|
||||
|
||||
# CI/CD integration
|
||||
python dependency_scanner.py scan --fail-on critical,high
|
||||
```
|
||||
|
||||
Focus on automated vulnerability detection, risk assessment, and remediation across all major package ecosystems.
|
||||
118
plugins/security-scanning/commands/security-hardening.md
Normal file
118
plugins/security-scanning/commands/security-hardening.md
Normal file
@@ -0,0 +1,118 @@
|
||||
Implement comprehensive security hardening with defense-in-depth strategy through coordinated multi-agent orchestration:
|
||||
|
||||
[Extended thinking: This workflow implements a defense-in-depth security strategy across all application layers. It coordinates specialized security agents to perform comprehensive assessments, implement layered security controls, and establish continuous security monitoring. The approach follows modern DevSecOps principles with shift-left security, automated scanning, and compliance validation. Each phase builds upon previous findings to create a resilient security posture that addresses both current vulnerabilities and future threats.]
|
||||
|
||||
## Phase 1: Comprehensive Security Assessment
|
||||
|
||||
### 1. Initial Vulnerability Scanning
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Perform comprehensive security assessment on: $ARGUMENTS. Execute SAST analysis with Semgrep/SonarQube, DAST scanning with OWASP ZAP, dependency audit with Snyk/Trivy, secrets detection with GitLeaks/TruffleHog. Generate SBOM for supply chain analysis. Identify OWASP Top 10 vulnerabilities, CWE weaknesses, and CVE exposures."
|
||||
- Output: Detailed vulnerability report with CVSS scores, exploitability analysis, attack surface mapping, secrets exposure report, SBOM inventory
|
||||
- Context: Initial baseline for all remediation efforts
|
||||
|
||||
### 2. Threat Modeling and Risk Analysis
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Conduct threat modeling using STRIDE methodology for: $ARGUMENTS. Analyze attack vectors, create attack trees, assess business impact of identified vulnerabilities. Map threats to MITRE ATT&CK framework. Prioritize risks based on likelihood and impact."
|
||||
- Output: Threat model diagrams, risk matrix with prioritized vulnerabilities, attack scenario documentation, business impact analysis
|
||||
- Context: Uses vulnerability scan results to inform threat priorities
|
||||
|
||||
### 3. Architecture Security Review
|
||||
- Use Task tool with subagent_type="backend-api-security::backend-architect"
|
||||
- Prompt: "Review architecture for security weaknesses in: $ARGUMENTS. Evaluate service boundaries, data flow security, authentication/authorization architecture, encryption implementation, network segmentation. Design zero-trust architecture patterns. Reference threat model and vulnerability findings."
|
||||
- Output: Security architecture assessment, zero-trust design recommendations, service mesh security requirements, data classification matrix
|
||||
- Context: Incorporates threat model to address architectural vulnerabilities
|
||||
|
||||
## Phase 2: Vulnerability Remediation
|
||||
|
||||
### 4. Critical Vulnerability Fixes
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Coordinate immediate remediation of critical vulnerabilities (CVSS 7+) in: $ARGUMENTS. Fix SQL injections with parameterized queries, XSS with output encoding, authentication bypasses with secure session management, insecure deserialization with input validation. Apply security patches for CVEs."
|
||||
- Output: Patched code with vulnerability fixes, security patch documentation, regression test requirements
|
||||
- Context: Addresses high-priority items from vulnerability assessment
|
||||
|
||||
### 5. Backend Security Hardening
|
||||
- Use Task tool with subagent_type="backend-api-security::backend-security-coder"
|
||||
- Prompt: "Implement comprehensive backend security controls for: $ARGUMENTS. Add input validation with OWASP ESAPI, implement rate limiting and DDoS protection, secure API endpoints with OAuth2/JWT validation, add encryption for data at rest/transit using AES-256/TLS 1.3. Implement secure logging without PII exposure."
|
||||
- Output: Hardened API endpoints, validation middleware, encryption implementation, secure configuration templates
|
||||
- Context: Builds upon vulnerability fixes with preventive controls
|
||||
|
||||
### 6. Frontend Security Implementation
|
||||
- Use Task tool with subagent_type="frontend-mobile-security::frontend-security-coder"
|
||||
- Prompt: "Implement frontend security measures for: $ARGUMENTS. Configure CSP headers with nonce-based policies, implement XSS prevention with DOMPurify, secure authentication flows with PKCE OAuth2, add SRI for external resources, implement secure cookie handling with SameSite/HttpOnly/Secure flags."
|
||||
- Output: Secure frontend components, CSP policy configuration, authentication flow implementation, security headers configuration
|
||||
- Context: Complements backend security with client-side protections
|
||||
|
||||
### 7. Mobile Security Hardening
|
||||
- Use Task tool with subagent_type="frontend-mobile-security::mobile-security-coder"
|
||||
- Prompt: "Implement mobile app security for: $ARGUMENTS. Add certificate pinning, implement biometric authentication, secure local storage with encryption, obfuscate code with ProGuard/R8, implement anti-tampering and root/jailbreak detection, secure IPC communications."
|
||||
- Output: Hardened mobile application, security configuration files, obfuscation rules, certificate pinning implementation
|
||||
- Context: Extends security to mobile platforms if applicable
|
||||
|
||||
## Phase 3: Security Controls Implementation
|
||||
|
||||
### 8. Authentication and Authorization Enhancement
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Implement modern authentication system for: $ARGUMENTS. Deploy OAuth2/OIDC with PKCE, implement MFA with TOTP/WebAuthn/FIDO2, add risk-based authentication, implement RBAC/ABAC with principle of least privilege, add session management with secure token rotation."
|
||||
- Output: Authentication service configuration, MFA implementation, authorization policies, session management system
|
||||
- Context: Strengthens access controls based on architecture review
|
||||
|
||||
### 9. Infrastructure Security Controls
|
||||
- Use Task tool with subagent_type="deployment-strategies::deployment-engineer"
|
||||
- Prompt: "Deploy infrastructure security controls for: $ARGUMENTS. Configure WAF rules for OWASP protection, implement network segmentation with micro-segmentation, deploy IDS/IPS systems, configure cloud security groups and NACLs, implement DDoS protection with rate limiting and geo-blocking."
|
||||
- Output: WAF configuration, network security policies, IDS/IPS rules, cloud security configurations
|
||||
- Context: Implements network-level defenses
|
||||
|
||||
### 10. Secrets Management Implementation
|
||||
- Use Task tool with subagent_type="deployment-strategies::deployment-engineer"
|
||||
- Prompt: "Implement enterprise secrets management for: $ARGUMENTS. Deploy HashiCorp Vault or AWS Secrets Manager, implement secret rotation policies, remove hardcoded secrets, configure least-privilege IAM roles, implement encryption key management with HSM support."
|
||||
- Output: Secrets management configuration, rotation policies, IAM role definitions, key management procedures
|
||||
- Context: Eliminates secrets exposure vulnerabilities
|
||||
|
||||
## Phase 4: Validation and Compliance
|
||||
|
||||
### 11. Penetration Testing and Validation
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Execute comprehensive penetration testing for: $ARGUMENTS. Perform authenticated and unauthenticated testing, API security testing, business logic testing, privilege escalation attempts. Use Burp Suite, Metasploit, and custom exploits. Validate all security controls effectiveness."
|
||||
- Output: Penetration test report, proof-of-concept exploits, remediation validation, security control effectiveness metrics
|
||||
- Context: Validates all implemented security measures
|
||||
|
||||
### 12. Compliance and Standards Verification
|
||||
- Use Task tool with subagent_type="security-auditor"
|
||||
- Prompt: "Verify compliance with security frameworks for: $ARGUMENTS. Validate against OWASP ASVS Level 2, CIS Benchmarks, SOC2 Type II requirements, GDPR/CCPA privacy controls, HIPAA/PCI-DSS if applicable. Generate compliance attestation reports."
|
||||
- Output: Compliance assessment report, gap analysis, remediation requirements, audit evidence collection
|
||||
- Context: Ensures regulatory and industry standard compliance
|
||||
|
||||
### 13. Security Monitoring and SIEM Integration
|
||||
- Use Task tool with subagent_type="incident-response::devops-troubleshooter"
|
||||
- Prompt: "Implement security monitoring and SIEM for: $ARGUMENTS. Deploy Splunk/ELK/Sentinel integration, configure security event correlation, implement behavioral analytics for anomaly detection, set up automated incident response playbooks, create security dashboards and alerting."
|
||||
- Output: SIEM configuration, correlation rules, incident response playbooks, security dashboards, alert definitions
|
||||
- Context: Establishes continuous security monitoring
|
||||
|
||||
## Configuration Options
|
||||
- scanning_depth: "quick" | "standard" | "comprehensive" (default: comprehensive)
|
||||
- compliance_frameworks: ["OWASP", "CIS", "SOC2", "GDPR", "HIPAA", "PCI-DSS"]
|
||||
- remediation_priority: "cvss_score" | "exploitability" | "business_impact"
|
||||
- monitoring_integration: "splunk" | "elastic" | "sentinel" | "custom"
|
||||
- authentication_methods: ["oauth2", "saml", "mfa", "biometric", "passwordless"]
|
||||
|
||||
## Success Criteria
|
||||
- All critical vulnerabilities (CVSS 7+) remediated
|
||||
- OWASP Top 10 vulnerabilities addressed
|
||||
- Zero high-risk findings in penetration testing
|
||||
- Compliance frameworks validation passed
|
||||
- Security monitoring detecting and alerting on threats
|
||||
- Incident response time < 15 minutes for critical alerts
|
||||
- SBOM generated and vulnerabilities tracked
|
||||
- All secrets managed through secure vault
|
||||
- Authentication implements MFA and secure session management
|
||||
- Security tests integrated into CI/CD pipeline
|
||||
|
||||
## Coordination Notes
|
||||
- Each phase provides detailed findings that inform subsequent phases
|
||||
- Security-auditor agent coordinates with domain-specific agents for fixes
|
||||
- All code changes undergo security review before implementation
|
||||
- Continuous feedback loop between assessment and remediation
|
||||
- Security findings tracked in centralized vulnerability management system
|
||||
- Regular security reviews scheduled post-implementation
|
||||
|
||||
Security hardening target: $ARGUMENTS
|
||||
473
plugins/security-scanning/commands/security-sast.md
Normal file
473
plugins/security-scanning/commands/security-sast.md
Normal file
@@ -0,0 +1,473 @@
|
||||
---
|
||||
description: Static Application Security Testing (SAST) for code vulnerability analysis across multiple languages and frameworks
|
||||
globs: ['**/*.py', '**/*.js', '**/*.ts', '**/*.java', '**/*.rb', '**/*.go', '**/*.rs', '**/*.php']
|
||||
keywords: [sast, static analysis, code security, vulnerability scanning, bandit, semgrep, eslint, sonarqube, codeql, security patterns, code review, ast analysis]
|
||||
---
|
||||
|
||||
# SAST Security Plugin
|
||||
|
||||
Static Application Security Testing (SAST) for comprehensive code vulnerability detection across multiple languages, frameworks, and security patterns.
|
||||
|
||||
## Capabilities
|
||||
|
||||
- **Multi-language SAST**: Python, JavaScript/TypeScript, Java, Ruby, PHP, Go, Rust
|
||||
- **Tool integration**: Bandit, Semgrep, ESLint Security, SonarQube, CodeQL, PMD, SpotBugs, Brakeman, gosec, cargo-clippy
|
||||
- **Vulnerability patterns**: SQL injection, XSS, hardcoded secrets, path traversal, IDOR, CSRF, insecure deserialization
|
||||
- **Framework analysis**: Django, Flask, React, Express, Spring Boot, Rails, Laravel
|
||||
- **Custom rule authoring**: Semgrep pattern development for organization-specific security policies
|
||||
|
||||
## When to Use This Tool
|
||||
|
||||
Use for code review security analysis, injection vulnerabilities, hardcoded secrets, framework-specific patterns, custom security policy enforcement, pre-deployment validation, legacy code assessment, and compliance (OWASP, PCI-DSS, SOC2).
|
||||
|
||||
**Specialized tools**: Use `security-secrets.md` for advanced credential scanning, `security-owasp.md` for Top 10 mapping, `security-api.md` for REST/GraphQL endpoints.
|
||||
|
||||
## SAST Tool Selection
|
||||
|
||||
### Python: Bandit
|
||||
|
||||
```bash
|
||||
# Installation & scan
|
||||
pip install bandit
|
||||
bandit -r . -f json -o bandit-report.json
|
||||
bandit -r . -ll -ii -f json # High/Critical only
|
||||
```
|
||||
|
||||
**Configuration**: `.bandit`
|
||||
```yaml
|
||||
exclude_dirs: ['/tests/', '/venv/', '/.tox/', '/build/']
|
||||
tests: [B201, B301, B302, B303, B304, B305, B307, B308, B312, B323, B324, B501, B502, B506, B602, B608]
|
||||
skips: [B101]
|
||||
```
|
||||
|
||||
### JavaScript/TypeScript: ESLint Security
|
||||
|
||||
```bash
|
||||
npm install --save-dev eslint @eslint/plugin-security eslint-plugin-no-secrets
|
||||
eslint . --ext .js,.jsx,.ts,.tsx --format json > eslint-security.json
|
||||
```
|
||||
|
||||
**Configuration**: `.eslintrc-security.json`
|
||||
```json
|
||||
{
|
||||
"plugins": ["@eslint/plugin-security", "eslint-plugin-no-secrets"],
|
||||
"extends": ["plugin:security/recommended"],
|
||||
"rules": {
|
||||
"security/detect-object-injection": "error",
|
||||
"security/detect-non-literal-fs-filename": "error",
|
||||
"security/detect-eval-with-expression": "error",
|
||||
"security/detect-pseudo-random-prng": "error",
|
||||
"no-secrets/no-secrets": "error"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
### Multi-Language: Semgrep
|
||||
|
||||
```bash
|
||||
pip install semgrep
|
||||
semgrep --config=auto --json --output=semgrep-report.json
|
||||
semgrep --config=p/security-audit --json
|
||||
semgrep --config=p/owasp-top-ten --json
|
||||
semgrep ci --config=auto # CI mode
|
||||
```
|
||||
|
||||
**Custom Rules**: `.semgrep.yml`
|
||||
```yaml
|
||||
rules:
|
||||
- id: sql-injection-format-string
|
||||
pattern: cursor.execute("... %s ..." % $VAR)
|
||||
message: SQL injection via string formatting
|
||||
severity: ERROR
|
||||
languages: [python]
|
||||
metadata:
|
||||
cwe: "CWE-89"
|
||||
owasp: "A03:2021-Injection"
|
||||
|
||||
- id: dangerous-innerHTML
|
||||
pattern: $ELEM.innerHTML = $VAR
|
||||
message: XSS via innerHTML assignment
|
||||
severity: ERROR
|
||||
languages: [javascript, typescript]
|
||||
metadata:
|
||||
cwe: "CWE-79"
|
||||
|
||||
- id: hardcoded-aws-credentials
|
||||
patterns:
|
||||
- pattern: $KEY = "AKIA..."
|
||||
- metavariable-regex:
|
||||
metavariable: $KEY
|
||||
regex: "(aws_access_key_id|AWS_ACCESS_KEY_ID)"
|
||||
message: Hardcoded AWS credentials detected
|
||||
severity: ERROR
|
||||
languages: [python, javascript, java]
|
||||
|
||||
- id: path-traversal-open
|
||||
patterns:
|
||||
- pattern: open($PATH, ...)
|
||||
- pattern-not: open(os.path.join(SAFE_DIR, ...), ...)
|
||||
- metavariable-pattern:
|
||||
metavariable: $PATH
|
||||
patterns:
|
||||
- pattern: $REQ.get(...)
|
||||
message: Path traversal via user input
|
||||
severity: ERROR
|
||||
languages: [python]
|
||||
|
||||
- id: command-injection
|
||||
patterns:
|
||||
- pattern-either:
|
||||
- pattern: os.system($CMD)
|
||||
- pattern: subprocess.call($CMD, shell=True)
|
||||
- metavariable-pattern:
|
||||
metavariable: $CMD
|
||||
patterns:
|
||||
- pattern-either:
|
||||
- pattern: $X + $Y
|
||||
- pattern: f"...{$VAR}..."
|
||||
message: Command injection via shell=True
|
||||
severity: ERROR
|
||||
languages: [python]
|
||||
```
|
||||
|
||||
### Other Language Tools
|
||||
|
||||
**Java**: `mvn spotbugs:check`
|
||||
**Ruby**: `brakeman -o report.json -f json`
|
||||
**Go**: `gosec -fmt=json -out=gosec.json ./...`
|
||||
**Rust**: `cargo clippy -- -W clippy::unwrap_used`
|
||||
|
||||
## Vulnerability Patterns
|
||||
|
||||
### SQL Injection
|
||||
|
||||
**VULNERABLE**: String formatting/concatenation with user input in SQL queries
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
# Parameterized queries
|
||||
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
|
||||
User.objects.filter(id=user_id) # ORM
|
||||
```
|
||||
|
||||
### Cross-Site Scripting (XSS)
|
||||
|
||||
**VULNERABLE**: Direct HTML manipulation with unsanitized user input (innerHTML, outerHTML, document.write)
|
||||
|
||||
**SECURE**:
|
||||
```javascript
|
||||
// Use textContent for plain text
|
||||
element.textContent = userInput;
|
||||
|
||||
// React auto-escapes
|
||||
<div>{userInput}</div>
|
||||
|
||||
// Sanitize when HTML required
|
||||
import DOMPurify from 'dompurify';
|
||||
element.innerHTML = DOMPurify.sanitize(userInput);
|
||||
```
|
||||
|
||||
### Hardcoded Secrets
|
||||
|
||||
**VULNERABLE**: Hardcoded API keys, passwords, tokens in source code
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
import os
|
||||
API_KEY = os.environ.get('API_KEY')
|
||||
PASSWORD = os.getenv('DB_PASSWORD')
|
||||
```
|
||||
|
||||
### Path Traversal
|
||||
|
||||
**VULNERABLE**: Opening files using unsanitized user input
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
import os
|
||||
ALLOWED_DIR = '/var/www/uploads'
|
||||
file_name = request.args.get('file')
|
||||
file_path = os.path.join(ALLOWED_DIR, file_name)
|
||||
file_path = os.path.realpath(file_path)
|
||||
if not file_path.startswith(os.path.realpath(ALLOWED_DIR)):
|
||||
raise ValueError("Invalid file path")
|
||||
with open(file_path, 'r') as f:
|
||||
content = f.read()
|
||||
```
|
||||
|
||||
### Insecure Deserialization
|
||||
|
||||
**VULNERABLE**: pickle.loads(), yaml.load() with untrusted data
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
import json
|
||||
data = json.loads(user_input) # SECURE
|
||||
import yaml
|
||||
config = yaml.safe_load(user_input) # SECURE
|
||||
```
|
||||
|
||||
### Command Injection
|
||||
|
||||
**VULNERABLE**: os.system() or subprocess with shell=True and user input
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
subprocess.run(['ping', '-c', '4', user_input]) # Array args
|
||||
import shlex
|
||||
safe_input = shlex.quote(user_input) # Input validation
|
||||
```
|
||||
|
||||
### Insecure Random
|
||||
|
||||
**VULNERABLE**: random module for security-critical operations
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
import secrets
|
||||
token = secrets.token_hex(16)
|
||||
session_id = secrets.token_urlsafe(32)
|
||||
```
|
||||
|
||||
## Framework Security
|
||||
|
||||
### Django
|
||||
|
||||
**VULNERABLE**: @csrf_exempt, DEBUG=True, weak SECRET_KEY, missing security middleware
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
# settings.py
|
||||
DEBUG = False
|
||||
SECRET_KEY = os.environ.get('DJANGO_SECRET_KEY')
|
||||
|
||||
MIDDLEWARE = [
|
||||
'django.middleware.security.SecurityMiddleware',
|
||||
'django.middleware.csrf.CsrfViewMiddleware',
|
||||
'django.middleware.clickjacking.XFrameOptionsMiddleware',
|
||||
]
|
||||
|
||||
SECURE_SSL_REDIRECT = True
|
||||
SESSION_COOKIE_SECURE = True
|
||||
CSRF_COOKIE_SECURE = True
|
||||
X_FRAME_OPTIONS = 'DENY'
|
||||
```
|
||||
|
||||
### Flask
|
||||
|
||||
**VULNERABLE**: debug=True, weak secret_key, CORS wildcard
|
||||
|
||||
**SECURE**:
|
||||
```python
|
||||
import os
|
||||
from flask_talisman import Talisman
|
||||
|
||||
app.secret_key = os.environ.get('FLASK_SECRET_KEY')
|
||||
Talisman(app, force_https=True)
|
||||
CORS(app, origins=['https://example.com'])
|
||||
```
|
||||
|
||||
### Express.js
|
||||
|
||||
**VULNERABLE**: Missing helmet, CORS wildcard, no rate limiting
|
||||
|
||||
**SECURE**:
|
||||
```javascript
|
||||
const helmet = require('helmet');
|
||||
const rateLimit = require('express-rate-limit');
|
||||
|
||||
app.use(helmet());
|
||||
app.use(cors({ origin: 'https://example.com' }));
|
||||
app.use(rateLimit({ windowMs: 15 * 60 * 1000, max: 100 }));
|
||||
```
|
||||
|
||||
## Multi-Language Scanner Implementation
|
||||
|
||||
```python
|
||||
import json
|
||||
import subprocess
|
||||
from pathlib import Path
|
||||
from typing import Dict, List, Any
|
||||
from dataclasses import dataclass
|
||||
from datetime import datetime
|
||||
|
||||
@dataclass
|
||||
class SASTFinding:
|
||||
tool: str
|
||||
severity: str
|
||||
category: str
|
||||
title: str
|
||||
description: str
|
||||
file_path: str
|
||||
line_number: int
|
||||
cwe: str
|
||||
owasp: str
|
||||
confidence: str
|
||||
|
||||
class MultiLanguageSASTScanner:
|
||||
def __init__(self, project_path: str):
|
||||
self.project_path = Path(project_path)
|
||||
self.findings: List[SASTFinding] = []
|
||||
|
||||
def detect_languages(self) -> List[str]:
|
||||
"""Auto-detect languages"""
|
||||
languages = []
|
||||
indicators = {
|
||||
'python': ['*.py', 'requirements.txt'],
|
||||
'javascript': ['*.js', 'package.json'],
|
||||
'typescript': ['*.ts', 'tsconfig.json'],
|
||||
'java': ['*.java', 'pom.xml'],
|
||||
'ruby': ['*.rb', 'Gemfile'],
|
||||
'go': ['*.go', 'go.mod'],
|
||||
'rust': ['*.rs', 'Cargo.toml'],
|
||||
}
|
||||
for lang, patterns in indicators.items():
|
||||
for pattern in patterns:
|
||||
if list(self.project_path.glob(f'**/{pattern}')):
|
||||
languages.append(lang)
|
||||
break
|
||||
return languages
|
||||
|
||||
def run_comprehensive_sast(self) -> Dict[str, Any]:
|
||||
"""Execute all applicable SAST tools"""
|
||||
languages = self.detect_languages()
|
||||
|
||||
scan_results = {
|
||||
'timestamp': datetime.now().isoformat(),
|
||||
'languages': languages,
|
||||
'tools_executed': [],
|
||||
'findings': []
|
||||
}
|
||||
|
||||
self.run_semgrep_scan()
|
||||
scan_results['tools_executed'].append('semgrep')
|
||||
|
||||
if 'python' in languages:
|
||||
self.run_bandit_scan()
|
||||
scan_results['tools_executed'].append('bandit')
|
||||
if 'javascript' in languages or 'typescript' in languages:
|
||||
self.run_eslint_security_scan()
|
||||
scan_results['tools_executed'].append('eslint-security')
|
||||
|
||||
scan_results['findings'] = [vars(f) for f in self.findings]
|
||||
scan_results['summary'] = self.generate_summary()
|
||||
return scan_results
|
||||
|
||||
def run_semgrep_scan(self):
|
||||
"""Run Semgrep"""
|
||||
for ruleset in ['auto', 'p/security-audit', 'p/owasp-top-ten']:
|
||||
try:
|
||||
result = subprocess.run([
|
||||
'semgrep', '--config', ruleset, '--json', '--quiet',
|
||||
str(self.project_path)
|
||||
], capture_output=True, text=True, timeout=300)
|
||||
|
||||
if result.stdout:
|
||||
data = json.loads(result.stdout)
|
||||
for f in data.get('results', []):
|
||||
self.findings.append(SASTFinding(
|
||||
tool='semgrep',
|
||||
severity=f.get('extra', {}).get('severity', 'MEDIUM').upper(),
|
||||
category='sast',
|
||||
title=f.get('check_id', ''),
|
||||
description=f.get('extra', {}).get('message', ''),
|
||||
file_path=f.get('path', ''),
|
||||
line_number=f.get('start', {}).get('line', 0),
|
||||
cwe=f.get('extra', {}).get('metadata', {}).get('cwe', ''),
|
||||
owasp=f.get('extra', {}).get('metadata', {}).get('owasp', ''),
|
||||
confidence=f.get('extra', {}).get('metadata', {}).get('confidence', 'MEDIUM')
|
||||
))
|
||||
except Exception as e:
|
||||
print(f"Semgrep {ruleset} failed: {e}")
|
||||
|
||||
def generate_summary(self) -> Dict[str, Any]:
|
||||
"""Generate statistics"""
|
||||
severity_counts = {'CRITICAL': 0, 'HIGH': 0, 'MEDIUM': 0, 'LOW': 0}
|
||||
for f in self.findings:
|
||||
severity_counts[f.severity] = severity_counts.get(f.severity, 0) + 1
|
||||
|
||||
return {
|
||||
'total_findings': len(self.findings),
|
||||
'severity_breakdown': severity_counts,
|
||||
'risk_score': self.calculate_risk_score(severity_counts)
|
||||
}
|
||||
|
||||
def calculate_risk_score(self, severity_counts: Dict[str, int]) -> int:
|
||||
"""Risk score 0-100"""
|
||||
weights = {'CRITICAL': 10, 'HIGH': 7, 'MEDIUM': 4, 'LOW': 1}
|
||||
total = sum(weights[s] * c for s, c in severity_counts.items())
|
||||
return min(100, int((total / 50) * 100))
|
||||
```
|
||||
|
||||
## CI/CD Integration
|
||||
|
||||
### GitHub Actions
|
||||
|
||||
```yaml
|
||||
name: SAST Scan
|
||||
on:
|
||||
pull_request:
|
||||
branches: [main]
|
||||
|
||||
jobs:
|
||||
sast:
|
||||
runs-on: ubuntu-latest
|
||||
steps:
|
||||
- uses: actions/checkout@v3
|
||||
- uses: actions/setup-python@v4
|
||||
with:
|
||||
python-version: '3.11'
|
||||
|
||||
- name: Install tools
|
||||
run: |
|
||||
pip install bandit semgrep
|
||||
npm install -g eslint @eslint/plugin-security
|
||||
|
||||
- name: Run scans
|
||||
run: |
|
||||
bandit -r . -f json -o bandit.json || true
|
||||
semgrep --config=auto --json --output=semgrep.json || true
|
||||
|
||||
- name: Upload reports
|
||||
uses: actions/upload-artifact@v3
|
||||
with:
|
||||
name: sast-reports
|
||||
path: |
|
||||
bandit.json
|
||||
semgrep.json
|
||||
```
|
||||
|
||||
### GitLab CI
|
||||
|
||||
```yaml
|
||||
sast:
|
||||
stage: test
|
||||
image: python:3.11
|
||||
script:
|
||||
- pip install bandit semgrep
|
||||
- bandit -r . -f json -o bandit.json || true
|
||||
- semgrep --config=auto --json --output=semgrep.json || true
|
||||
artifacts:
|
||||
reports:
|
||||
sast: bandit.json
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Run early and often** - Pre-commit hooks and CI/CD
|
||||
2. **Combine multiple tools** - Different tools catch different vulnerabilities
|
||||
3. **Tune false positives** - Configure exclusions and thresholds
|
||||
4. **Prioritize findings** - Focus on CRITICAL/HIGH first
|
||||
5. **Framework-aware scanning** - Use specific rulesets
|
||||
6. **Custom rules** - Organization-specific patterns
|
||||
7. **Developer training** - Secure coding practices
|
||||
8. **Incremental remediation** - Fix gradually
|
||||
9. **Baseline management** - Track known issues
|
||||
10. **Regular updates** - Keep tools current
|
||||
|
||||
## Related Tools
|
||||
|
||||
- **security-secrets.md** - Advanced credential detection
|
||||
- **security-owasp.md** - OWASP Top 10 assessment
|
||||
- **security-api.md** - API security testing
|
||||
- **security-scan.md** - Comprehensive security scanning
|
||||
191
plugins/security-scanning/skills/sast-configuration/SKILL.md
Normal file
191
plugins/security-scanning/skills/sast-configuration/SKILL.md
Normal file
@@ -0,0 +1,191 @@
|
||||
---
|
||||
name: sast-configuration
|
||||
description: Configure Static Application Security Testing (SAST) tools for automated vulnerability detection in application code. Use when setting up security scanning, implementing DevSecOps practices, or automating code vulnerability detection.
|
||||
---
|
||||
|
||||
# SAST Configuration
|
||||
|
||||
Static Application Security Testing (SAST) tool setup, configuration, and custom rule creation for comprehensive security scanning across multiple programming languages.
|
||||
|
||||
## Overview
|
||||
|
||||
This skill provides comprehensive guidance for setting up and configuring SAST tools including Semgrep, SonarQube, and CodeQL. Use this skill when you need to:
|
||||
|
||||
- Set up SAST scanning in CI/CD pipelines
|
||||
- Create custom security rules for your codebase
|
||||
- Configure quality gates and compliance policies
|
||||
- Optimize scan performance and reduce false positives
|
||||
- Integrate multiple SAST tools for defense-in-depth
|
||||
|
||||
## Core Capabilities
|
||||
|
||||
### 1. Semgrep Configuration
|
||||
- Custom rule creation with pattern matching
|
||||
- Language-specific security rules (Python, JavaScript, Go, Java, etc.)
|
||||
- CI/CD integration (GitHub Actions, GitLab CI, Jenkins)
|
||||
- False positive tuning and rule optimization
|
||||
- Organizational policy enforcement
|
||||
|
||||
### 2. SonarQube Setup
|
||||
- Quality gate configuration
|
||||
- Security hotspot analysis
|
||||
- Code coverage and technical debt tracking
|
||||
- Custom quality profiles for languages
|
||||
- Enterprise integration with LDAP/SAML
|
||||
|
||||
### 3. CodeQL Analysis
|
||||
- GitHub Advanced Security integration
|
||||
- Custom query development
|
||||
- Vulnerability variant analysis
|
||||
- Security research workflows
|
||||
- SARIF result processing
|
||||
|
||||
## Quick Start
|
||||
|
||||
### Initial Assessment
|
||||
1. Identify primary programming languages in your codebase
|
||||
2. Determine compliance requirements (PCI-DSS, SOC 2, etc.)
|
||||
3. Choose SAST tool based on language support and integration needs
|
||||
4. Review baseline scan to understand current security posture
|
||||
|
||||
### Basic Setup
|
||||
```bash
|
||||
# Semgrep quick start
|
||||
pip install semgrep
|
||||
semgrep --config=auto --error
|
||||
|
||||
# SonarQube with Docker
|
||||
docker run -d --name sonarqube -p 9000:9000 sonarqube:latest
|
||||
|
||||
# CodeQL CLI setup
|
||||
gh extension install github/gh-codeql
|
||||
codeql database create mydb --language=python
|
||||
```
|
||||
|
||||
## Reference Documentation
|
||||
|
||||
- [Semgrep Rule Creation](references/semgrep-rules.md) - Pattern-based security rule development
|
||||
- [SonarQube Configuration](references/sonarqube-config.md) - Quality gates and profiles
|
||||
- [CodeQL Setup Guide](references/codeql-setup.md) - Query development and workflows
|
||||
|
||||
## Templates & Assets
|
||||
|
||||
- [semgrep-config.yml](assets/semgrep-config.yml) - Production-ready Semgrep configuration
|
||||
- [sonarqube-settings.xml](assets/sonarqube-settings.xml) - SonarQube quality profile template
|
||||
- [run-sast.sh](scripts/run-sast.sh) - Automated SAST execution script
|
||||
|
||||
## Integration Patterns
|
||||
|
||||
### CI/CD Pipeline Integration
|
||||
```yaml
|
||||
# GitHub Actions example
|
||||
- name: Run Semgrep
|
||||
uses: returntocorp/semgrep-action@v1
|
||||
with:
|
||||
config: >-
|
||||
p/security-audit
|
||||
p/owasp-top-ten
|
||||
```
|
||||
|
||||
### Pre-commit Hook
|
||||
```bash
|
||||
# .pre-commit-config.yaml
|
||||
- repo: https://github.com/returntocorp/semgrep
|
||||
rev: v1.45.0
|
||||
hooks:
|
||||
- id: semgrep
|
||||
args: ['--config=auto', '--error']
|
||||
```
|
||||
|
||||
## Best Practices
|
||||
|
||||
1. **Start with Baseline**
|
||||
- Run initial scan to establish security baseline
|
||||
- Prioritize critical and high severity findings
|
||||
- Create remediation roadmap
|
||||
|
||||
2. **Incremental Adoption**
|
||||
- Begin with security-focused rules
|
||||
- Gradually add code quality rules
|
||||
- Implement blocking only for critical issues
|
||||
|
||||
3. **False Positive Management**
|
||||
- Document legitimate suppressions
|
||||
- Create allow lists for known safe patterns
|
||||
- Regularly review suppressed findings
|
||||
|
||||
4. **Performance Optimization**
|
||||
- Exclude test files and generated code
|
||||
- Use incremental scanning for large codebases
|
||||
- Cache scan results in CI/CD
|
||||
|
||||
5. **Team Enablement**
|
||||
- Provide security training for developers
|
||||
- Create internal documentation for common patterns
|
||||
- Establish security champions program
|
||||
|
||||
## Common Use Cases
|
||||
|
||||
### New Project Setup
|
||||
```bash
|
||||
./scripts/run-sast.sh --setup --language python --tools semgrep,sonarqube
|
||||
```
|
||||
|
||||
### Custom Rule Development
|
||||
```yaml
|
||||
# See references/semgrep-rules.md for detailed examples
|
||||
rules:
|
||||
- id: hardcoded-jwt-secret
|
||||
pattern: jwt.encode($DATA, "...", ...)
|
||||
message: JWT secret should not be hardcoded
|
||||
severity: ERROR
|
||||
```
|
||||
|
||||
### Compliance Scanning
|
||||
```bash
|
||||
# PCI-DSS focused scan
|
||||
semgrep --config p/pci-dss --json -o pci-scan-results.json
|
||||
```
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### High False Positive Rate
|
||||
- Review and tune rule sensitivity
|
||||
- Add path filters to exclude test files
|
||||
- Use nostmt metadata for noisy patterns
|
||||
- Create organization-specific rule exceptions
|
||||
|
||||
### Performance Issues
|
||||
- Enable incremental scanning
|
||||
- Parallelize scans across modules
|
||||
- Optimize rule patterns for efficiency
|
||||
- Cache dependencies and scan results
|
||||
|
||||
### Integration Failures
|
||||
- Verify API tokens and credentials
|
||||
- Check network connectivity and proxy settings
|
||||
- Review SARIF output format compatibility
|
||||
- Validate CI/CD runner permissions
|
||||
|
||||
## Related Skills
|
||||
|
||||
- [OWASP Top 10 Checklist](../owasp-top10-checklist/SKILL.md)
|
||||
- [Container Security](../container-security/SKILL.md)
|
||||
- [Dependency Scanning](../dependency-scanning/SKILL.md)
|
||||
|
||||
## Tool Comparison
|
||||
|
||||
| Tool | Best For | Language Support | Cost | Integration |
|
||||
|------|----------|------------------|------|-------------|
|
||||
| Semgrep | Custom rules, fast scans | 30+ languages | Free/Enterprise | Excellent |
|
||||
| SonarQube | Code quality + security | 25+ languages | Free/Commercial | Good |
|
||||
| CodeQL | Deep analysis, research | 10+ languages | Free (OSS) | GitHub native |
|
||||
|
||||
## Next Steps
|
||||
|
||||
1. Complete initial SAST tool setup
|
||||
2. Run baseline security scan
|
||||
3. Create custom rules for organization-specific patterns
|
||||
4. Integrate into CI/CD pipeline
|
||||
5. Establish security gate policies
|
||||
6. Train development team on findings and remediation
|
||||
Reference in New Issue
Block a user