Back to skill

Security audit

Odoo Reporting

Security checks for vulnerabilities and agentic risk

Overview

The skill is coherent for read-only Odoo financial reporting, but it handles finance credentials and data while allowing plaintext or unauthenticated TLS connections.

Install only if you will configure a dedicated read-only Odoo API account, use an HTTPS Odoo URL with valid certificate verification, avoid --insecure, and are comfortable with local report files containing sensitive financial data. Review and pin dependencies before production use.

Vulnerability Patterns
  • 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
  • Remote Payload Retrieval and ExecutionFetches external code whose behavior can change after review
Findings (2)

T09 · Insecure Skill Coding Practices

Error
Location
assets/autonomous-cfo/src/connectors/odoo_client.py:84
Finding

Odoo Credentials and Financial Data May Be Transmitted Without Authenticated TLS

Content
View full analysis
Remediation
View remediation

T08 · Insecure Dependencies

Warning
Location
assets/autonomous-cfo/install.sh:16
Finding

Installation Resolves Mutable and Unhashed Third-Party Dependencies

Content
View full analysis
=2.31.0,<3.0.0 matplotlib>=3.8.0,<4.0.0 pillow>=10.0.0,<12.0.0 fpdf2>=2.8.0,<3.0.0 openpyxl>=3.1.0,<4.0.0 pytest>=8.0.0,<9.0.0 ``` ### Technical Analysis The installation script upgrades pip and installs dependencies using broad version ranges without cryptographic hashes. Consequently, two installations performed at different times can resolve to different artifacts. Pip uses its configured package index and trusted-host settings. If that index, a mirror, DNS resolution, proxy configuration, or an allowed future package release is compromised, pip may install attacker-controlled code. Python packages can execute code during build or installation, and imported package modules execute code during runtime. The script immediately imports several installed dependencies during verification and may invoke the `doctor` command when a `.env` file exists. Therefore, a compromised dependency could execute in an environment where Odoo credentials are present. Including `pytest` in production runtime requirements also unnecessarily expands the installed dependency graph and attack surface. ### Attack Path 1. An attacker compromises or redirects the Python package index or mirror used by pip, or compromises a future release within one of the accepted version ranges. 2. A user runs `assets/autonomous-cfo/install.sh`. 3. The script upgrades pip and resolves the current matching versions without checking approved hashes. 4. Pip installs the attacker-controlled distribution or one ...[truncated 994 chars]
Remediation
View remediation
Vulnerability Patterns
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Taint TrackingDirect Taint Flow, Variable-Mediated Taint Flow, Credential Exfiltration Chain
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
Findings (54)

Tainted flow: 'url' from os.getenv (line 115, credential/environment) → requests.post (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · assets/autonomous-cfo/src/connectors/odoo_client.py (reported line 167)May include surrounding context.

python
for _ in range(attempts):
            try:
                resp = requests.post(
                    url=url,
                    headers=self._headers(),
                    json=payload,

Tainted flow: 'url' from os.getenv (line 47, credential/environment) → requests.get (network output)

Critical
Category
Data Flow
Confidence
90% confidence
Finding

Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.

Content

Scanner excerpt · assets/autonomous-cfo/src/tools/cfo_cli.py (reported line 52)May include surrounding context.

python
return "xmlrpc"

    try:
        resp = requests.get(f"{url}/web/version", timeout=min(args.timeout, 10), verify=not args.insecure)
        resp.raise_for_status()
        payload = resp.json() if resp.text else {}
        version = str(payload.get("version", ""))

Tp4

High
Category
MCP Tool Poisoning
Confidence
94% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
86% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
90% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
99% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
96% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
95% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

Tp4

High
Category
MCP Tool Poisoning
Confidence
89% confidence
Finding

If the skill exposes raw RPC execution against arbitrary Odoo models and methods plus local config writes without explicit declaration, that materially expands the attack surface beyond the stated read-only reporting purpose. In a finance-connected skill, undeclared generic RPC can enable unauthorized access to sensitive records or invocation of unexpected server-side methods if not strictly constrained.

Content

No source excerpt is available for this finding.

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 · assets/autonomous-cfo/install.sh (reported line 26)May include surrounding context.

sh
./venv/bin/python -c "import requests, matplotlib, PIL, fpdf; print('All dependencies installed')"

# Test connection (requires .env)
if [ -f ".env" ]; then
    echo "Testing Odoo connection..."
    ./venv/bin/python src/tools/cfo_cli.py doctor
else

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 · assets/autonomous-cfo/src/connectors/odoo_client.py (reported line 398)May include surrounding context.

python
./venv/bin/python -c "import requests, matplotlib, PIL, fpdf; print('All dependencies installed')"

# Test connection (requires .env)
if [ -f ".env" ]; then
    echo "Testing Odoo connection..."
    ./venv/bin/python src/tools/cfo_cli.py doctor
else

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 · assets/autonomous-cfo/src/tools/cfo_cli.py (reported line 65)May include surrounding context.

python
./venv/bin/python -c "import requests, matplotlib, PIL, fpdf; print('All dependencies installed')"

# Test connection (requires .env)
if [ -f ".env" ]; then
    echo "Testing Odoo connection..."
    ./venv/bin/python src/tools/cfo_cli.py doctor
else

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 · assets/autonomous-cfo/tests/test_skill.py (reported line 204)May include surrounding context.

python
./venv/bin/python -c "import requests, matplotlib, PIL, fpdf; print('All dependencies installed')"

# Test connection (requires .env)
if [ -f ".env" ]; then
    echo "Testing Odoo connection..."
    ./venv/bin/python src/tools/cfo_cli.py doctor
else

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 · skill.json (reported line 58)May include surrounding context.

json
./venv/bin/python -c "import requests, matplotlib, PIL, fpdf; print('All dependencies installed')"

# Test connection (requires .env)
if [ -f ".env" ]; then
    echo "Testing Odoo connection..."
    ./venv/bin/python src/tools/cfo_cli.py doctor
else

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 · SKILL.md (reported line 38)May include surrounding context.

md
def load_env_file(path: Optional[str]) -> None:
    """Lightweight .env loader (no external dependency)."""
    if not path:
        return
    if not os.path.isfile(path):

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 · SKILL.md (reported line 39)May include surrounding context.

md
def load_env_file(path: Optional[str]) -> None:
    """Lightweight .env loader (no external dependency)."""
    if not path:
        return
    if not os.path.isfile(path):

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 · SKILL.md (reported line 40)May include surrounding context.

md
def load_env_file(path: Optional[str]) -> None:
    """Lightweight .env loader (no external dependency)."""
    if not path:
        return
    if not os.path.isfile(path):

Static analysis

No suspicious patterns detected.