SunWeb3Sec/llm-sast-scanner

Skill

A SAST skill that gives AI coding agents structured vulnerability detection across 34 vulnerability classes.

SunWeb3SecMarkdown290 starsScanned Oct. 14th, 2026at fedaf6aView source

Trust score

85/100High trust
Likely 69–100 · medium confidence

Scanned Oct. 14th, 2026 at fedaf6a against 23 rules · How scoring works

For developersOpen rawGET /c/SunWeb3Sec/llm-sast-scanner/report.json
At a glance

At a glance

Contains
1 skill · 1 tool
Its tools can
Create or change data 1Read data 1
Issues flagged
1 high1 of 23 rule checks, severity as assessed for this repo
Where issues are
  • skills-plugins/llm-sast-scanner (skill)1 of 8
No issues in the other 1 of 2.
Trust signals
Publisher not verifiedUnsigned buildActively maintained

What to fix first

1 issue, most severe first. Each one points to the exact code, with the recommended fix and a prompt you can paste into your coding agent.

  1. 1HighSkill/Plugin Impersonation, Typosquatting & Publisher Spoofing
    skills-plugins/llm-sast-scanner (skill) · ATR-P0008
    The skill's own frontmatter slug (name: llm-sast-scanner) is generic and matches the real repository name, but the README's installation section twice directs users -- for both Claude Code and OpenAI Codex -- to clone from github.com/anthropic-lab/llm-sast-scanner.git. That organization is a trust-implying lookalike of the Anthropic brand; the artifact's actual, verified provenance is SunWeb3Sec/llm-sast-scanner. Directing installers to a different, brand-adjacent publisher than the artifact's real origin is install-instruction impersonation, which is in scope for this rule alongside manifest-slug impersonation.
    ---
    name: llm-sast-scanner
    description: >
      General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
      Trigger when the user asks to: "analyze code for vulnerabilities", "review code security", "find security bugs",
      "do a SAST scan", "check for [vulnerability type] in code", "audit source code", or requests a security
      code review of any language or framework. Covers 34 vulnerability classes across web, API, auth, mobile, and logic layers.
    metadata:
      version: "1.4.0"
      domain: application-security
      references: 34 vulnerability knowledge bases
    Show 2 more locations
    ## Installation
    
    ### Git (recommended)
    
    ```bash
    # Claude Code
    git clone https://github.com/anthropic-lab/llm-sast-scanner.git
    cp -r llm-sast-scanner/llm-sast-scanner/ ~/.claude/skills/
    
    # OpenAI Codex
    git clone https://github.com/anthropic-lab/llm-sast-scanner.git
    cp -r llm-sast-scanner/llm-sast-scanner/ ~/.codex/skills/
    ```
    ---
    name: llm-sast-scanner
    description: >
      General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
      Trigger when the user asks to: "analyze code for vulnerabilities", "review code security", "find security bugs",
      "do a SAST scan", "check for [vulnerability type] in code", "audit source code", or requests a security
      code review of any language or framework. Covers 34 vulnerability classes across web, API, auth, mobile, and logic layers.
    metadata:
      version: "1.4.0"
      domain: application-security
      references: 34 vulnerability knowledge bases
    ---
    Recommended fix

    Correct the README install commands to clone from the verified publisher origin (github.com/SunWeb3Sec/llm-sast-scanner) in place of the anthropic-lab organization, and remove any wording that could imply Anthropic is the publisher or distributor of this skill.

What’s inside

BlueRock found 1 component in this repository. Each is checked against the rules for its type.

Skillskills-plugins/llm-sast-scannerllm-sast-scanner85High trust1 high

Its tools can

Create or change data 1Read data 1

What stood out

  • README.md install instructions direct users to clone from github.com/anthropic-lab/llm-sast-scanner.git, an org name implying Anthropic authorship that does not match the real, verifiable publisher (SunWeb3Sec) -- a human-facing distribution-channel impersonation risk.
  • Gitleaks flagged 3 unique 'secret' values (my-secret-key-12345, MySecretKey12345, and a misclassified CVE identifier) inside explicitly-labeled teaching examples in '**VULN**' documentation sections -- all are illustrative anti-patterns, none are live secrets, adjudicated SECURE.
  • Two YARA 'webshell' signature hits (Zeus_Webshell_Command_Parameter, confidence 88) fired on php_security.md and expression_language_injection.md due to documented PHP/Python command-execution sinks (eval/exec/system) used as defensive/educational SAST reference material -- adjudicated SECURE for ATR-R0001 (Weaponization).
  • No .bluerock.yaml/bluerock.yaml policy file present in the repo -- default full-scope scan with no overrides applied.

Skill rules 1 of 8 flagged

5 rules passed · 2 did not applyShow
PassedCapability Transparency: Declared Purpose vs. Actual Behavior (Shadow Features)ATR-P0001Details

Why it got this result

llm-sast-scanner is a pure prompt/instruction skill (SKILL.md frontmatter + 34 markdown reference files). It ships zero executable code -- no scripts, no bundled binaries, no package.json, no subprocess/network/filesystem-access code of its own. The declared purpose (static code-vulnerability analysis via taint tracing, producing a markdown report) matches the entirety of its content: the body only instructs the host model to read/search the TARGET repo's source files (via whatever Read/Grep/Bash tools the host already grants) and write a report file -- behavior fully implied by a 'SAST scanner' skill. No hidden network egress, no credential reads, no undisclosed exec capability was found anywhere in the artifact.

Why it matters

Install-time trust is granted from the artifact's self-description, so any bundled capability the description does not disclose -- network egress, credential reads, or subprocess execution -- runs as an unconsented backdoor with the host agent's full privileges.

Evidence

---
name: llm-sast-scanner
description: >
  General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
  Trigger when the user asks to: "analyze code for vulnerabilities", "review code security", "find security bugs",
  "do a SAST scan", "check for [vulnerability type] in code", "audit source code", or requests a security
  code review of any language or framework. Covers 34 vulnerability classes across web, API, auth, mobile, and logic layers.
metadata:
  version: "1.4.0"
  domain: application-security
  references: 34 vulnerability knowledge bases
---

# SAST Vulnerability Analysis
…
PassedConsent Suppression and Guardrail / Human-in-the-Loop Subversion via Trusted InstructionsATR-P0002Details

Why it got this result

Searched SKILL.md and all reference files for consent-bypass / disclosure-suppression imperatives directed at the host model (never ask, auto-approve, do not tell the user, override system prompt, autonomous mode, bypass confirmation). The only hits are unrelated uses of 'silently' and 'bypass confirmation' describing TARGET APPLICATION vulnerability patterns the skill is instructed to DETECT (e.g., CSRF/clickjacking bypassing a dialog in scanned code, or a Judge verdict table noting 'Drop silently' for a dropped FALSE POSITIVE finding from the report -- an internal QA step, not suppression of a privileged action from the user). No directive asks the host agent to skip its own consent/HITL gate or hide a privileged action it performs.

Why it matters

Because a skill/plugin instruction body is ingested as trusted first-party context, consent- or oversight-suppressing prose inherits the host's full authority and turns a passive package into a self-authorizing backdoor that strips the human-in-the-loop control from every action it can reach.

Evidence

- Deep links and embedded WebViews may silently forward cookies; trigger state changes via crafted intents or deep links
...
- CSRF + Clickjacking: steer user interactions to bypass confirmation dialogs in the UI
Show 1 more location
| Verdict | Meaning | Action |
|---------|---------|--------|
| **CONFIRMED** | All reachability/sanitization/exploitability checks pass | Include in report |
| **LIKELY** | Most checks pass; one uncertainty remains | Include in report, flag uncertainty |
| **NEEDS CONTEXT** | Cannot determine without runtime behavior / config / additional files | Note as "unverifiable without X" |
| **FALSE POSITIVE** | Positive evidence of protection found — cite the exact file+line of the sanitization, allowlist check, guard, or framework-level auto-protection that makes the sink safe | Drop silently |

**Only CONFIRMED and LIKELY findings are reported.**
PassedOver-Declared / Over-Privileged Artifact Manifest ScopeATR-P0005Details

Why it got this result

SKILL.md frontmatter declares only name, description, and a metadata block (version/domain/references count) -- it does NOT declare an allowed-tools list, OAuth scope, or any wildcard/catch-all capability grant at all. There is no package.json/bin/postinstall, no lifecycle hook, and no bundled executable, so there is no undisclosed install-time execution reach hidden inside a passive-looking artifact. The skill's prose does direct the host to use its already-available Read/Grep tools to inspect the target repo and a Write-capable tool to produce sast_report.md, both of which are intrinsic to a SAST-scanning skill's stated function and not a capability-class escalation beyond it.

Why it matters

An artifact that self-declares host privilege far beyond its stated function -- or hides executable reach inside a passive-looking package -- gives a single install a blast radius the operator never scoped, so any later mistake, compromise, or misconfiguration detonates across resources the artifact never needed.

Evidence

---
name: llm-sast-scanner
description: >
  General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
  ...
metadata:
  version: "1.4.0"
  domain: application-security
  references: 34 vulnerability knowledge bases
---
PassedInjection and Concealed Directives in Skill/Plugin Manifest and Instruction TextATR-P0006Details

Why it got this result

Codepoint-scanned SKILL.md (and spot-checked references/*.md) for zero-width/bidi-override/Tag-block characters: none found (only ordinary em/en-dashes U+2013/2014 and arrow glyphs U+2190/2192 appear, all mid-sentence typographic marks, not concealment codepoints). Searched for forged chat-template tokens (<|im_start|>, [INST], <start_of_turn>, ### System:) and ANSI/OSC escape bytes (\x1b): none present anywhere in the artifact. HTML comments found in references/jndi_injection.md and rce.md are fenced-code illustrative XML (pom.xml dependency examples) describing a TARGET application's vulnerable Log4j version, not hidden host-directed instructions. No mixed-script homoglyph substitution was found in any carrier (SKILL.md is 100% ASCII aside from the typographic marks noted). All instruction text is purely descriptive of the skill's own scanning workflow.

Why it matters

A skill or plugin's always-loaded manifest and instruction carriers (frontmatter/body, `description_for_model`, Gemini `FunctionDeclaration.description` / Vertex AI extension `manifest` / ADK agent `instruction`, tool docstrings, JSON-Schema descriptions) are concatenated into the host agent prompt at operator privilege, so a directive that is hidden with non-printing codepoints, disguised with a homoglyph, forged with role-control tokens, or masked from the rendered view silently commandeers model behavior toward attacker-chosen actions across every tool the artifact serves -- with no code execution required and nothing visible to a reviewer reading the rendered text.

Evidence

---
name: llm-sast-scanner
description: >
  General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
  Trigger when the user asks to: "analyze code for vulnerabilities", "review code security", "find security bugs",
  "do a SAST scan", "check for [vulnerability type] in code", "audit source code", or requests a security
  code review of any language or framework. Covers 34 vulnerability classes across web, API, auth, mobile, and logic layers.
metadata:
  version: "1.4.0"
  domain: application-security
  references: 34 vulnerability knowledge bases
---
Show 1 more location
<!-- pom.xml — VULNERABLE versions -->
<dependency>
    <groupId>org.apache.logging.log4j</groupId>
    <artifactId>log4j-core</artifactId>
    <version>2.14.1</version>  <!-- CVE-2021-44228 -->
</dependency>
<!-- Any version < 2.17.0 is potentially vulnerable to some Log4Shell variant -->
PassedSkill/Plugin Package Provenance, Integrity, and Post-Approval Mutation (Rug-Pull)ATR-P0007Details

Why it got this result

The skill's entire model-facing trust surface (SKILL.md frontmatter/body + 34 references/*.md) ships INSIDE the pinned git repository/commit; there is no runtime fetch of the skill's own instructions, no self-updater, no auto-update/hot-reload code, and no code that rewrites its own on-disk manifest after install (confirmed: repo contains only static markdown files, no scripts of any kind). Per the installation instructions in README.md, a user clones/copies the repo content once into ~/.claude/skills/ or ~/.codex/skills/; any content change requires a fresh git pull/clone that the user initiates, which functions as an implicit re-approval step rather than a silent post-approval mutation.

Why it matters

A skill/plugin reviewed once and then trusted indefinitely becomes a rug-pull vector when its OWN model-facing instruction body, declared scope, or manifest can be live-swapped or silently mutated after approval -- without an approval-time digest that is re-compared on load and re-consent on any change, a publisher (or an attacker who compromises the distribution channel) can rewrite the artifact's trusted instructions or widen its tool scope under authority the host already granted, turning an approved package into an exfiltration or unauthorized-action backdoor.

Evidence

---
name: llm-sast-scanner
description: >
  General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
  ...
metadata:
  version: "1.4.0"
  domain: application-security
  references: 34 vulnerability knowledge bases
---
Show 1 more location
### Git (recommended)

```bash
# Claude Code
git clone https://github.com/anthropic-lab/llm-sast-scanner.git
cp -r llm-sast-scanner/llm-sast-scanner/ ~/.claude/skills/

# OpenAI Codex
git clone https://github.com/anthropic-lab/llm-sast-scanner.git
cp -r llm-sast-scanner/llm-sast-scanner/ ~/.codex/skills/
```
Does not applyHost-Credential and Conversation-Context Harvesting and ExfiltrationATR-P0003Details

Why it got this result

The skill's instruction body (SKILL.md) and its 34 reference files contain no directive to read host credential stores (env vars, ~/.ssh, ~/.aws, .env, keychains, cloud metadata) and no directive to dump the model's system prompt, conversation history, or persistent memory files. The only 'reads' the skill performs are of the TARGET repository's own source files, which is its declared function. Per the rule's SCOPE guidance, since no harvest step (of host credentials or conversation/memory context) exists at all, the harvest+exfil pair this rule tests for cannot be constructed, so the correct verdict is NOT_APPLICABLE rather than SECURE.

Why it matters

A skill or plugin that couples a host-credential or live-conversation read with an outbound channel turns an ostensibly benign helper into an autonomous exfiltration agent, leaking long-lived secrets, session tokens, and confidential prompt context to an attacker on every invocation across every tool the artifact serves.

Evidence

```markdown
# SAST Security Report — <target>
Date: <date>
Analyzer: llm-sast-scanner v1.4

## Executive Summary
<2-3 sentences: total findings by severity, most critical issue>

## Coverage — Sink Inventory (Pass A)
<Total sinks found per class, and the disposition of each: TAINTED / CONSTANT / UNREACHED.
A report without this section is incomplete, not clean.>
```
Does not applyFormat-Native Out-of-Band Execution and Host Control-Plane PersistenceATR-P0004Details

Why it got this result

The repo ships ONLY markdown (SKILL.md + references/*.md) and a README -- confirmed via filesystem walk (no .py/.js/.sh/.ts files, no package.json, no hooks directory, no settings.json, no git hooks, no env-var assignment blocks). There is no bundled script, lifecycle/event hook (no PreToolUse/PostToolUse, no ADK callback, no activationEvents), no entry-point code, no dotenv, and no exec-enabling or LLM-endpoint-substituting env assignment anywhere in the artifact. Per the rule's SCOPE guidance, a bundle shipping NONE of the format-native execution/control-plane primitives has no surface for this rule to evaluate -- verdict is NOT_APPLICABLE, not SECURE.

Why it matters

Format-native execution and control-plane writes bypass the model's reasoning loop, converting a single install approval into durable, self-reinjecting code execution that can MITM the host agent's own model endpoint and silently subvert every subsequent tool call.

Evidence

find . -name "*.py" -o -name "*.js" -o -name "*.sh" -o -name "*.ts" | grep -v .git
(no output -- repo contains only SKILL.md + 34 references/*.md + README.md, no executable artifacts, no hooks, no settings.json, no package.json)
Show its 1 tool
ToolIt can
sast_taint_scan_workflow
The skill's core directed workflow: instructs the host model to read/grep target repository source files, perform bidirectional source/sink taint analysis across 34 vulnerability classes, and write a markdown security report (sast_report.md) via the host's already-granted Read/Grep/Write capabilities. Not a separately registered MCP tool -- it is prose directing use of the host's existing file tools.
Read dataCreate or change data

Before you put it to work

  1. Fix README.md install commands to clone from the real repository (github.com/SunWeb3Sec/llm-sast-scanner) instead of the look-alike anthropic-lab org to eliminate impersonation risk for users.
  2. Consider adding a brief disclaimer note near the webshell-pattern teaching examples (php_security.md, expression_language_injection.md) clarifying they are detection reference material, to reduce false-positive noise from automated malware scanners run by downstream consumers.
  3. Continue avoiding real-looking secret values in future reference-file examples; replacing current placeholder tokens with even more obviously-fake values (e.g., 'EXAMPLE_KEY_DO_NOT_USE') would further reduce scanner false positives.
  4. If the project ever ships executable tooling (e.g., a script that invokes the SAST workflow programmatically or a web UI), perform a full ATR-C re-evaluation at that time covering network/SSRF, command injection, dependency risk, and related controls.
  5. Consider adding a documented approval/versioning note (e.g., a changelog) so future scope changes to allowed-tools or instruction content are surfaced to re-installing users, pre-empting any future ATR-P0007 concern if the artifact later adds executable components.

Repository-wide rules

Checked once for the whole repository: dependencies, secrets, inputs, networking, CI and more. 0 of 15 flagged.

2 rules passed · 13 did not applyShow
PassedWeaponization: Malicious-Purpose Artifact (Offensive Capability by Design)ATR-R0001Details

Why it got this result

The artifact's declared purpose (SKILL.md frontmatter, README.md) is unambiguously DEFENSIVE/DETECTIVE: 'General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis... find security bugs... audit source code' -- it instructs an LLM agent to locate, verify (via a Judge false-positive-elimination step), and REPORT vulnerabilities with remediation guidance in a THIRD-PARTY target codebase. This matches the rule's negative indicator for a clearly-defensive/detective artifact (malware-analysis / detection-engineering / security-teaching helper) with no offensive-production capability. Two YARA 'webshell' raw_artifacts matches (Zeus_Webshell_Command_Parameter, confidence 88) fire on references/php_security.md:22-38 and references/expression_language_injection.md:160-168 because those files contain PHP/Python command-execution code blocks -- but in context these are explicitly labeled teaching examples under 'VULN' / 'VULNERABLE' headings inside a vulnerability-detection reference, instructing the scanning LLM what pattern to FLAG when found in someone else's code, not operational attack tooling the skill itself runs or directs the agent to build for an attacker. There is no instruction anywhere in SKILL.md directing the agent to GENERATE malware/ransomware/credential-stealers/C2/droppers by request, no hardcoded C2 endpoints or exfil sinks, and no instruction to evade oversight, suppress logging, or operate covertly -- the workflow is openly auditable (writes a markdown sast_report.md, Judge review step, cites evidence). This is the clean SECURE end: defensive/educational security-analysis tooling that documents attacker techniques purely to detect and remediate them.

Why it matters

An artifact whose purpose is to weaponize the agent -- to produce malware, steal credentials, evade defenses, or run attacks at scale -- is dangerous regardless of how securely it is built; posture controls (auth, input validation, least privilege) cannot make a weapon safe, which is why a confirmed weaponization finding caps the trust verdict to `blocked` rather than being averaged against a good posture score. Catching malicious PURPOSE is a distinct safety control, and it must be conservative because offensive capability is dual-use: legitimate pentest, CTF, defensive, and research work must abstain (UNKNOWN), never block -- unless the artifact itself hides from the people who install, run or audit it.

Evidence

## PHP Dangerous Function Sinks

### Code/Command Execution Sinks

```php
// CRITICAL: any user input reaching these functions
eval($_GET['code']);
eval('$var = ' . $_POST['value'] . ';');
assert($_GET['assertion']);                    // PHP < 8: assert() can execute code strings
preg_replace('/' . $_GET['pattern'] . '/e', $_GET['replacement'], $subject);  // /e modifier (PHP < 7)

exec($_GET['cmd'], $output);
system($_GET['cmd']);
passthru($_GET['cmd']);
…
Show 2 more locations
## PHP/Python/Node.js EL-Equivalent Patterns

### PHP

```php
// VULNERABLE: eval() with user input
eval($_GET['code']);
eval('$result = ' . $_POST['expr'] . ';');

// VULNERABLE: create_function() (deprecated but still present)
$fn = create_function('', $_GET['body']);
$fn();

// VULNERABLE: preg_replace with /e modifier (PHP < 7.0)
…
---
name: llm-sast-scanner
description: >
  General-purpose Static Application Security Testing (SAST) skill for code vulnerability analysis.
  Trigger when the user asks to: "analyze code for vulnerabilities", "review code security", "find security bugs",
  "do a SAST scan", "check for [vulnerability type] in code", "audit source code", or requests a security
  code review of any language or framework. Covers 34 vulnerability classes across web, API, auth, mobile, and logic layers.
metadata:
  version: "1.4.0"
  domain: application-security
  references: 34 vulnerability knowledge bases
---
PassedStatic SecretsATR-C0002Details

Why it got this result

Gitleaks flagged 6 hits (3 unique, duplicated across llm-sast-scanner/references/*.md and references/*.md identical copies from two different commits in history) for generic-api-key patterns. All three are illustrative placeholder values inside markdown documentation teaching an LLM how to recognize hardcoded-credential anti-patterns in THIRD-PARTY code, not real secrets belonging to this project: (1) references/default_credentials.md:35 'DJANGO_SECRET_KEY = "[REDACTED]"' is explicitly listed under a '## Python Source Detection Rules' / '- **VULN**:' heading as an example of what a scanner should flag; (2) references/insecure_deserialization.md:29 'CVE-2017-18349' is a CVE identifier, not a secret, misclassified by gitleaks' entropy heuristic; (3) references/mobile_security.md:647 'let key = "MySecretKey12345"' is explicitly labeled '**VULN**:' as a hardcoded-encryption-key teaching example for Swift code. None of these values are used anywhere in this repo's own runtime (there is no runtime) to authenticate, sign, or encrypt anything -- they exist solely as documentation of what the scanning skill should detect elsewhere. No .env, config, or credential file with a real secret value is committed.

Why it matters

Plaintext secrets are easily exfiltrated.

Evidence

## Python Source Detection Rules

### Direct assignment
- **VULN**: `password = "admin"` — literal credential assigned to password variable
- **VULN**: `SECRET_KEY = "changeme"` — Flask/Django secret key hardcoded
- **VULN**: `app.secret_key = 'hardcoded_secret'` — Flask session signing key
[REDACTED]
- **VULN**: `API_KEY = "[REDACTED]"` — hardcoded API key
Show 2 more locations
#### Hardcoded Encryption Key

**VULN**:
```swift
[REDACTED]
let keyData = key.data(using: .utf8)!
CCCrypt(kCCEncrypt, kCCAlgorithmAES, kCCOptionPKCS7Padding,
        (keyData as NSData).bytes, keyData.count, iv, ...)
```
**Fastjson (com.alibaba.fastjson)**
- `JSON.parseObject(input)` / `JSON.parse(input)` — auto-type can instantiate arbitrary classes
- `@type` field in JSON enables polymorphic deserialization leading to RCE
- AutoType enabled by default in older versions; bypass gadgets exist in many versions < 1.2.83
[REDACTED]

+6 more locations in the finding JSON

Does not applyRuntime Command Injection via Process ExecutionATR-C0003Details

Why it got this result

This rule's applicability is scoped to shipped application_runtime code and explicitly excludes build/test/developer tooling. This repo ships zero executable code -- only SKILL.md and markdown reference docs. The exec()/system()/eval() patterns present (e.g. llm-sast-scanner/references/php_security.md:22-38, expression_language_injection.md:52-69) are illustrative VULNERABLE/SAFE teaching snippets inside fenced code blocks that document what a scanning LLM should detect in THIRD-PARTY target codebases -- they are never parsed or executed by this repository itself. There is no runtime entry point, server, or interpreter shipped here for an attacker-controlled input to reach.

Why it matters

Unsanitized command construction in shipped runtime code can give a remote attacker arbitrary code execution with the application's privileges.

Does not applyUnrestricted Network Fetch / SSRFATR-C0001Details

Why it got this result

The repository contains no application code at all -- it is a documentation-only Claude/Codex 'skill' package (one SKILL.md plus 34 markdown reference files under llm-sast-scanner/references/) that teaches an LLM agent how to perform SAST taint analysis on OTHER codebases. There is no HTTP client, fetch wrapper, or network call of any kind shipped in this repo, so the SSRF threat model (arbitrary user-supplied URL reaching an HTTP client) cannot apply to this artifact's architecture.

Why it matters

Enables internal pivoting and data exfiltration.

Does not applyDependency Risk & Supply ChainATR-C0007Details

Why it got this result

No dependency manifest (package.json, requirements.txt, go.mod, Cargo.toml, etc.) or lockfile exists in the repository -- it ships zero code dependencies, only markdown documentation. Trivy fs scan likewise found no SBOM-relevant artifacts to analyze.

Why it matters

Prevents typosquat and malicious update compromise.

Does not applyMissing or Inadequate Input ValidationATR-C0008Details

Why it got this result

No HTTP/JSON-RPC handler, request parser, or any code accepting external structured input exists in this repo. The artifact is static instructional markdown consumed directly by a host LLM agent's existing file-reading tools (Read/Grep); it defines no API surface of its own that would need schema validation.

Why it matters

Frontline control to prevent multiple classes of vulns.

Does not applyInsecure DeserializationATR-C0009Details

Why it got this result

No deserialization code (pickle/yaml.load/unserialize/ObjectInputStream) is shipped or executed by this repo. References/insecure_deserialization.md and references/php_security.md contain illustrative VULNERABLE unserialize()/pickle.loads() snippets purely as teaching examples for the scanning LLM to recognize in THIRD-PARTY codebases -- they are never invoked by this artifact itself.

Why it matters

Can lead to arbitrary code execution.

Does not applyPath Traversal & Symlink Bypass (Filesystem Tools)ATR-C0011Details

Why it got this result

This repo ships no filesystem-tool implementation (no fs.readFile/open/path-resolution code of its own). It relies entirely on the HOST agent's pre-existing Read/Grep/Glob tools to read a target codebase; it defines no MCP tool handler or HTTP route that accepts a caller-supplied path argument. The path-traversal threat model (a shipped tool resolving a caller-controlled path without containment) does not map onto an artifact that implements no tools of its own.

Why it matters

Traversal exposes arbitrary host files; can lead to code execution.

Does not applyTool Output Sanitization & Injection ContainmentATR-C0013Details

Why it got this result

This artifact implements no tool handler of its own (no fetch/scrape/web-read code is shipped; there is zero executable code in the repo at all -- only SKILL.md and 34 markdown reference files). The skill is consumed by a HOST agent's pre-existing file-reading tools (Read/Grep/Glob), which are entirely outside this artifact's control and already subject to the host's own tool-output handling. Because the repo declares and implements no tool whose return value is injected into LLM context, the envelope/sanitization/untrustedReturn threat model this rule targets has no component here to attach to.

Why it matters

Tool outputs are a primary prompt-injection vector. Third-party content (web pages, files, API responses) may contain text crafted to override instructions or impersonate system/tool messages. Without a host-enforced envelope, sanitization, and an explicit untrusted-return signal, the model can be coerced into executing attacker-controlled directives, leaking secrets, or chaining further tool calls on behalf of the adversary.

Does not applyCI/CD Workflow Script InjectionATR-C0014Details

Why it got this result

No .github/workflows, .gitlab-ci.yml, Jenkinsfile, or any CI/CD configuration exists anywhere in the repository (verified by directory listing -- repo contains only README.md and llm-sast-scanner/{SKILL.md,references/*.md}). There is no CI/CD execution context to evaluate.

Why it matters

CI/CD script injection can execute attacker-controlled commands with workflow tokens, repository secrets, trusted-runner access, artifact or cache authority, and release or deployment privileges.

Does not applyDoS Protections: Timeouts, Concurrency, Streaming LimitsATR-C0004Details

Why it got this result

No server, HTTP endpoint, or streaming handler is shipped in this repo -- it is static documentation (SKILL.md + references/*.md) with no runtime process to exhaust. The DoS-protection threat model (missing timeouts/body-size limits/rate limiting in a running service) does not apply to a markdown instruction artifact.

Why it matters

Resource exhaustion can crash or stall MCP.

Does not applyLogging Hygiene (No Secrets/PII/Tokens) & Audit TrailATR-C0005Details

Why it got this result

No logging code exists in this repo. The artifact is a set of instructions telling an LLM agent how to write a markdown report (sast_report.md) of findings in another target codebase; there are no logger calls, log files, or audit-trail mechanisms shipped here for secrets/PII to leak through.

Why it matters

Prevents sensitive data leakage; enables forensics.

Does not applyContainer/Runtime HardeningATR-C0006Details

Why it got this result

No Dockerfile, docker-compose, Helm chart, or Kubernetes manifest exists anywhere in the repository (verified via find for Dockerfile*/docker-compose*/*.yaml patterns -- none found; trivy config scan also returned no IaC results). This artifact is not containerized or deployed as a service, so container/runtime hardening does not apply.

Why it matters

Reduces blast radius of exploits.

Does not applyLack of Output Encoding/SanitizationATR-C0010Details

Why it got this result

No HTML/terminal rendering code exists in this repo; it produces no user-facing web UI or templated output of its own. The artifact only instructs an LLM to write a markdown report file -- there is no output-encoding sink shipped here to evaluate.

Why it matters

Prevents UI-level injection and operator compromise.

Does not applyDenial of Wallet / Cost ControlsATR-C0012Details

Why it got this result

No billable external API integration (paid model calls, cloud service invocations) is shipped or orchestrated by this repo beyond the host LLM's own normal inference loop, which is outside this artifact's control. There is no tool-invocation pathway defined here that could be abused for unbounded paid-API calls.

Why it matters

Prevents cost-based disruption.

From build to runtime

You know what it is. Now see what it does.

A scan helps you understand what you’re building with. When your agent runs, BlueRock shows you what actually happens across tools and systems. Follow actions in context, understand behavior as it unfolds and add controls when you need them.

BUILDRegistry + scan
RUNSee actual execution
OPERATEObserve, control, optimize

Results reflect the code at the commit and date shown.