T09 · Insecure Skill Coding Practices
- Location
assets/autonomous-cfo/src/connectors/odoo_client.py:193- Finding
Odoo credentials may be transmitted without authenticated TLS
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill appears purpose-aligned rather than malicious, but it needs review because it handles sensitive Odoo financial credentials with broad read access and weak TLS/dependency safeguards.
Install only with a dedicated read-only Odoo user or API key, require an https:// Odoo URL, do not use --insecure in production, keep .env out of shared repositories with restrictive permissions, and treat rpc-call as broad read access to whatever that Odoo account can see.
assets/autonomous-cfo/src/connectors/odoo_client.py:193Odoo credentials may be transmitted without authenticated TLS
assets/autonomous-cfo/requirements.txt:1Dependency installation is not reproducible or integrity-locked
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
for _ in range(attempts):
try:
resp = requests.post(
url=url,
headers=self._headers(),
json=payload,
Credentials or environment variables flow to a network sink. This is a high-confidence indicator of credential exfiltration.
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", ""))
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
Exposing or enabling arbitrary raw Odoo RPC/model method execution is materially broader than a read/query reporting skill and can become dangerous even with nominal read-only intentions. If runtime controls are weak or bypassed, this could permit access to unintended models, metadata discovery, or even state-changing operations against the ERP system.
The skill explicitly depends on credentials stored in a local .env file and instructs users to create and edit that file. Storing sensitive ERP credentials in a plaintext local file materially increases the risk of accidental disclosure through backups, repo inclusion, permissive filesystem access, or other tools reading workspace files.
Setup:
cd skills/odoo/assets/autonomous-cfo
cp .env.example .env
# Edit .env with your actual credentials
nano .env
Repeating the instruction to copy a template into a live .env file reinforces a credential-handling pattern that relies on plaintext secrets near executable code. For an Odoo skill with network access, compromise of these credentials can expose sensitive accounting, customer, invoice, and operational data.
cd skills/odoo/assets/autonomous-cfo
cp .env.example .env
# Edit .env with your actual credentials
nano .env
The instruction to edit the .env manually shows that the workflow expects human-managed plaintext secrets, which are easy to mishandle and difficult to audit. Because the skill accesses an ERP system, leaked credentials could enable broad business-data exposure and potentially state changes if the account is not truly read-only.
cd skills/odoo/assets/autonomous-cfo cp .env.example .env
nano .env
### API Key vs Password
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
./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
No suspicious patterns detected.