Back to skill

Security audit

Soc Deploy Misp

Security checks for vulnerabilities and agentic risk

Overview

This skill is purpose-aligned for deploying MISP, but it uses high-impact remote deployment with unsafe defaults for credentials, TLS, and mutable code retrieval that users should review before installing.

Review this skill carefully before installing. Use it only on an isolated Docker host you control, replace the default admin password, avoid printing or storing secrets in plaintext, lock credential files to owner-only permissions, use verified TLS certificates instead of MISP_VERIFY_SSL=false or curl -k, and pin the MISP Docker repository and images before deployment.

Vulnerability Patterns
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
SKILL.md:45
Finding

Shell Injection Through Interpolated Deployment Parameters

Content
View full analysis
:~/ ssh "bash ~/setup.sh 'admin@misp.local' ''" ``` ``` ### Technical Analysis The documented deployment procedure places the user-controlled SSH target and administrator password directly into shell commands. Wrapping the password in single quotes does not make interpolation safe because a password containing a single quote can terminate the quoted argument and introduce additional remote shell syntax. The SSH target is also interpolated without validation or robust argument handling. Depending on how an Agent constructs and executes the command, shell metacharacters in the target may alter local command parsing or inject unintended SSH options. For example, substituting a password shaped like the following can terminate the password argument and add a command to the remote command string: ```text x'; id; # ``` The resulting remote command is effectively parsed as: ```bash bash ~/setup.sh 'admin@misp.local' 'x'; id; #' ``` This issue exists in the Skill's prescribed execution flow, even though `setup.sh` itself quotes its positional parameters after invocation. ### Attack Path 1. An attacker or untrusted user supplies a crafted administrator password or SSH target. 2. The Agent substitutes that input into the deployment command from `SKILL.md`. 3. The local or remote shell interprets injected quoting and command separators. 4. The injected command executes under the account used for SSH deployment. 5. If that account has Docker access or elevated privileges, the attacker may subsequently control containers, mounted host resources, or potentially the host. ### Impact Assessment Successful exploitation permits arbitrary command execution on the deployment target with the privileges of the SSH user. ...[truncated 342 chars]
Remediation
View remediation

T03 · Remote Payload Retrieval and Execution

Error
Location
scripts/setup.sh:28
Finding

Unpinned Remote Repository Is Retrieved and Executed

Content
View full analysis
Remediation
View remediation
` and verify that `HEAD` exactly matches the expected hash before processing any repository files. - Verify signed commits or signed release tags against a documented, trusted maintainer key. - Pin every container image by immutable digest rather than relying on mutable tags. - Replace automatic `git pull` behavior with an explicit, separately reviewed upgrade process. - Fail closed if signature, commit, checksum, or image-digest verification fails. - Maintain a version manifest in the Skill package containing the approved repository commit and image digests. - Review Compose privileges, capabilities, host mounts, and Docker socket access before starting the stack. ]]>

T09 · Insecure Skill Coding Practices

Error
Location
scripts/setup.sh:9
Finding

Predictable Default Password and Plaintext Credential Exposure

Content
View full analysis
~/misp/api-key.txt << EOF === MISP Credentials === Generated: $(date) MISP URL: https://${VM_IP} Admin: ${ADMIN_EMAIL} / ${PASSWORD} API Key: ${API_KEY} MCP Connection: MISP_URL=https://${VM_IP} MISP_API_KEY=${API_KEY} MISP_VERIFY_SSL=false MySQL Root: ${MYSQL_ROOT_PW} MySQL User: misp / ${MYSQL_PW} InnoDB Buffer Pool: ${BUFFER_POOL} Note: Self-signed HTTPS. Use curl -k for API calls. EOF echo "" echo "=== MISP Deployment Complete ===" echo "" echo "URL: https://${VM_IP}" echo "Admin: ${ADMIN_EMAIL} / ${PASSWORD}" echo "API Key: ${API_KEY}" echo "" echo "Credentials saved to: ~/misp/api-key.txt" ``` ### Technical Analysis If the caller omits the second argument, every deployment receives the publicly documented password `ChangeMe123!`. This creates a default-credential condition for an Internet- or network-accessible security platform. The script also writes the MISP administrator password, API key, MySQL root password, and MySQL application password into one plaintext file. It does not set `umask 077`, use `install -m 600`, or verify the resulting ownership and mode. Consequently, the file's permissions depend on the caller's environment and umask. The administrator password and API key are additionally printed to standard output. Deployment consoles, CI/CD logs, shell-recording systems, support transcripts, or Agent execution logs may retain those secrets. ### Attack Path Default-password exploitation: 1. A deployment is started without an explicit a ...[truncated 1246 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/setup.sh:76
Finding

TLS Certificate Verification Is Disabled and Insecure Client Configuration Is Recommended

Content
View full analysis
/dev/null | grep -q "login\|UserLoginForm"; then ``` ```bash VER=$(curl -sk -H "Authorization: $API_KEY" -H "Accept: application/json" \ https://localhost/servers/getVersion 2>/dev/null | grep -o '"version":"[^"]*"' || echo "") ``` The generated connection configuration instructs clients to disable verification: ```bash MCP Connection: MISP_URL=https://${VM_IP} MISP_API_KEY=${API_KEY} MISP_VERIFY_SSL=false ``` The credential file further normalizes insecure API access: ```bash Note: Self-signed HTTPS. Use curl -k for API calls. ``` ### Technical Analysis The `-k` option instructs curl to accept any server certificate, including a certificate supplied by an active attacker. Although the two setup probes connect to `localhost`, the generated configuration persists the same insecure behavior for subsequent client connections to the host IP. `MISP_VERIFY_SSL=false` removes server authentication from TLS. Encryption without authenticated identity does not prevent an active man-in-the-middle attacker from impersonating MISP, receiving the API authorization header, and proxying or modifying responses. The documentation also recommends `curl -k` for all API calls, turning what might be acceptable as a narrowly scoped bootstrap exception into the standard operational configuration. ### Attack Path 1. A user deploys MISP and adopts the generated `MISP_VERIFY_SSL=false` connection configuration. 2. The user or an MCP integration connects to MISP over a network controlled or observable by an attacker. 3. The attacker performs ARP spoofing, DNS manipulation, route interception, or another man-in-the-middle technique. 4. The attacker presents an arbitrary T ...[truncated 702 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (29)

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
98% confidence
Finding

The skill directs users to set MISP_VERIFY_SSL=false and use curl -k, which disables TLS certificate validation. This enables man-in-the-middle attacks against authentication and API traffic, allowing interception or modification of requests carrying the MISP admin session or API key.

Content

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

MISP_API_KEY= MISP_VERIFY_SSL=false

Note: Self-signed HTTPS. Use curl -k for API calls. Credentials saved to: ~/misp/api-key.txt

text

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 · references/env-template.env (reported line 1)May include surrounding context.

text
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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 · references/env-template.env (reported line 2)May include surrounding context.

text
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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 · references/gotchas.md (reported line 41)May include surrounding context.

md
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 37)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 39)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 45)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 46)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 52)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 56)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 59)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 60)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

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/setup.sh (reported line 61)May include surrounding context.

sh
# MISP .env template
# Copy to misp-docker/.env and customize

# MISP Core

Credential Access

High
Category
Privilege Escalation
Confidence
91% confidence
Finding

The script stores the MISP admin passphrase in plaintext inside .env. If the deployment directory, backups, logs, or host user account are exposed, an attacker can gain immediate administrative access to the MISP instance.

Content

Scanner excerpt · scripts/setup.sh (reported line 47)May include surrounding context.

sh
sed -i "s|MISP_BASEURL=.*|MISP_BASEURL=http://${VM_IP}|" .env
sed -i "s|MISP_ADMIN_EMAIL=.*|MISP_ADMIN_EMAIL=${ADMIN_EMAIL}|" .env
sed -i "s|MISP_ADMIN_PASSPHRASE=.*|MISP_ADMIN_PASSPHRASE=${PASSWORD}|" .env

# Set DB passwords
grep -q "MYSQL_ROOT_PASSWORD" .env && \

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

This line writes the MySQL root password into .env in plaintext. Exposure of this file gives an attacker privileged database access, enabling data theft, tampering, and possible lateral impact on the containerized stack.

Content

Scanner excerpt · scripts/setup.sh (reported line 50)May include surrounding context.

sh
sed -i "s|MISP_ADMIN_PASSPHRASE=.*|MISP_ADMIN_PASSPHRASE=${PASSWORD}|" .env

# Set DB passwords
grep -q "MYSQL_ROOT_PASSWORD" .env && \
  sed -i "s|MYSQL_ROOT_PASSWORD=.*|MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}|" .env || \
  echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}" >> .env

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Appending the MySQL root password to .env is the same plaintext secret persistence issue as the previous branch. Anyone who can read the file can fully administer the database.

Content

Scanner excerpt · scripts/setup.sh (reported line 51)May include surrounding context.

sh
# Set DB passwords
grep -q "MYSQL_ROOT_PASSWORD" .env && \
  sed -i "s|MYSQL_ROOT_PASSWORD=.*|MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}|" .env || \
  echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}" >> .env

grep -q "MYSQL_PASSWORD" .env && \

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

This line writes the application database user's password into .env in plaintext. Disclosure of this file would allow unauthorized access to the MISP database and potential compromise of application data.

Content

Scanner excerpt · scripts/setup.sh (reported line 54)May include surrounding context.

sh
sed -i "s|MYSQL_ROOT_PASSWORD=.*|MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}|" .env || \
  echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}" >> .env

grep -q "MYSQL_PASSWORD" .env && \
  sed -i "s|MYSQL_PASSWORD=.*|MYSQL_PASSWORD=${MYSQL_PW}|" .env || \
  echo "MYSQL_PASSWORD=${MYSQL_PW}" >> .env

Credential Access

High
Category
Privilege Escalation
Confidence
95% confidence
Finding

Appending the database user password to .env creates the same plaintext secret exposure risk as replacing it in place. Read access to the file can be sufficient to compromise the application's data layer.

Content

Scanner excerpt · scripts/setup.sh (reported line 55)May include surrounding context.

sh
echo "MYSQL_ROOT_PASSWORD=${MYSQL_ROOT_PW}" >> .env

grep -q "MYSQL_PASSWORD" .env && \
  sed -i "s|MYSQL_PASSWORD=.*|MYSQL_PASSWORD=${MYSQL_PW}|" .env || \
  echo "MYSQL_PASSWORD=${MYSQL_PW}" >> .env

# CRITICAL: Set InnoDB buffer pool to prevent MariaDB OOM

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
88% confidence
Finding

The script explicitly instructs operators to use curl -k, which disables TLS certificate validation. In the context of an administrative API key for a threat-intelligence platform, this normalizes insecure transport practices and can enable man-in-the-middle interception or spoofing when the service is accessed over untrusted networks.

Content

Scanner excerpt · scripts/setup.sh (reported line 120)May include surrounding context.

sh
MySQL User: misp / ${MYSQL_PW}
InnoDB Buffer Pool: ${BUFFER_POOL}

Note: Self-signed HTTPS. Use curl -k for API calls.
EOF

echo ""

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The README advertises automatic deployment, admin provisioning, and API key generation, but it does not warn users that sensitive credentials will be created and may be exposed in logs, terminal output, shell history, or persisted files. In a security-platform deployment context, this omission increases the chance of insecure handling of privileged secrets and unintended system changes on the target host.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill clearly instructs use of shell-capable operations over SSH and SCP, but it does not declare an explicit tool scope such as permissions or allowed-tools. This weakens execution boundaries and increases the risk that an agent may invoke broader shell capabilities than intended when handling deployment steps on a remote host.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The trigger phrases include broad, generic terms such as 'install misp' and 'set up misp', which can cause the skill to be invoked in situations where the user did not intend remote deployment activity. In a skill that performs shell/SSH operations on hosts, accidental invocation raises the chance of unintended administrative changes.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The skill description and output section instruct saving administrator credentials and an API key to disk and displaying them to the user, but they do not include a clear warning about the sensitivity, retention, and local exposure risks. This omission can lead to insecure handling, leakage via shell history, screenshots, logs, backups, or overly permissive file permissions.

Content

No source excerpt is available for this finding.

Ssd 3

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The skill explicitly tells the operator to output the MISP admin credentials and API key and persist the API key to ~/misp/api-key.txt. Exposing high-value secrets in terminal output and plaintext files materially increases the risk of credential theft through logs, scrollback, backups, multi-user systems, or endpoint compromise, especially because these secrets grant administrative access to a threat-intelligence platform.

Content

No source excerpt is available for this finding.

Unsafe Defaults

Medium
Category
Tool Misuse
Confidence
97% confidence
Finding

The documented default MISP_VERIFY_SSL=false establishes an insecure baseline for downstream integrations. Unsafe defaults are especially dangerous because users and automation tend to copy them verbatim, causing long-term deployment of clients that accept spoofed endpoints and expose API keys and data in transit.

Content

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

md
MCP Connection:
  MISP_URL=https://<target>
  MISP_API_KEY=<key>
  MISP_VERIFY_SSL=false

Note: Self-signed HTTPS. Use curl -k for API calls.
Credentials saved to: ~/misp/api-key.txt

Static analysis

No suspicious patterns detected.