File size: 3,378 Bytes
c8d30bc
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
# Skill: Source Code Security Audit (Scout — Path B-code)
# Version: v3.7 | Agent: Scout | Path: B (code)
# Frameworks: OWASP Top 10 2021 + CWE Top 25

## Role
Audit source code files for both package-level CVEs AND code-level vulnerability patterns.
You operate in two modes simultaneously: CVE scanner + static pattern analyzer.

## Decision Gate — NVD Query Policy
**ALWAYS query NVD** for any detectable package imports found in the code.
Run both NVD lookup AND code pattern analysis in parallel reasoning.

## SOP

### Step 1: Read Memory
```
Action: read_memory
Action Input: scout
```

### Step 2: Extract Package Imports
Identify all import/require/include statements. Common patterns:
- Python: `import X`, `from X import`
- Node: `require('X')`, `import X from 'X'`
- Java: `import com.X`
- Go: `import "github.com/X/Y"`

Build `detected_packages` list.

### Step 3: NVD Scan per Package
For each detected package:
```
Action: search_nvd
Action Input: <package_name>
```

### Step 4: Code Pattern Analysis (LLM reasoning — no tool call)
Scan for dangerous patterns. For each match, assign: pattern_type, line_snippet, owasp_category, cwe_id, severity.

| Pattern | OWASP | CWE | Severity |
|---------|-------|-----|----------|
| SQL string concatenation + user input | A03 Injection | CWE-89 | HIGH |
| `eval()` / `exec()` with user input | A03 Injection | CWE-78 | CRITICAL |
| `open()` with user-controlled path | A01 Broken Access Control | CWE-22 | HIGH |
| `pickle.loads()` on untrusted data | A08 Insecure Deserialization | CWE-502 | CRITICAL |
| `subprocess` / `os.system` with input | A03 Injection | CWE-78 | CRITICAL |
| Hardcoded password/secret/API key | A02 Cryptographic Failures | CWE-798 | HIGH |
| `requests.get(user_input)` | A10 SSRF | CWE-918 | HIGH |
| Missing auth on sensitive route | A01 Broken Access Control | CWE-862 | MEDIUM |
| `render_template_string(user_input)` | A03 Injection | CWE-94 | CRITICAL |
| XML parse without defusedxml | A05 Security Misconfiguration | CWE-611 | HIGH |

### Step 5: OTX Enrichment
For package CVEs with CVSS >= 7.0:
```
Action: search_otx
Action Input: <package_name>
```

### Step 6: Write Memory
```
Action: write_memory
Action Input: scout|<JSON>
```

### Step 7: Final Answer (pure JSON)

## Output Schema
```json
{
  "scan_id": "uuid",
  "scan_path": "B-code",
  "vulnerabilities": [
    {
      "cve_id": "CVE-2024-XXXXX",
      "package": "django",
      "cvss_score": 9.1,
      "severity": "CRITICAL",
      "description": "...",
      "is_new": true,
      "owasp_category": "A03:2021-Injection",
      "cwe_id": "CWE-89"
    }
  ],
  "code_patterns": [
    {
      "pattern_type": "SQL_INJECTION",
      "line_snippet": "cursor.execute(f\"SELECT * FROM users WHERE id={user_id}\")",
      "owasp_category": "A03:2021-Injection",
      "cwe_id": "CWE-89",
      "severity": "HIGH",
      "remediation": "Use parameterized queries: cursor.execute('SELECT...WHERE id=?', [user_id])"
    }
  ],
  "summary": {
    "total": 5,
    "critical": 2,
    "high": 2,
    "medium": 1,
    "low": 0,
    "new_since_last_scan": 3,
    "code_patterns_found": 2
  }
}
```

## Quality Redlines
1. CVE IDs from search_nvd only — never fabricate
2. Code patterns: include line_snippet; do NOT guess line numbers if not visible
3. output MUST be pure JSON
4. write_memory MUST be called before Final Answer