Skip to content
Back to skills

Flow Trace

ASecurity

Trace data flow across files from source to sink. Use for cross-file taint analysis, understanding how user input reaches dangerous sinks, and documenting vulnerability paths.

  • 4 stars
  • 0 votes
  • 0 copies
  • 2 views
  • Added September 12, 2026
securitybashsqlapidatabasesecuritydocumentation

Works with

  • cli
  • api

Security analysis

A100/100

Pro scans all 2 files and shows the line behind each finding

Scanned September 12, 2026

npx -y skills add aibot88/sec_skill_store --skill flow-trace --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Flow Trace?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Flow Trace
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/aibot88-flow-trace/badge)](https://www.skillsdirectory.com/skills/aibot88-flow-trace)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: flow-trace
description: Trace data flow across files from source to sink. Use for cross-file taint analysis, understanding how user input reaches dangerous sinks, and documenting vulnerability paths.
---

# Flow Trace Skill

## Purpose

Trace data flow from source (user input) to sink (dangerous function) across multiple files. Outputs structured flow_edges for visualization and documentation.

## When to Use

- After finding a potential vulnerability, trace the full path
- Understanding how user input reaches a dangerous sink
- Documenting the attack path for a finding
- Verifying if a source can actually reach a sink

## Input Requirements

Provide either:
1. **Starting point**: Source file and function/variable
2. **Ending point**: Sink file and function
3. **Both**: For verifying connectivity

## Output Format

Output flow edges in this structure:

```yaml
flow_edges:
  - from_file: "src/routes/api.rs"
    from_line: 45
    from_symbol: "request.params['id']"
    to_file: "src/routes/api.rs"
    to_line: 48
    to_symbol: "get_user(id)"
    kind: taint
    notes: "User input passed to function"

  - from_file: "src/routes/api.rs"
    from_line: 48
    from_symbol: "get_user(id)"
    to_file: "src/db/users.rs"
    to_line: 23
    to_symbol: "User::find(id)"
    kind: dataflow
    notes: "Function call crosses file boundary"

  - from_file: "src/db/users.rs"
    from_line: 23
    from_symbol: "User::find(id)"
    to_file: "src/db/users.rs"
    to_line: 25
    to_symbol: "db.query(format!(...))"
    kind: taint
    notes: "SINK: Unsanitized input in SQL query"
```

## Flow Edge Types

| Kind | Description |
|------|-------------|
| `taint` | User-controlled data propagation |
| `dataflow` | General data flow (assignments, returns) |
| `authz` | Authorization/permission check flow |
| `controlflow` | Conditional branches affecting security |

## Tracing Process

### 1. Identify Source
```
Common sources:
- HTTP request parameters, body, headers
- File uploads (filename, content)
- Database values (stored attacks)
- Environment variables
- WebSocket messages
- Command line arguments
```

### 2. Follow Transformations
```
Track through:
- Variable assignments: let x = source
- Function parameters: foo(source)
- Return values: return process(source)
- Object properties: obj.field = source
- Array operations: arr.push(source)
```

### 3. Cross File Boundaries
```
Look for:
- Function calls to other modules
- Imports/requires
- Class inheritance
- Trait implementations
- Interface method calls
```

### 4. Identify Sinks
```
Dangerous sinks by type:
- SQL: db.query(), db.execute(), raw SQL
- Command: system(), exec(), spawn()
- XSS: innerHTML, document.write()
- File: open(), readFile(), writeFile()
- SSRF: http.get(url), fetch(url)
```

## Example Trace

### Starting Point
```
File: src/api/users.rs:15
Symbol: request.query("id")
```

### Trace Output
```yaml
flow_edges:
  - from_file: "src/api/users.rs"
    from_line: 15
    from_symbol: "request.query('id')"
    to_file: "src/api/users.rs"
    to_line: 16
    to_symbol: "id"
    kind: taint
    notes: "Query param extracted"

  - from_file: "src/api/users.rs"
    from_line: 16
    from_symbol: "id"
    to_file: "src/api/users.rs"
    to_line: 18
    to_symbol: "UserService::get(id)"
    kind: dataflow
    notes: "Passed to service layer"

  - from_file: "src/api/users.rs"
    from_line: 18
    from_symbol: "UserService::get(id)"
    to_file: "src/services/user.rs"
    to_line: 42
    to_symbol: "UserRepository::find(id)"
    kind: dataflow
    notes: "Service delegates to repository"

  - from_file: "src/services/user.rs"
    from_line: 42
    from_symbol: "UserRepository::find(id)"
    to_file: "src/db/repository.rs"
    to_line: 78
    to_symbol: "db.execute(query)"
    kind: taint
    notes: "SINK: SQL execution"

summary: "User input from query param flows through 4 hops to SQL sink"
sink_type: "SQL Injection"
sanitization_found: false
```

## Summary Format

After tracing, provide:
```
summary: "<source> -> ... (<N> hops) -> <sink>"
sink_type: "SQL Injection|Command Injection|XSS|Path Traversal|SSRF|..."
sanitization_found: true|false
sanitization_notes: "Input validated at step 2 with regex"
```

## Tips for Effective Tracing

1. **Start broad, narrow down**: First identify all call sites, then trace specific paths
2. **Watch for sanitization**: Note if/where input is validated or escaped
3. **Track transformations**: URL decode, base64, JSON parse can bypass filters
4. **Check error paths**: Error handlers often have different (weaker) validation
5. **Follow async flows**: Callbacks, promises, async/await can obscure data flow

## KYCo Integration

After tracing a vulnerability path, register the finding and flow edges:

### 1. Check Active Project
```bash
kyco project list
```

### 2. Create Finding with Taint Path
```bash
kyco finding create \
  --title "SQL Injection via user ID parameter" \
  --project PROJECT_ID \
  --severity high \
  --cwe CWE-89 \
  --attack-scenario "User input flows from request.params['id'] through 4 hops to db.query() without sanitization"
```

### 3. Import SARIF/Semgrep Results (if available)
```bash
# Import from security scanner output
kyco finding import semgrep-results.json --project PROJECT_ID

# Auto-detect format
kyco finding import scan-results.sarif --project PROJECT_ID
```

### 4. View Flow in Kanban
The KYCo GUI Kanban board visualizes flow traces. Open with:
```bash
kyco gui
```
Then click on a finding to see the SOURCE → intermediate → SINK flow graph.

Files in this skill

  • SKILL.md5.4 KB
  • source.json670 B

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.