Back to skill

Security audit

web-recon

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real web-security scanner, but it needs review because it performs intrusive scanning and has under-scoped network and local safety risks.

Install only if you understand and accept that this is an active web reconnaissance toolkit. Use it only on systems you are authorized to test, avoid running it from a privileged or sensitive network, do not enable screenshots unless browser sandboxing is fixed, review the third-party lookups before scanning confidential targets, and prefer pinned or containerized dependencies.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • Insecure DependenciesIntroduces malicious components through unsafe dependency sources
  • 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
Findings (5)

T05 · Unauthorized Access and Privilege Escalation

Error
Location
scripts/titus-web.sh:34
Finding

Untrusted Web Content Can Trigger Arbitrary Server-Side Network Requests

Content
View full analysis
/dev/null || true elif [[ "$jsfile" != http* ]]; then # Relative path curl -sL "${URL%/}/${jsfile}" -o "$TMPDIR/$(basename $jsfile)" 2>/dev/null || true else curl -sL "$jsfile" -o "$TMPDIR/$(basename $jsfile)" 2>/dev/null || true fi done fi ``` ### Technical Analysis The scanner extracts JavaScript resource locations from attacker-controlled HTML and passes absolute URLs directly to `curl`. It does not restrict the destination to the scanned origin, validate the URL scheme, resolve and reject private addresses, or limit redirects. The `-L` option follows redirects, so even an initially public URL can redirect the scanner to loopback, link-local, private, or otherwise restricted network services. Because the request originates from the scanner host, it inherits that host's network reachability. The behavior exceeds the minimum privileges needed to scan public website resources: same-origin resource collection would be sufficient by default. ### Attack Path 1. An operator scans a website controlled by an attacker. 2. The website returns HTML containing a script reference such as an absolute URL ending in `.js`. 3. The URL points directly to an internal service or to a public endpoint that redirects to one. 4. `titus-web.sh` invokes `curl -sL` without destination restrictions. 5. The scanner host requests t ...[truncated 755 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/webscan.sh:116
Finding

Unvalidated Target Controls the Output Directory and Permits Path Traversal

Content
View full analysis
` directory. Numerous later operations use truncating redirections to fixed filenames such as `dns.txt`, `headers.txt`, `results.md`, and `results.json`. Quoting prevents shell word splitting but does not prevent filesystem traversal. ### Attack Path 1. An attacker or untrusted workflow supplies a crafted target such as `../anything`. 2. Target normalization produces `DOMAIN=..`. 3. `OUTDIR` resolves to the parent of the intended reconnaissance directory. 4. The script creates or reuses that directory. 5. Scan steps write fixed-name output files through `>` redirections. 6. Existing files with matching names in the escaped directory can be truncated and replaced. ### Impact Assessment The vulnerability allows writes outside the declared per-domain output boundary with the privileges of the user running the scanner. It can overwrite predictable report or scan files in ancestor workspace directories. The demonstrated path normalization does not establish arbitrary absolute-path write access, but it does violate filesystem isolation and can damage or replace existing user data at predictable escaped locations. ]]>
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Error
Location
scripts/webscan.sh:438
Finding

Attacker-Controlled Websites Are Rendered with the Chromium Sandbox Disabled

Content
View full analysis
/dev/null; then timeout 30 cutycapt --url="$URL" --out="$OUTDIR/screenshot.png" \ --min-width=1280 --delay=3000 2>/dev/null || true elif command -v chromium &>/dev/null; then timeout 30 chromium --headless --disable-gpu --screenshot="$OUTDIR/screenshot.png" \ --window-size=1280,1024 --no-sandbox "$URL" 2>/dev/null || true elif command -v google-chrome &>/dev/null; then timeout 30 google-chrome --headless --disable-gpu --screenshot="$OUTDIR/screenshot.png" \ --window-size=1280,1024 --no-sandbox "$URL" 2>/dev/null || true ``` ### Technical Analysis The screenshot feature opens arbitrary target-controlled content in Chromium or Google Chrome while explicitly passing `--no-sandbox`. The browser sandbox is a critical containment boundary for renderer processes handling untrusted HTML, JavaScript, images, fonts, and other web content. Headless operation does not make the content trusted and does not replace process isolation. If a browser renderer or related component is exploited, disabling the sandbox can allow the exploit to operate directly with the privileges of the scanner user. This configuration grants substantially more local privilege to remote web content than screenshot generation requires. ### Attack Path 1. The operator enables the screenshot option for an attacker-controlled target. 2. The scanner launches Chromium or Google Chrome with `--no-sandbox`. 3. The malicious website delivers content targeting a browser vulnerability. 4. Successful exploitation escapes the renderer without having to cross Chromium's normal sandbox boundary. 5. The payload executes with the scanner process user's filesystem and network permissions. ### Impact Assessment Successful exploitation could expose files, env ...[truncated 364 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
references/tools.md:14
Finding

Third-Party Scanner Dependencies Are Unpinned and Retrieved from Mutable Sources

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/webscan.sh:184
Finding

Shodan API Key Is Exposed Through Process Command-Line Arguments

Content
View full analysis
"$OUTDIR/shodan.json" 2>/dev/null || true ``` ### Technical Analysis The Shodan API key is interpolated into the URL passed as a `curl` command-line argument. During execution, complete process arguments may be visible through process inspection interfaces and may also be captured by endpoint monitoring, diagnostic tooling, shell tracing, or process-accounting systems. The credential is transmitted over HTTPS to the documented Shodan API, so the code does not demonstrate unauthorized remote exfiltration. The weakness is local exposure caused by placing the secret in the process argument vector and URL query string. ### Attack Path 1. The operator exports `SHODAN_API_KEY` and runs the reconnaissance step. 2. The shell expands the key into the URL argument supplied to `curl`. 3. While `curl` is running, a local observer or monitoring service reads or records its command line. 4. The observer extracts the API key from the `key=` query parameter. 5. The exposed key is reused against the Shodan account until it is revoked or expires. ### Impact Assessment An exposed key may permit unauthorized consumption of Shodan API quotas and access to data allowed by the associated account. The immediate scope is the Shodan credential rather than arbitrary local privilege escalation. Exploitability depends on local process-visibility controls and installed monitoring, but secrets should not be passed in command-line arguments. ]]>
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • YARA SignaturesMalware Match, Webshell Match, Cryptominer Match
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (10)

Tp4

High
Category
MCP Tool Poisoning
Confidence
97% confidence
Finding

The documented behavior claims broad offensive security and reconnaissance capabilities, while the analyzed implementation reportedly only downloads assets and scans local files with Titus. This mismatch is dangerous because users and reviewers may authorize the skill under false assumptions, masking its real data-handling behavior and undermining informed consent and security review.

Content

No source excerpt is available for this finding.

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 · scripts/webscan.sh (reported line 192)May include surrounding context.

sh
-3 | tr '\n' ' ')"
    } > "$OUTDIR/dns.txt"

    # IP
    IP=$(dig +short $DOMAIN A 2>/dev/null | head -1)

    # IP Geolocation
    if [[ -n "$IP" ]]; then
        curl -s "http://ip-api.com/json/$IP" > "$OUTDIR/geo.json" 2>/dev/null
    fi

    # Port scan (top 1000 ports)
    if command -v nmap &>/dev/null && [[ -n "$IP" ]]; then
        log "   🔌 Port scanning $IP..."
        timeout 120 nmap -sT -T4 --top-ports 1000 -oN "$OUTDIR/ports.txt" -oG "$OUTDIR/ports-grep.txt" "$IP" 2>/dev/null || true
    fi

    # Shodan lookup
    if [[ -n "${SHODAN_API_KEY:-}" && -n "$IP" ]]; then
        log "   🌍 Shodan lookup..."
        curl -s "https://api.shodan.io/shodan/host/$IP?key=$SHODAN_API_KEY" > "$OUTDIR/shodan.json" 2>/dev/null || true
    elif command -v shodan &>/dev/null && [[ -n "$IP" ]]; then
        timeout 30 shodan host "$IP" > "$OUTDIR/shodan.txt" 2>/dev/null || true
    fi

    # Wayback URLs
    if command -v waybackurls &>/dev/null; then
        echo "$DOMAIN" | timeo

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/webscan.sh (reported line 307)May include surrounding context.

sh
{
        echo "=== Sensitive File Check ==="
        for path in .env .env.local .env.production .env.staging \
                    .git/config .git/HEAD .gitignore \
                    wp-config.php.bak config.php.bak web.config \
                    .htaccess .htpasswd .DS_Store \

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/webscan.sh (reported line 307)May include surrounding context.

sh
{
        echo "=== Sensitive File Check ==="
        for path in .env .env.local .env.production .env.staging \
                    .git/config .git/HEAD .gitignore \
                    wp-config.php.bak config.php.bak web.config \
                    .htaccess .htpasswd .DS_Store \

Credential Access

High
Category
Privilege Escalation
Confidence
60% confidence
Finding

Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.

Content

Scanner excerpt · scripts/webscan.sh (reported line 307)May include surrounding context.

sh
{
        echo "=== Sensitive File Check ==="
        for path in .env .env.local .env.production .env.staging \
                    .git/config .git/HEAD .gitignore \
                    wp-config.php.bak config.php.bak web.config \
                    .htaccess .htpasswd .DS_Store \

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
96% confidence
Finding

The skill advertises and directs use of shell- and network-capable scripts but does not declare any tool scope such as permissions or allowed-tools. In an agent environment, that omission weakens enforcement boundaries and can allow broader execution than a reviewer or user would reasonably expect.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

This skill promotes port scanning, bruteforcing, subdomain enumeration, and vulnerability testing without any visible warnings about authorization, rate limits, privacy impact, or service disruption. In this context, the missing warnings increase risk because the skill is explicitly aimed at potentially intrusive web recon activities that can affect third-party systems and collect sensitive data.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The script automatically sends discovered target IP information to third-party services (ip-api and optionally Shodan) during recon without an explicit opt-in or warning. In a security scanning context this can leak customer/target metadata, create privacy/compliance issues, and expose reconnaissance activity to external providers.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

The Shodan API call transmits the scanned target IP to an external service, which is an outbound data disclosure path. Even though this is part of reconnaissance functionality, doing it automatically can leak sensitive engagement information and may violate rules of engagement or internal policy.

Content

Scanner excerpt · scripts/webscan.sh (reported line 198)May include surrounding context.

sh
# Shodan lookup
    if [[ -n "${SHODAN_API_KEY:-}" && -n "$IP" ]]; then
        log "   🌍 Shodan lookup..."
        curl -s "https://api.shodan.io/shodan/host/$IP?key=$SHODAN_API_KEY" > "$OUTDIR/shodan.json" 2>/dev/null || true
    elif command -v shodan &>/dev/null && [[ -n "$IP" ]]; then
        timeout 30 shodan host "$IP" > "$OUTDIR/shodan.txt" 2>/dev/null || true
    fi

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
83% confidence
Finding

This shell script makes multiple HTTP requests to the user-supplied target and any discovered JavaScript URLs using curl. While it prints that it is scanning and fetching content, it does not clearly disclose that it will contact remote hosts and download multiple files, which is a safety-relevant network operation.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.