Skip to content
Back to skills

Trae Security Review

ASecurity

用于代码安全扫描,或用户要求对 MR/PR、commit、分支、代码差异或未提交变更执行安全审查、漏洞扫描或安全审计时使用。只报告可证实可利用且由本次变更引入的风险。不得用于通用代码审查、普通编码、功能实现或修复请求,也不得用于运行时故障排查。

  • 6 stars
  • 0 votes
  • 0 copies
  • 0 views
  • Added November 7, 2026
ai-agentsrustgoshellsqlreactvueangulargitapisecurity

Works with

  • cli
  • api

Security analysis

A100/100

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

Scanned November 7, 2026

npx -y skills add MuLiuSaMa/MeowCode --skill trae-security-review --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Trae Security Review?

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

Security grade badge for Trae Security Review
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/muliusama-trae-security-review/badge)](https://www.skillsdirectory.com/skills/muliusama-trae-security-review)

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: TRAE-security-review
description: 用于代码安全扫描,或用户要求对 MR/PR、commit、分支、代码差异或未提交变更执行安全审查、漏洞扫描或安全审计时使用。只报告可证实可利用且由本次变更引入的风险。不得用于通用代码审查、普通编码、功能实现或修复请求,也不得用于运行时故障排查。
---
## 0. Operating Principles (Non-negotiable)

These rules govern every finding. A finding that violates any rule MUST be dropped.

- **Right-side line numbers only.** Every location refers to lines as they appear *after* the change. Pre-change line numbers are invalid.
- **Range form `[L_start, L_end]`.** A single-line issue collapses to identical start/end.
- **Diff-introduced surface only.** A weakness that already existed before this change set and was not touched is out of scope.
- **Reportable ⇔ Demonstrably exploitable.** If you cannot articulate (a) where attacker-controlled input enters and (b) where it reaches a dangerous sink or boundary, do not report.
- **Excluded by default:** availability/DoS, throttling, code style, anything confined to test/fixture code.
- **Confidence floor = 0.8.** Below that → drop, or hand off to downstream filtering / human review.
- **No patches.** Identify and explain. Do not write replacement code in the report.

---

## 1. Scope Resolution

Before reading any diff, the scope of review must be unambiguous.

### 1.1 If the user already specified a scope
Use it verbatim — never broaden or narrow it.

### 1.2 If the scope is missing or ambiguous
Prefer the `AskUserQuestion` tool with these four options:

1. Uncommitted / staged changes in the current workspace
2. Diff against a named branch (ask for the branch name)
3. A specific MR / PR (ask for the identifier)
4. A given list of files (ask for the paths)

If `AskUserQuestion` is unavailable, ask the same four options as numbered plain text.

### 1.3 Default fallback
If the user declines to specify and asks you to proceed, audit the **branch-vs-`origin/HEAD`** delta using the data-collection chain in §2.

---

## 2. Diff Data Collection

Run the following four probes — they are the authoritative input for the audit. Each probe is wrapped so it can be embedded into the working buffer.

| Probe | Command | Purpose |
|---|---|---|
| Working tree state | ``!`git status` `` | Detect untracked / staged anomalies |
| Touched files | ``!`git diff --name-only origin/HEAD...` `` | Enumerate the file surface |
| Commit timeline | ``!`git log --no-decorate origin/HEAD...` `` | Reconstruct intent across commits |
| Authoritative diff | ``!`git diff --merge-base origin/HEAD` `` | The single source of truth for change content |

The diff produced by the last probe is the **only** authoritative change content. Inline snippets in chat are advisory; the diff overrides.

### 2.1 Probe failure cascade
If the merge-base diff fails, walk down this list and stop at the first success:

1. `git diff origin/HEAD...`
2. `git diff HEAD~1`
3. `git diff` (workspace)
4. Re-prompt the user via `AskUserQuestion` for an explicit scope.

If a single auxiliary tool (e.g. `SearchCodebase`) is intermittently unavailable, continue with the rest and explicitly mark conclusions as evidence-bounded.

---

## 3. Context Acquisition (Mandatory before any finding)

Snippet-only reasoning is forbidden. Every candidate finding must be backed by repository-level evidence collected in this order:

1. Confirm scope (§1).
2. Collect diff + commits (§2).
3. Use `SearchCodebase` to locate (a) input entry points / trust boundaries, (b) existing sanitizer / validator / authZ helpers in the project.
4. Use `Read` to inspect the **full** body of touched files plus the relevant call-chain neighbors.
5. Only after the above is complete, draft findings.

For each candidate finding, you must collect:

- **Source-side evidence** — concrete attacker-controlled entry on the execution path.
- **Sink-side evidence** — the dangerous operation, security boundary crossing, or sensitive-data exposure that the input reaches.
- **Bypass-context evidence** — whether nearby code already sanitizes / encodes / validates / authorizes; whether existing project helpers neutralize the issue.

If either *source-side* or *sink-side* cannot be substantiated from repository code, the finding is dropped.

---

## 4. Author-Intent Reconstruction

Before classifying anything as a vulnerability, infer **why the author wrote this diff**. The pattern of edits often disambiguates intent:

- New error handling / null-guards → defensive refactor, raise the bar for "missing-validation" findings.
- Algorithm or data-structure swap → behavior change; check invariants of callers.
- Dependency bump + adapter glue → API-shape migration; check if old security assumptions still hold.
- Variable / module rename → low semantic change; usually no security delta.

Hold the inferred intent as a one-sentence summary and use it as a tie-breaker when a candidate finding is ambiguous: a finding that contradicts a clearly defensive intent likely needs more evidence, not less.

---

## 5. Vulnerability Surface

Audit only the categories below. Each category lists the patterns that count; anything not in the list is out of scope unless it composes one of these.

### 5.1 Untrusted-input handling
- SQL injection through unsanitized values.
- OS command injection in subprocess / shell-out paths.
- XML external entity (XXE) in XML parsers.
- Server-side template injection.
- NoSQL query injection.
- Path traversal in filesystem operations.

### 5.2 AuthN / AuthZ defects
- Authentication bypass via flawed predicate logic.
- Vertical / horizontal privilege escalation.
- Broken session lifecycle: fixation, reuse-after-logout, missing rotation.
- JWT misuse: weak secret, `alg=none`, missing `aud` / `iss` / `exp` checks.
- Object-level access gaps (IDOR-class).

### 5.3 Crypto & secret handling
- Hardcoded keys / passwords / tokens in source.
- Use of broken or weakened algorithms (MD5, SHA1, ECB, RC4, …).
- Insecure key persistence or transport.
- Predictable randomness in security contexts (`Math.random`, non-CSPRNG).
- Disabled or stubbed certificate validation.

### 5.4 Code execution & injection
- Remote code execution via unsafe deserialization (`pickle`, `ObjectInputStream`, …).
- YAML loaders that instantiate arbitrary types (`yaml.load` without `SafeLoader`).
- `eval` / `Function` / `exec` over untrusted strings.
- XSS — reflected / stored / DOM — in web surfaces (subject to the framework carve-outs in §8).

### 5.5 Sensitive-data exposure
- Secrets, credentials, or PII written to logs or persistent stores.
- Endpoint responses returning more than the consumer should see.
- Debug / stack / build-info leakage on production paths.

> Local-network-only exploitability does **not** lower severity. A local-only RCE is still HIGH.

---

## 6. Audit Procedure

Three passes, in order. Do not interleave.

**Pass A — Project security baseline.** Identify the project's existing security primitives: which validators, escapers, ORMs, auth middleware, crypto wrappers are already in use. The project's *own* patterns are the comparison baseline.

**Pass B — Deviation map.** For each touched file, ask: does the new code use the project's established primitives, or does it introduce a fresh, ad-hoc handling that bypasses them? Deviations are the highest-yield finding generators.

**Pass C — Source-to-sink trace.** For each suspicious site, trace the control / data flow:
- where the value enters,
- which boundaries it crosses,
- whether any encoding / validation / authZ check exists on the path,
- where it lands.

Anything that does not survive Pass C is dropped.

---

## 7. Severity & Confidence

### 7.1 Severity bands

| Severity | Trigger |
|---|---|
| **HIGH** | Directly exploitable: RCE, authN bypass, large-scope data breach, vertical privilege escalation. |
| **MEDIUM** | Exploitable under specific but realistic conditions, with material impact. |
| **LOW** | Defense-in-depth gap with marginal direct impact. Reported only when the chain is concrete. |

### 7.2 Confidence

| Range | Meaning | Action |
|---|---|---|
| 0.90 – 1.00 | Concrete attack path, end-to-end traceable in this repo. | Report. |
| 0.80 – 0.89 | Recognized vulnerable pattern, prerequisites plausibly satisfiable. | Report. |
| 0.70 – 0.79 | Suspicious shape, prerequisites speculative. | **Drop.** |
| < 0.70 | Speculative. | **Drop.** |

> Bias toward false negatives. Missing a borderline finding is preferable to flooding the report; a noisy report destroys reviewer trust faster than a missed defense-in-depth issue.

---

## 8. Hard Exclusions (never report)

These are not waivable on a per-finding basis.

### 8.1 Out of scope by category
- Availability: DoS, resource exhaustion, throttling gaps, memory / CPU pressure.
- Outdated third-party dependencies (handled by separate tooling).
- Findings inside documentation files (`*.md`, design docs, RFCs).
- "Missing audit log" / "missing hardening" — neither is, on its own, a vulnerability.
- Findings confined to unit-test or fixture code.
- Race / TOCTOU patterns without a concrete reachable path.
- Regex injection and ReDoS in any form.
- Log entries containing un-sanitized user input ("log spoofing"); only secrets / credentials / PII in logs qualify.
- Including user-controlled content inside an AI system prompt.
- SSRF where only the URL **path** is controllable; SSRF counts only when host or protocol is influenceable.

### 8.2 Framework & language carve-outs
- React / Angular / Vue are XSS-safe by default. A finding requires an explicit escape hatch — `dangerouslySetInnerHTML`, `bypassSecurityTrust*`, `v-html`, or equivalent.
- Missing authN / authZ in client-side JS / TS is **not** a vulnerability; those checks live on the server.
- Memory-safety issues (buffer overflow, UAF, double free) in memory-safe languages (Rust, Go, managed JVM/CLR/JS) are not reported.
- Command injection in shell scripts is unreachable by default; require a demonstrable untrusted-input entry point.
- Findings in `*.ipynb` are unreachable by default; same evidence bar as shell scripts.
- Environment variables and CLI flags are trusted inputs — any chain that depends on attacker-controlled env / flags is invalid.
- UUIDs are unguessable; do not flag missing UUID validation.
- GitHub Actions workflow issues require an explicit untrusted-trigger path before being reportable.

### 8.3 Subtle web bugs
Tabnabbing, XS-Leaks, prototype pollution, open redirect — only if the exploit chain is high-confidence and end-to-end visible in the diff. Default to drop.

### 8.4 Logging precedents
- Logging URLs is safe.
- Logging non-PII business values is safe even if the value "feels" sensitive.
- Only log entries exposing secrets / credentials / PII are reportable.

---

## 9. Output

### 9.1 Clean diff
If nothing survives §3 → §8, emit a single-line summary:

> ✅ No exploitable issues found in the reviewed change set.

### 9.2 Findings table
Otherwise, output exactly one table:

| # | Category | Title | Severity | Confidence | Evidence (Source → Sink) | Recommendation | Location |
|---|---|---|---|---|---|---|---|
| 1 | sql_injection | Concatenated query in `lookup_user` | HIGH | 0.92 | `req.query.q` (router L17) → string concat → `db.query` (svc L88) | Switch to parameterized query via the project's existing `db.safe_query` helper | [`services/user.py:[80, 95]`](file:///abs/path/services/user.py#L80-L95) |

Column rules:

- **Category** uses the snake_case taxonomy from §5 (e.g. `xxe`, `idor`, `unsafe_deserialization`, `weak_crypto`).
- **Severity** ∈ {HIGH, MEDIUM, LOW} per §7.1.
- **Confidence** is the numeric value, two decimals.
- **Evidence** must encode both source and sink; "→" separates them.
- **Location** uses the right-side line range and the `file:///…#Lstart-Lend` link form.
- **Recommendation** is prose, not code. No patches.

Findings are ordered by severity desc, then confidence desc.

---

## 10. Final Self-Check (before emitting the table)

Run this checklist; remove any row that fails any item.

1. Does the row's location use **post-change** line numbers?
2. Is the issue **introduced or worsened by this diff**, not pre-existing-and-untouched?
3. Are both **source** and **sink** present in the Evidence cell?
4. Is the Confidence ≥ 0.80?
5. Does the row survive every Hard Exclusion in §8?
6. Is the Recommendation prose only, with **no code patch**?

If any answer is "no", drop the row before output.

Files in this skill

  • README.md3.2 KB
  • SKILL.md12.4 KB

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.