Back to skill

Security audit

Driver Card Tachograph

Security checks for vulnerabilities and agentic risk

Overview

The skill matches its tachograph-processing purpose, but it needs Review because crafted filenames can trigger code execution and sensitive driver data is stored/exported without strong local safeguards.

Install only if you are comfortable reviewing and hardening the workflow first. Pin and verify the external parser source, restrict accepted filenames, fix the python3 -c validation pattern, run under a dedicated low-privilege account, and keep the data directory private because the database and CSV exports contain sensitive driver and vehicle records.

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 (3)

T09 · Insecure Skill Coding Practices

Error
Location
scripts/process.sh:99
Finding

Arbitrary Python Code Execution Through a Crafted Input Filename

Content
View full analysis
/dev/null; then log_error "JSON validation failed - output is not valid JSON" echo -e "${RED}✗ Invalid JSON output${NC}" return 1 fi ``` ### Technical Analysis The input filename is attacker-controlled when files can be placed in `data/inbox/` or supplied as the first argument to `process.sh`. Although the shell variable is quoted at the shell level, its content is inserted into a single-quoted Python string literal passed to `python3 -c`. A filename containing a single quote and suitable Python syntax can terminate the path literal, close the surrounding function calls, and append arbitrary Python statements. Shell quoting does not protect the generated Python program from source-code injection. For example, a basename shaped like the following can alter the generated Python expression: ```text card'));__import__('os').system('id');# ``` The parser must create the requested JSON output before the vulnerable validation command is reached. If it does, the injected Python statement runs under the account executing the workflow. ### Attack Path 1. The attacker obtains the ability to place a file in `data/inbox/` or persuade an operator to process an attacker-supplied path. 2. The attacker gives a valid-sized `.ddd` file a basename containing a quote, closing parentheses, injected Python code, and a comment marker. 3. The operator invokes `scripts/process.sh`, directly or through the documented workflow. 4. `BASENAM ...[truncated 905 chars]
Remediation
View remediation
/dev/null; then log_error "JSON validation failed - output is not valid JSON" echo -e "${RED}✗ Invalid JSON output${NC}" return 1 fi ``` Additional hardening should include: 1. Restrict accepted basenames to a conservative character set, such as letters, digits, periods, underscores, and hyphens. 2. Reject filenames containing control characters, path separators, quotes, or newline characters. 3. Resolve and verify that input and output paths remain within their intended directories. 4. Prefer a dedicated Python validation script over dynamically generated `python3 -c` programs. 5. Add regression tests using filenames containing quotes, whitespace, command substitutions, semicolons, and newline characters. ]]>

T08 · Insecure Dependencies

Warning
Location
references/build.md:12
Finding

Unpinned Third-Party Parser Is Built and Installed from a Mutable Branch

Content
View full analysis
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/import.py:585
Finding

Sensitive Tachograph Database and CSV Exports May Be Created with Broad Permissions

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • 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
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (10)

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

chmod +x ~/.openclaw/workspace/skills/driver-card-tachograph/bin/dddparser

4. Aufräumen

rm -rf /tmp/tachoparser

text

## Verifizieren

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

chmod +x ~/.openclaw/workspace/skills/driver-card-tachograph/bin/dddparser

4. Aufräumen

rm -rf /tmp/tachoparser

text

## Verifizieren

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

This code exports personal and operational tachograph data, including card numbers, names, birth dates, and vehicle identifiers, into CSV files on disk. Although the script logs progress, it does not provide any explicit warning or confirmation to the user that sensitive data will be written to export files.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

This script imports highly sensitive personal, operational, and location data—including names, birth date, card number, vehicle identifiers, work/activity history, border crossings, and GNSS records—into a persistent local SQLite database with no user warning, consent flow, retention controls, encryption, or access restriction measures. In the context of tachograph/driver card data, this materially increases privacy and compliance risk because a local database can be copied, queried, or retained indefinitely, exposing movement patterns and personal data if the host is shared or compromised.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
92% confidence
Finding

The script can automatically email operational details to an externally configured address via MAIL_TO, without any in-script confirmation or allowlist. In a data-processing workflow for tachograph files, even limited alert content can leak sensitive filenames, business activity, or processing events to unintended recipients if the environment is misconfigured or attacker-controlled.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The script performs a file-moving operation that removes the original .ddd file from its prior location and archives it elsewhere. While this behavior is part of the workflow, the file itself does not provide a clear upfront warning that running it will mutate user-managed files by relocating them.

Content

No source excerpt is available for this finding.

Intent-Code Divergence

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The header comments describe a workflow that processes files through parse, import, and archive steps, implying successful files should be counted as processed and failed files as failed. In batch mode, the code increments FAILED_COUNT when process_single_file succeeds and does not increment it on failure, which actively reverses the intended meaning of the counters and can cause misleading success/failure outcomes at exit.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
95% confidence
Finding

The document presents its operational instructions and notes in German, such as the build steps and headings, with no indication that the user can choose another language. Under the language/locale policy, forcing a specific language without opt-in can be a natural-language policy violation unless the constraint is documented and justified.

Content

No source excerpt is available for this finding.

Missing User Warnings

Low
Category
Not specified by scanner
Confidence
84% confidence
Finding

The script generates a JSON summary file containing database path, size, integrity status, and detailed export outcomes. While logging indicates the file path after writing, there is no upfront disclosure that an additional summary artifact will be created alongside the CSV exports.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Low
Category
Not specified by scanner
Confidence
90% confidence
Finding

This code file contains natural-language strings and comments in German (for example the docstring at L057 and subsequent user-facing output), while other parts are in English. Because the skill does not offer a user opt-in or language selection, it effectively imposes a locale/language choice in its natural-language interface.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.