Back to skill

Security audit

Soc Deploy Misp

Security checks for vulnerabilities and agentic risk

Overview

This skill appears to deploy MISP as advertised, but it uses unsafe credential and TLS defaults that users should review before installing.

Review before installing. Run it only on a host intended for MISP, use a strong unique admin password, restrict or delete ~/misp/api-key.txt after setup, lock down .env permissions, rotate exposed secrets, configure trusted TLS certificates instead of relying on curl -k or MISP_VERIFY_SSL=false, and pin the misp-docker version for production deployments.

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
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (14)

Missing User Warnings

Medium
Confidence
88% confidence
Finding
The skill explicitly saves highly sensitive credentials, including an API key, to a predictable path on disk but does not foreground this as a security warning. On multi-user hosts or poorly permissioned home directories, those secrets may be exposed to other local users, backups, shell history workflows, or later exfiltration by unrelated compromise.

Missing User Warnings

Medium
Confidence
95% confidence
Finding
The recovery instructions include `docker compose down -v`, which deletes the database volume, but the wording does not explicitly warn that this permanently destroys any existing MISP data. In an operational deployment guide, that omission can lead an administrator to irreversibly erase threat intel, users, and configuration while attempting routine recovery.

Missing User Warnings

Medium
Confidence
96% confidence
Finding
The script persists highly sensitive material to ~/misp/api-key.txt, including the admin password, API key, and database credentials, without setting restrictive permissions or warning the operator about long-term secret storage. On multi-user systems, in backups, or via later host compromise, this file becomes a concentrated source of credential exposure.

Credential Access

High
Category
Privilege Escalation
Content
MYSQL_ROOT_PW=$(openssl rand -base64 24)
MYSQL_PW=$(openssl rand -base64 24)

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
Confidence
89% confidence
Finding
The script writes the MISP base URL over plain HTTP into .env, despite later interacting with the service over HTTPS. This creates an insecure default that can cause clients, generated links, or integrations to use cleartext transport and expose authentication material or session traffic to interception.

Credential Access

High
Category
Privilege Escalation
Content
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 && \
Confidence
94% confidence
Finding
The script stores the MISP admin passphrase in plaintext in .env. Plaintext secret storage in deployment files increases the chance of compromise via local users, backups, support bundles, or accidental publication, especially because the same script also echoes credentials later.

Credential Access

High
Category
Privilege Escalation
Content
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
Confidence
92% confidence
Finding
This line inserts the MySQL root password into .env in plaintext. Database root credentials are especially sensitive because they enable full control over stored threat intel data and adjacent application state if the host or file is later exposed.

Credential Access

High
Category
Privilege Escalation
Content
# 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 && \
Confidence
90% confidence
Finding
Appending MYSQL_ROOT_PASSWORD to .env persists a privileged secret in a broadly readable deployment artifact unless permissions are explicitly locked down. This amplifies risk because compromise of one file yields full database administrative access.

Credential Access

High
Category
Privilege Escalation
Content
# 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 && \
  sed -i "s|MYSQL_PASSWORD=.*|MYSQL_PASSWORD=${MYSQL_PW}|" .env || \
Confidence
88% confidence
Finding
This line writes the application database password into .env in plaintext. Although lower impact than root, it still enables database access and can facilitate extraction or tampering with MISP data if the file is exposed.

Credential Access

High
Category
Privilege Escalation
Content
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
Confidence
88% confidence
Finding
Appending MYSQL_PASSWORD to .env persists credentials without any protective file-permission handling. In a deployment helper script, this is a real secret-management weakness rather than credential theft, but it still creates avoidable exposure.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
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
```
Confidence
97% confidence
Finding
Disabling TLS verification via 'curl -k' and recommending 'MISP_VERIFY_SSL=false' undermines HTTPS authenticity, making the initial admin/API interactions vulnerable to man-in-the-middle interception or response spoofing. Because this skill handles admin credentials and generated API keys for a threat-intelligence platform, the context makes the weakness more dangerous than a routine lab-only exception.

Tool Parameter Abuse

Low
Category
Tool Misuse
Content
1. **MariaDB OOM (showstopper):** Default InnoDB buffer pool is 2GB. On 4GB hosts, MariaDB crashes instantly. MUST set `INNODB_BUFFER_POOL_SIZE` in `.env`
2. **Recovery from OOM:** `docker compose down -v` to wipe failed DB volume, fix `.env`, restart
3. **First boot is slow:** 5-10 min for DB schema creation and initial data load
4. **Self-signed HTTPS:** Use `curl -k` for all API calls
5. **Advanced authkeys:** Enabled by default. `cake` CLI is the most reliable key generation method
6. **MISP web UI:** `https://<ip>` (port 443, not 80)
Confidence
93% confidence
Finding
The repeated instruction to use 'curl -k' for all API calls normalizes insecure transport verification beyond an initial bootstrap step. That broad guidance increases the chance that operators will permanently run sensitive API automation without server authentication, enabling credential theft, malicious IOC injection, or tampering with threat-intelligence data in transit.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
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
Confidence
96% confidence
Finding
Setting 'MISP_VERIFY_SSL=false' as the advertised connection default is an unsafe configuration that disables server certificate validation for clients connecting to MISP. In this skill's context, that exposes API keys and threat-intelligence operations to interception or spoofing and may lead downstream tooling to permanently adopt insecure defaults.

Tool Parameter Abuse

High
Category
Tool Misuse
Content
MySQL User: misp / ${MYSQL_PW}
InnoDB Buffer Pool: ${BUFFER_POOL}

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

echo ""
Confidence
93% confidence
Finding
The script explicitly instructs users to use curl -k and elsewhere disables SSL verification, normalizing insecure TLS behavior. In a threat-intelligence platform where API keys are used, suppressing certificate validation enables man-in-the-middle interception and tampering by anyone able to influence the network path.

Unsafe Defaults

Medium
Category
Tool Misuse
Content
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}
Confidence
95% confidence
Finding
The generated MCP configuration sets MISP_VERIFY_SSL=false by default, causing downstream integrations to accept any certificate. This is especially dangerous because the same file also stores the API key, so users are primed to make authenticated requests over a channel vulnerable to impersonation and interception.

Static analysis

No suspicious patterns detected.