Back to skill

Security audit

Vulnerability Scanner

Security checks for vulnerabilities and agentic risk

Overview

This is a coherent vulnerability-scanning skill, but it needs Review because its examples handle scanner credentials and active-scan controls in ways that can expose sensitive access or create unsafe scanner control surfaces.

Install only for authorized security testing on dedicated infrastructure. Before using it, replace the GVM admin-password command-line pattern with a protected credential mechanism, avoid disabling ZAP API authentication unless the scanner is strongly isolated, set explicit target scopes and scan-rate limits, and protect or purge local scan reports that may contain sensitive network findings.

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 (2)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:85
Finding

GVM Administrative Password Exposed Through Process Arguments

Content
View full analysis
$TASK_NAME-target$TARGET" | \ grep -oP 'id="\K[^"]+') TASK_ID=$(gvm-cli --gmp-username admin --gmp-password "$GVM_PASSWORD" socket \ --xml "$TASK_NAME" | \ grep -oP 'id="\K[^"]+') gvm-cli --gmp-username admin --gmp-password "$GVM_PASSWORD" socket \ --xml "" REPORT_ID=$(gvm-cli --gmp-username admin --gmp-password "$GVM_PASSWORD" socket \ --xml "" | \ grep -oP 'last_report id="\K[^"]+') gvm-cli --gmp-username admin --gmp-password "$GVM_PASSWORD" socket \ --xml "" > /tmp/openvas-results.xml ``` ### Technical Analysis Although the password originates from the `GVM_PASSWORD` environment variable, the shell expands it into the argument passed to `--gmp-password`. The plaintext secret can consequently appear in the process argument vector while `gvm-cli` is running. Depending on operating-system process visibility and monitoring configuration, command arguments may be observable through process inspection utilities, `/proc` interfaces, process accounting, audit services, endpoint monitoring, or diagnostic collection. This contradicts the statement at `SKILL.md:343` that using an environment variable prevents the password from appearing in command history: the shell history may omit the expanded value, but the executed process still receives it in its arguments. The exposure is repeated across target creation, task creation, task startup, task retrieval, and report retrieval o ...[truncated 1496 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:146
Finding

OWASP ZAP API Authentication Explicitly Disabled

Content
View full analysis
/dev/null; then echo "" echo "=== OWASP ZAP Active Scan ===" zap-cli quick-scan --self-contained --start-options '-config api.disablekey=true' \ "$TARGET_URL" 2>&1 | tee "$SCAN_DIR/zap-output.txt" ``` ### Technical Analysis The `-config api.disablekey=true` startup option explicitly disables OWASP ZAP API-key authentication. The documentation does not simultaneously require the ZAP API to bind exclusively to a trusted loopback interface, enforce restrictive allowed-address rules, or provide an equivalent external access-control boundary. ZAP is an active web security scanner and intercepting proxy. Its API can control scans and expose scanner state. Disabling its authentication therefore creates an avoidable trust-boundary weakness: any process or host able to reach the API during the scan may be able to invoke operations without presenting an API credential. The practical reachability depends on the runtime defaults, installed ZAP version, wrapper behavior, and host network configuration. Nevertheless, the documented configuration deliberately removes an available authentication control without establishing compensating restrictions. ### Attack Path 1. An operator runs the documented web application scan on a shared or reachable ARGUS host. 2. `zap-cli` starts a self-contained ZAP instance with API-key validation disabled. 3. An attacker identifies the ZAP API listener from the local host, an exposed container network, or another network path permitted by the listener and firewall configuration. 4. The attacker submits ZAP API requests without an API key. 5. The attacker controls available scanner operations, accesses scanner information, or causes unauthorized requests to be sent from the scanning host. 6. Those re ...[truncated 883 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (13)

YARA rule 'c2_framework_indicators': Command-and-control framework indicators (Cobalt Strike, Metasploit, Sliver, etc.) [malware]

Critical
Category
YARA Match
Confidence
85% confidence
Finding

YARA rule matched a known malware signature (reverse shell, backdoor, ransomware, C2 framework, or info stealer).

Content

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

md
re available on ARGUS:

| Tool | Category | Use |
|------|----------|-----|
| nmap | Network Scanner | Service discovery, OS fingerprinting |
| nikto | Web Scanner | Web server vulnerability scanning |
| zaproxy | Web App Scanner | OWASP ZAP — deep web app testing |
| trivy | Container Scanner | Container image vulnerability scanning |
| lynis | System Auditor | Host-level security auditing |
| metasploit | Exploitation Framework | Exploit validation (authorized only) |
| sqlmap | SQL Injection | Database injection testing |
| hydra | Password Cracker | Credential strength testing |
| wireshark | Network Analyzer | Packet capture and analysis |
| aircrack-ng | Wireless | WiFi security assessment |
| ffuf | Web Fuzzer | Fast web fuzzing and directory discovery |
| spiderfoot | OSINT | Automated OSINT data gathering |
| theHarvester | Recon | Email and subdomain harvesting |
| recon-ng | Recon | Web reconnaissance framework |
| maltego | OSINT | Graphical link analysis |

## CVE-MCP In

YARA rule 'offensive_tool_references': References to well-known offensive security tools [hacktools]

High
Category
YARA Match
Confidence
70% confidence
Finding

YARA rule matched a hack tool or exploit indicator (offensive tools, reconnaissance, privilege escalation, or exploit frameworks).

Content

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

recon | | BlackArch tools | /usr/share/ | 39 security tools (nmap, nikto, zap, metasploit, etc.) |

Core Commands

Quick Network Scan (Nmap + CVE Enrichment)

Run a targeted Nmap scan and enrich findings with CVE data:

bash
TARGET="192.168.1.0/24"
SCAN_ID="scan-$(date +%Y%m%d-%H%M%S)"
OUTDIR="/tmp/vuln-scans/$SCAN_ID"
mkdir -p "$OUTDIR"

echo "=== Phase 1: Nmap Service Discovery ==="
nmap -sV -sC -O -oA "$OUTDIR/nmap" "$TARGET" 2>&1 | tee "$OUTDIR/nmap-output.txt"

echo ""
echo "=== Phase 2: Extract Service Versions ==="
grep -E "open|filtered" "$OUTDIR/nmap-output.txt" | awk '{print $1, $2, $3}' > "$OUTDIR/services.txt"
cat "$OUTDIR/services.txt"

echo ""
echo "=== Phase 3: CVE Enrichment via CVE-MCP ==="
while IFS= read -r line; do
  service=$(echo "$line" | awk '{print $3}')
  version=$(echo "$line" | awk '{print $4}')
  echo "--- $service $version ---"
  curl -s -X POST "http://localhost:8765/cve-mcp/search" \
    -H "Content-Type: application/json" \
    -d "{\"produc

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The manifest description promises "full network, web app, and container scans," and the document includes Trivy-based container scanning commands. However, the required binaries list only curl, jq, gvm-cli, nmap, and nikto, while trivy is listed as optional, meaning a core advertised capability may not actually be available. This is a semantic mismatch between the skill's claimed behavior and what its declared runtime requirements guarantee.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The skill provides active scanning commands that can probe hosts, perform authenticated vulnerability assessment, and write sensitive findings to local disk, but the warnings are limited and easy to miss. This increases the risk of unauthorized scanning, service disruption, and unprotected storage of sensitive scan artifacts such as host inventories and vulnerability data.

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 68)May include surrounding context.

md
service=$(echo "$line" | awk '{print $3}')
  version=$(echo "$line" | awk '{print $4}')
  echo "--- $service $version ---"
  curl -s -X POST "http://localhost:8765/cve-mcp/search" \
    -H "Content-Type: application/json" \
    -d "{\"product\": \"$service\", \"version\": \"$version\"}" | \
    jq '{cve_id: .id, cvss: .cvss_score, summary: .description[:120]}' \

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 202)May include surrounding context.

md
service=$(echo "$line" | awk '{print $3}')
  version=$(echo "$line" | awk '{print $4}')
  echo "--- $service $version ---"
  curl -s -X POST "http://localhost:8765/cve-mcp/search" \
    -H "Content-Type: application/json" \
    -d "{\"product\": \"$service\", \"version\": \"$version\"}" | \
    jq '{cve_id: .id, cvss: .cvss_score, summary: .description[:120]}' \

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 180)May include surrounding context.

md
CVE="CVE-2024-3094"  # Example: xz backdoor

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

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

bash
echo "=== Lynis System Audit ==="
sudo lynis audit system --quick 2>&1 | tee "/tmp/vuln-scans/lynis-$(hostname)-$(date +%Y%m%d).txt"

# Extract hardening index
grep "Hardening index" /tmp/vuln-scans/lynis-*.txt | tail -1

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 274)May include surrounding context.

md
VERSION="2.4.49"

echo "=== Exploit Validation: $CVE ==="
curl -s -X POST "http://localhost:8765/pentester-mcp/check-exploit" \
  -H "Content-Type: application/json" \
  -d "{\"cve\": \"$CVE\", \"service\": {\"name\": \"$SERVICE\", \"version\": \"$VERSION\"}}" | \
  jq '{

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| gvm-cli connection refused | GVM not running | `sudo systemctl start gvmd gsad` |
| GVM authentication fails | Wrong credentials | Check `$GVM_PASSWORD`, verify with `sudo -u _gvm gvmd --get-users` |
| Nmap scan times out | Firewall blocking | Verify target is reachable, adjust timing with `-T4` |
| CVE-MCP returns empty | MCP server down | Check `curl http://localhost:8765/cve-mcp/health` |

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| gvm-cli connection refused | GVM not running | `sudo systemctl start gvmd gsad` |
| GVM authentication fails | Wrong credentials | Check `$GVM_PASSWORD`, verify with `sudo -u _gvm gvmd --get-users` |
| Nmap scan times out | Firewall blocking | Verify target is reachable, adjust timing with `-T4` |
| CVE-MCP returns empty | MCP server down | Check `curl http://localhost:8765/cve-mcp/health` |

Sudo/Root Execution

Medium
Category
Privilege Escalation
Confidence
70% confidence
Finding

Commands invoke sudo or root privileges. Verify this elevated access is necessary and justified.

Content

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

md
| Symptom | Likely Cause | Fix |
|---------|-------------|-----|
| gvm-cli connection refused | GVM not running | `sudo systemctl start gvmd gsad` |
| GVM authentication fails | Wrong credentials | Check `$GVM_PASSWORD`, verify with `sudo -u _gvm gvmd --get-users` |
| Nmap scan times out | Firewall blocking | Verify target is reachable, adjust timing with `-T4` |
| CVE-MCP returns empty | MCP server down | Check `curl http://localhost:8765/cve-mcp/health` |

Intent-Code Divergence

Low
Category
Not specified by scanner
Confidence
96% confidence
Finding

The Security section states that "Nmap uses -T3 by default to avoid overwhelming targets," which is an explicit behavioral claim. The actual Nmap command shown for the quick network scan uses nmap -sV -sC -O -oA ... and does not include -T3 or any equivalent timing constraint. This is a direct contradiction between the documentation and the demonstrated behavior.

Content

No source excerpt is available for this finding.