Back to skill

Security audit

References

Security checks for vulnerabilities and agentic risk

Overview

This security-audit skill mostly matches its stated purpose, but it bundles unrelated business scripts and can duplicate or send sensitive audit data with weak controls.

Review carefully before installing. The core audit behavior is useful but sensitive: it scans local configuration, environment variables, shell files, Git history, ports, and security-related paths, then writes reports that may contain local paths and possible secret fragments. Do not send reports to Feishu/webhooks unless you have reviewed and redacted them, and remove or ignore the unrelated reminder and payment scripts; the exposed WeCom webhook key should be treated as compromised.

Vulnerability Patterns
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
  • 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
Findings (4)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/security_audit.py:947
Finding

Plaintext shell credentials are embedded in persistent audit reports

Content
View full analysis

Vulnerability Details

File Location: scripts/security_audit.py:947-960, scripts/security_audit.py:1134-1141, and scripts/security_audit.py:1189-1195
Vulnerability Type: Sensitive information exposure through report generation
Risk Level: High

Vulnerable Code

python
with open(rc_file, 'r', encoding='utf-8', errors='ignore') as f:
    content = f.read()

matches = export_secret_pattern.findall(content)
if matches:
    sanitized = [m[:50] + "..." if len(m) > 50 else m for m in matches[:3]]
    results.append(AuditResult(
        category="密钥与凭据安全",
        name=f"Shell 配置明文密钥: {rc_file.name}",
        status="fail",
        severity="high",
        description=f"发现 {len(matches)} 处明文导出密钥: {'; '.join(sanitized)}",
        impact=str(rc_file),
        fix="将密钥移至 .env 文件或密钥管理服务,不在 shell 配置中硬编码",
    ))

The result description is subsequently inserted into the report:

python
if result.status != "pass":
    report.append(f"- 问题描述: {result.description}")
    report.append(f"- 影响范围: `{result.impact}`")
    report.append(f"- 修复建议: `{result.fix}`")

The report is then persisted:

python
if output_file is None:
    timestamp = datetime.datetime.now().strftime('%Y%m%d-%H%M%S')
    output_file = OPENCLAW_DIR / "logs" / f"security-audit-{timestamp}.{extension}"

output_path = Path(output_file)
output_path.parent.mkdir(parents=True, exist_ok=True)

with open(output_path, 'w', encoding='utf-8') as f:
    f.write(report)

Technical Analysis

The scanner intentionally searches shell startup files for exported credentials. However, it treats truncation to 50 characters as sanitization. Many API keys, passwords, tokens, and complete shell assignments are shorter than 50 characters, so the generated report can contain the entire credential. Longer credentials may still expose a useful prefix or substantial secret material.

The resulting report is writte ...[truncated 1453 chars]

Remediation
View remediation

Remediation Suggestions

  • Never place matched credential values or complete export statements in an AuditResult.
  • Extract and report only the environment variable name, source file, line number, and detected secret category.
  • Replace the current truncation with complete redaction, for example SERVICE_TOKEN=[REDACTED].
  • Ensure JSON reports receive the same redaction treatment.
  • Create report files atomically with mode 0600, rather than relying on the process umask.
  • Set the report directory to mode 0700.
  • Add tests using short and long credentials to verify that no part of a secret value appears in Markdown, JSON, console output, or generated Feishu messages.
  • Advise users to remove and securely destroy reports generated by affected versions and rotate credentials if such reports were shared.

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/send_report_to_feishu.py:231
Finding

Security report data can be posted to unrestricted network destinations

Content
View full analysis

Vulnerability Details

File Location: scripts/send_report_to_feishu.py:231-242, scripts/send_report_to_feishu.py:278-300, and scripts/send_report_to_feishu.py:375-393
Vulnerability Type: Unrestricted outbound request and destination validation failure
Risk Level: Medium

Vulnerable Code

The webhook sender accepts an unrestricted destination:

python
def send_to_feishu_webhook(content: dict, webhook_url: str) -> bool:
    """通过 Webhook 发送消息(支持富文本和卡片)"""
    try:
        data = json.dumps(content, ensure_ascii=False).encode('utf-8')

        req = urllib.request.Request(
            webhook_url,
            data=data,
            headers={'Content-Type': 'application/json'},
        )

        with urllib.request.urlopen(req, timeout=10) as response:
            resp_data = json.loads(response.read().decode('utf-8'))

The plugin endpoint loaded from local configuration is also unrestricted:

python
api_base = feishu_plugin.get('apiEndpoint', '')
if not api_base:
    print_info("飞书插件未配置 API 端点")
    return False

report_path = Path(report_file)
content = _build_rich_text_content(report_path)

payload = {
    "action": "send_message",
    "session_key": session_key,
    "content": content,
}

try:
    data = json.dumps(payload, ensure_ascii=False).encode('utf-8')
    req = urllib.request.Request(
        api_base,
        data=data,
        headers={'Content-Type': 'application/json'},
    )

    with urllib.request.urlopen(req, timeout=15) as response:

User and environment-controlled webhook values flow directly to the request:

python
if not webhook_url:
    webhook_url = os.environ.get('FEISHU_WEBHOOK_URL', '')

if webhook_url:
    if format_type == "card":
        content = _build_interactive_card(report_path)
    elif format_type == "rich":
        content = _build_rich_text_content(report_path)
    else:
        conte
...[truncated 2050 chars]
Remediation
View remediation

Remediation Suggestions

  • Require HTTPS for every external report destination.
  • Allowlist official Feishu and Lark webhook hostnames when operating in Feishu mode.
  • Resolve destination hostnames and reject loopback, private, link-local, multicast, and otherwise non-public addresses unless an explicitly approved local plugin mode is selected.
  • Validate the plugin API endpoint under a separate, narrowly scoped policy.
  • Disable automatic redirects or validate every redirect target before following it.
  • Reject URLs containing embedded credentials or unexpected ports.
  • Display the final destination and require explicit confirmation before the first transmission.
  • Minimize outbound content and remove local paths, process identifiers, credentials, and unnecessary remediation details.
  • Document the exact fields transmitted in each output format.

T09 · Insecure Skill Coding Practices

Error
Location
scripts/weekly_ugc_reminder.sh:16
Finding

Hard-coded WeCom webhook credential permits unauthorized message submission

Content
View full analysis

Vulnerability Details

File Location: scripts/weekly_ugc_reminder.sh:16-18
Vulnerability Type: Hard-coded secret in executable source code
Risk Level: High

Vulnerable Code

bash
# 发送企业微信群消息
curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5cf9f411-d581-41ab-a899-304a418bb176" \
  -H "Content-Type: application/json" \
  -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MESSAGE\"}}"

Technical Analysis

The WeCom webhook key is embedded directly in a distributed shell script. A webhook key functions as a bearer credential: possession of the URL normally permits message submission to the associated group webhook.

Source-control access, Skill package distribution, backups, mirrors, and local filesystem access can all disclose this credential. Moving the credential to another commit does not invalidate copies from repository history.

This script is also unrelated to the Skill's declared security-audit function, making the credential and outbound messaging capability unexpected for users installing an audit tool.

Attack Path

  1. An attacker downloads the Skill, reads the repository, or obtains any archived copy of the script.
  2. The attacker extracts the webhook key from the URL.
  3. The attacker sends their own HTTP POST request to the WeCom webhook endpoint.
  4. If the key remains active, the request causes attacker-controlled messages to appear in the associated group.

Impact Assessment

The credential may permit unauthorized message posting to the configured WeCom group. Potential consequences include phishing, false operational instructions, spam, impersonation of automated systems, and social-engineering attacks. The credential does not by itself demonstrate access to group history or arbitrary WeCom account privileges; its scope is limited to the permissions granted to that webhook.

Remediation
View remediation

Remediation Suggestions

  • Revoke and rotate the exposed webhook key immediately.
  • Remove the credential from the current source and repository history.
  • Load the replacement from a protected environment variable or secret manager.
  • Validate that the variable is present without printing its value.
  • Restrict secret access to the specific process that sends the reminder.
  • Add secret scanning to pre-commit and continuous-integration workflows.
  • Move this unrelated reminder script into a separately documented package, or remove it from the security-audit Skill.
  • Review the webhook's message history for unauthorized use.

T05 · Unauthorized Access and Privilege Escalation

Warning
Location
scripts/checkin_reminder.sh:6
Finding

Undeclared reminder and payment-processing scripts exceed the Skill's stated functional scope

Content
View full analysis

Vulnerability Details

File Location: scripts/checkin_reminder.sh:6-23, scripts/monthly_payment_summary.sh:7-129, and scripts/weekly_ugc_reminder.sh:1-20
Vulnerability Type: Excess functionality and unnecessary access to business data and messaging services
Risk Level: Medium

Vulnerable Code

The attendance reminder sends messages to WeCom and writes a log:

bash
WEBHOOK_KEY="${WEBHOOK_KEY:-}"
if [[ -z "$WEBHOOK_KEY" ]]; then
    echo "警告:未设置 WEBHOOK_KEY 环境变量" >&2
    exit 1
fi

MESSAGE="【温馨提醒】亲爱的同事,请记得:
- 📋 上班打卡(如未打卡)
- 📝 下班打卡(如未打卡)

工作愉快!🌈"

curl -s -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=$WEBHOOK_KEY" \
  -H "Content-Type: application/json" \
  -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MESSAGE\"}}"

echo "打卡提醒已发送 $(date)" >> ~/openclaw/checkin-reminder.log 2>&1

The payment script traverses financial files and creates summaries and logs:

bash
PAYMENT_DIR="${1:-~/payments}"
SUMMARY_FILE="${PAYMENT_DIR}/summary_${1:-$(date +%Y-%m)}.md"
LOG_FILE="$HOME/monthly-payment-summary.log"

for FILE in "$PAYMENT_DIR"/*.{pdf,png,jpg,jpeg,txt,csv,json} 2>/dev/null; do
    [ -f "$FILE" ] || continue

    echo "📄 处理文件: $(basename $FILE)"

    if [[ "$FILE" == *.csv ]]; then
        AMOUNT=$(tail -n +2 "$FILE" | awk '{sum += $2} END {print sum}')
        CATEGORY=$(head -1 "$FILE" | grep -oE '类别 [^\s]*|Category.*' | sed 's/[()]//g')
    else
        AMOUNT="待识别"
        CATEGORY="其他"
    fi
done

The UGC reminder performs another outbound organizational message operation:

bash
MESSAGE="各位好,请提供上周 UGC 数据给我。数据格式自行整理即可,收到后会统一汇总。谢谢!"

curl -X POST "https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=5cf9f411-d581-41ab-a899-304a418bb176" \
  -H "Content-Type: application/json" \
  -d "{\"msgtype\":\"text\",\"text\":{\"content\":\"$MESSAGE\"}}"

Technical Analysis

SKILL.md describes a security auditing ...[truncated 2132 chars]

Remediation
View remediation

Remediation Suggestions

  • Remove all reminder and payment-processing scripts from the security-audit Skill.
  • If these functions are required, publish them as separate, clearly documented Skills with independent consent and permission boundaries.
  • Document every filesystem path, environment variable, network destination, and output file used by each separate tool.
  • Require explicit input directories rather than using implicit business-data locations.
  • Create financial summaries and logs with restrictive permissions.
  • Avoid logging financial amounts unless operationally necessary, and provide configurable retention.
  • Require explicit confirmation before organizational messages are sent.
  • Add automated package checks that reject scripts not referenced by the Skill manifest or documentation.
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
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
Findings (96)

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented primarily as a local security auditing tool, but it also includes functionality to transmit audit reports to Feishu via plugin API or webhook and to read user-local configuration to do so. That outbound data flow materially changes the risk profile because audit reports may contain secrets, environment findings, or internal system details that could be exfiltrated if sent without explicit user consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented primarily as a local security auditing tool, but it also includes functionality to transmit audit reports to Feishu via plugin API or webhook and to read user-local configuration to do so. That outbound data flow materially changes the risk profile because audit reports may contain secrets, environment findings, or internal system details that could be exfiltrated if sent without explicit user consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented primarily as a local security auditing tool, but it also includes functionality to transmit audit reports to Feishu via plugin API or webhook and to read user-local configuration to do so. That outbound data flow materially changes the risk profile because audit reports may contain secrets, environment findings, or internal system details that could be exfiltrated if sent without explicit user consent.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

The skill is presented primarily as a local security auditing tool, but it also includes functionality to transmit audit reports to Feishu via plugin API or webhook and to read user-local configuration to do so. That outbound data flow materially changes the risk profile because audit reports may contain secrets, environment findings, or internal system details that could be exfiltrated if sent without explicit user consent.

Content

No source excerpt is available for this finding.

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
python3 scripts/security_audit.py

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
80% 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 · code-security.md (reported line 140)May include surrounding context.

1. 子进程执行检查

python
# ❌ 不推荐 - 直接执行用户输入
subprocess.run(user_command, shell=True)

# ✅ 推荐 - 使用参数列表
subprocess.run(['ls', '-la', path], shell=False)

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · permissions.md (reported line 8)May include surrounding context.

md
### 敏感文件最小权限
| 文件类型 | 推荐权限 | 命令 | 说明 |
|-----------|-----------|-------|------|
| SSH 私钥 | 600 | `chmod 600 ~/.ssh/id_rsa` | 仅所有者可读写 |
| SSH 目录 | 700 | `chmod 700 ~/.ssh` | 仅所有者可访问 |
| AWS 凭据 | 600 | `chmod 600 ~/.aws/credentials` | 保护 AWS 密钥 |
| GPG 目录 | 700 | `chmod 700 ~/.gnupg` | 保护 GPG 密钥 |

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · permissions.md (reported line 25)May include surrounding context.

md
### 敏感文件最小权限
| 文件类型 | 推荐权限 | 命令 | 说明 |
|-----------|-----------|-------|------|
| SSH 私钥 | 600 | `chmod 600 ~/.ssh/id_rsa` | 仅所有者可读写 |
| SSH 目录 | 700 | `chmod 700 ~/.ssh` | 仅所有者可访问 |
| AWS 凭据 | 600 | `chmod 600 ~/.aws/credentials` | 保护 AWS 密钥 |
| GPG 目录 | 700 | `chmod 700 ~/.gnupg` | 保护 GPG 密钥 |

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · permissions.md (reported line 26)May include surrounding context.

md
### 敏感文件最小权限
| 文件类型 | 推荐权限 | 命令 | 说明 |
|-----------|-----------|-------|------|
| SSH 私钥 | 600 | `chmod 600 ~/.ssh/id_rsa` | 仅所有者可读写 |
| SSH 目录 | 700 | `chmod 700 ~/.ssh` | 仅所有者可访问 |
| AWS 凭据 | 600 | `chmod 600 ~/.aws/credentials` | 保护 AWS 密钥 |
| GPG 目录 | 700 | `chmod 700 ~/.gnupg` | 保护 GPG 密钥 |

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · permissions.md (reported line 10)May include surrounding context.

md
|-----------|-----------|-------|------|
| SSH 私钥 | 600 | `chmod 600 ~/.ssh/id_rsa` | 仅所有者可读写 |
| SSH 目录 | 700 | `chmod 700 ~/.ssh` | 仅所有者可访问 |
| AWS 凭据 | 600 | `chmod 600 ~/.aws/credentials` | 保护 AWS 密钥 |
| GPG 目录 | 700 | `chmod 700 ~/.gnupg` | 保护 GPG 密钥 |
| OpenClaw 配置 | 600/700 | `chmod 700 ~/.openclaw` | 保护配置 |
| 日志文件 | 600/644 | `chmod 600 logs/*.log` | 控制日志访问 |

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The script’s functionality is unrelated to the declared security-audit purpose and instead sends employee check-in reminders to an external enterprise webhook. In a security-focused skill, this mismatch is highly suspicious because it introduces hidden operational behavior that users would not reasonably expect and could be used as covert messaging or unauthorized data egress infrastructure.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The script’s behavior is unrelated to the declared security-audit skill and instead processes personal payment records, generates summaries, and persists metadata. This capability mismatch is dangerous because users invoking a security tool may unknowingly expose sensitive financial data or allow an agent to access files outside the expected audit scope.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · scripts/security_audit.py (reported line 182)May include surrounding context.

python
print_header("🔒 检查敏感文件权限")

    sensitive_files = [
        (Path.home() / ".ssh", 0o700),
        (Path.home() / ".ssh" / "id_rsa", 0o600),
        (Path.home() / ".ssh" / "id_ed25519", 0o600),
        (Path.home() / ".aws" / "credentials", 0o600),

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · scripts/security_audit.py (reported line 183)May include surrounding context.

python
print_header("🔒 检查敏感文件权限")

    sensitive_files = [
        (Path.home() / ".ssh", 0o700),
        (Path.home() / ".ssh" / "id_rsa", 0o600),
        (Path.home() / ".ssh" / "id_ed25519", 0o600),
        (Path.home() / ".aws" / "credentials", 0o600),

Credential Access

High
Category
Privilege Escalation
Confidence
90% confidence
Finding

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

Content

Scanner excerpt · scripts/security_audit.py (reported line 184)May include surrounding context.

python
print_header("🔒 检查敏感文件权限")

    sensitive_files = [
        (Path.home() / ".ssh", 0o700),
        (Path.home() / ".ssh" / "id_rsa", 0o600),
        (Path.home() / ".ssh" / "id_ed25519", 0o600),
        (Path.home() / ".aws" / "credentials", 0o600),

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
90% 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 · scripts/security_audit.py (reported line 206)May include surrounding context.

python
severity="high",
                description=f"文件权限过于宽松: {oct(actual_mode)}, 期望: {oct(expected_mode)}",
                impact=str(path),
                fix=f"chmod {oct(expected_mode)[2:]} {path}",
            ))
        else:
            results.append(AuditResult(

Env Variable Harvesting

High
Category
Data Exfiltration
Confidence
92% confidence
Finding

The script enumerates all environment variables and inspects both names and values for secrets. In a security-audit skill this is contextually expected, but it still accesses highly sensitive data and may surface secret-bearing variable names in reports or logs, increasing exposure if output is stored or shown to unintended parties.

Content

Scanner excerpt · scripts/security_audit.py (reported line 645)May include surrounding context.

python
exposed = []

    for env_name, env_value in os.environ.items():
        for pattern, desc in sensitive_env_patterns:
            if pattern.search(env_name):
                # 检查值是否是真实密钥(非占位符)

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/security_audit.py (reported line 712)May include surrounding context.

python
return results

    sensitive_gitignore_entries = [
        '.env', '.env.local', '.env.production',
        '*.pem', '*.key', '*.p12',
        'credentials.json', 'secrets.json', 'service-account.json',
        '.secret', '*.secret',

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/security_audit.py (reported line 712)May include surrounding context.

python
return results

    sensitive_gitignore_entries = [
        '.env', '.env.local', '.env.production',
        '*.pem', '*.key', '*.p12',
        'credentials.json', 'secrets.json', 'service-account.json',
        '.secret', '*.secret',

Static analysis

Detected: suspicious.dynamic_code_execution, suspicious.exposed_secret_literal

Dynamic code execution detected.

Critical
Code
suspicious.dynamic_code_execution
Location
scripts/security_audit.py:408

File appears to expose a hardcoded API secret or token.

Critical
Code
suspicious.exposed_secret_literal
Location
code-security.md:92