Back to skill

Security audit

Cve Tracker

Security checks for vulnerabilities and agentic risk

Overview

The skill is mostly aligned with CVE monitoring, but it deserves Review because it directs users to place sensitive infrastructure inventory in insecure local paths and create executable automation artifacts.

Review this skill before installing or running it on real infrastructure. Move the tech-stack inventory out of /tmp into a private user-owned config directory with restrictive permissions, avoid shared fixed temp filenames, and only create or schedule the digest script after confirming what inventory data and alerts may be written or shared.

Vulnerability Patterns
  • Insecure Skill Coding PracticesFinds exploitable flaws such as hardcoded secrets or command injection
  • Skill Instruction HijackingAlters the agent's session goals or safety constraints when the skill loads
  • Agent Memory PoisoningWrites attacker-controlled rules into memory that affect later sessions
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (1)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:42
Finding

Predictable Temporary Files Expose Sensitive Inventory and Permit File Manipulation

Content
View full analysis

Vulnerability Details

File Location: SKILL.md, lines 42-65, 96, and 135-179
Vulnerability Type: Unsafe temporary-file handling and insecure storage of sensitive data
Risk Level: Medium

Vulnerable Code

The technology inventory is written to a fixed path in the shared temporary directory:

bash
cat > /tmp/tech-stack.json << 'EOF'
{
  "stack_name": "production-infrastructure",
  "last_updated": "2026-07-04",
  "products": [
    {"name": "nginx", "version": "1.24.0", "category": "web-server"},
    {"name": "postgresql", "version": "15.3", "category": "database"},
    {"name": "redis", "version": "7.0.11", "category": "cache"},
    {"name": "nodejs", "version": "20.11.0", "category": "runtime"},
    {"name": "openssl", "version": "3.0.8", "category": "crypto"},
    {"name": "kubernetes", "version": "1.28.0", "category": "orchestration"},
    {"name": "docker", "version": "24.0.5", "category": "container"},
    {"name": "python", "version": "3.11.4", "category": "runtime"},
    {"name": "gitlab", "version": "16.8.0", "category": "devops"},
    {"name": "haproxy", "version": "2.8.1", "category": "load-balancer"}
  ],
  "watchlist": [
    "openssl", "nginx", "postgresql", "kubernetes", "docker"
  ],
  "ignore_cve": []
}
EOF

The bulk scan then relies on that predictable path:

bash
STACK_FILE="/tmp/tech-stack.json"

Report intermediates also use fixed, reusable filenames:

bash
}' >> "$REPORT_DIR/tmp-findings.jsonl"
bash
if [ -f "$REPORT_DIR/tmp-findings.jsonl" ]; then
bash
jq -s 'sort_by(
  (if .kev == true then 0 else 1 end),
  (if .cvss then -.cvss else 999 end)
)' "$REPORT_DIR/tmp-findings.jsonl" > "$REPORT_FILE.tmp"
bash
rm -f "$REPORT_DIR/tmp-findings.jsonl" "$REPORT_FILE.tmp"

Technical Analysis

The Skill explicitly identifies the technology-stack inventory as sensitive, but instructs users ...[truncated 3516 chars]

Remediation
View remediation

Remediation Suggestions

  1. Store the technology inventory in a private, user-owned configuration directory rather than a shared /tmp pathname:

    bash
    CONFIG_DIR="${XDG_CONFIG_HOME:-$HOME/.config}/cve-tracker"
    umask 077
    mkdir -p -m 700 "$CONFIG_DIR"
    STACK_FILE="$CONFIG_DIR/tech-stack.json"
    
  2. Create sensitive files atomically with owner-only permissions. Refuse to overwrite existing symbolic links and use a temporary file followed by an atomic rename:

    bash
    umask 077
    tmp_stack=$(mktemp "$CONFIG_DIR/tech-stack.json.XXXXXX") || exit 1
    trap 'rm -f "$tmp_stack"' EXIT
    # Write and validate the JSON in "$tmp_stack".
    mv -- "$tmp_stack" "$STACK_FILE"
    trap - EXIT
    chmod 600 "$STACK_FILE"
    
  3. Create a unique private working directory for each scan:

    bash
    umask 077
    WORK_DIR=$(mktemp -d "${TMPDIR:-/tmp}/cve-tracker.XXXXXX") || exit 1
    trap 'rm -rf -- "$WORK_DIR"' EXIT
    FINDINGS_FILE="$WORK_DIR/findings.jsonl"
    REPORT_TMP="$WORK_DIR/report.json"
    
  4. Replace every reference to fixed tmp-findings.jsonl and $REPORT_FILE.tmp names with the unique per-run paths.

  5. Initialize the findings file with exclusive, non-appending semantics. Do not reuse data from previous runs.

  6. Validate the inventory before scanning:

    bash
    jq -e '
      type == "object" and
      (.products | type == "array") and
      all(.products[]; (.name | type == "string") and
                        (.version | type == "string"))
    ' "$STACK_FILE" >/dev/null || exit 1
    
  7. Use atomic replacement for the final report and ensure the report directory is owned by the invoking user and not writable by other users.

  8. Add error handling such as set -euo pipefail, verify curl failures with --fail, and preserve cleanup traps so interrupted scans cannot leave sensitive intermediate data behind.

Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
85% confidence
Finding

Tool parameters are crafted to achieve unintended or unsafe behavior. Parameter abuse can bypass intended safety checks (e.g. shell=True, --force, dangerous glob patterns).

Content

Scanner excerpt · SKILL.md (reported line 179)May include surrounding context.

echo "=== Top 5 Most Critical ===" jq -r '.findings[:5][] | " (.cve) | (.product) (.version) | CVSS:(.cvss) | KEV:(.kev) | Exploit:(.exploit)"' "$REPORT_FILE"

rm -f "$REPORT_DIR/tmp-findings.jsonl" "$REPORT_FILE.tmp" fi

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 75)May include surrounding context.

md
VERSION="3.0.8"

echo "=== CVE Check: $PRODUCT $VERSION ==="
curl -s -X POST "http://localhost:8765/cve-mcp/search" \
  -H "Content-Type: application/json" \
  -d "{\"product\": \"$PRODUCT\", \"version\": \"$VERSION\"}" | \
  jq '.[] | {

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 116)May include surrounding context.

md
VERSION="3.0.8"

echo "=== CVE Check: $PRODUCT $VERSION ==="
curl -s -X POST "http://localhost:8765/cve-mcp/search" \
  -H "Content-Type: application/json" \
  -d "{\"product\": \"$PRODUCT\", \"version\": \"$VERSION\"}" | \
  jq '.[] | {

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 214)May include surrounding context.

md
VERSION="3.0.8"

echo "=== CVE Check: $PRODUCT $VERSION ==="
curl -s -X POST "http://localhost:8765/cve-mcp/search" \
  -H "Content-Type: application/json" \
  -d "{\"product\": \"$PRODUCT\", \"version\": \"$VERSION\"}" | \
  jq '.[] | {

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 266)May include surrounding context.

md
VERSION="3.0.8"

echo "=== CVE Check: $PRODUCT $VERSION ==="
curl -s -X POST "http://localhost:8765/cve-mcp/search" \
  -H "Content-Type: application/json" \
  -d "{\"product\": \"$PRODUCT\", \"version\": \"$VERSION\"}" | \
  jq '.[] | {

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The stated purpose focuses on CVE monitoring, enrichment, scoring, and digesting. While some local output is expected, the documented code goes beyond passive monitoring by generating persistent artifacts under user directories and later creating an executable automation script for scheduled operation, which is a materially broader operational behavior than the concise manifest suggests.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 191)May include surrounding context.

md
# Last 24 hours, moderate+ severity
NVD_API="https://services.nvd.nist.gov/rest/json/cves/2.0"

curl -s "${NVD_API}?pubStartDate=$(date -d '24 hours ago' -Iseconds | sed 's/+.*//')&pubEndDate=$(date -Iseconds | sed 's/+.*//')&cvssV3Severity=CRITICAL&resultsPerPage=20" | \
  jq '.vulnerabilities[] | {
    cve: .cve.id,
    published: .cve.published,

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · SKILL.md (reported line 228)May include surrounding context.

bash
CVE="CVE-2024-3094"

curl -s -X POST "http://localhost:8765/cve-mcp/epss" \
  -H "Content-Type: application/json" \
  -d "{\"cve_id\": \"$CVE\"}" | jq '{
    cve: .cve_id,

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill goes beyond passive monitoring by generating an executable shell script intended for scheduled execution, which is more powerful than the manifest suggests. This expands the trust boundary because it establishes persistent automation that will continue making requests and writing files after initial invocation.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The pricing/configuration text advertises email/webhook alerting but does not clearly warn that vulnerability data and internal product inventory may be sent to third-party endpoints. That omission can cause accidental exfiltration of sensitive environment metadata, especially since tech stack composition is often confidential.

Content

No source excerpt is available for this finding.