Back to skill

Security audit

Timeless.day Meeting Notes

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real Timeless integration, but it needs review because it can access and move sensitive meeting data and includes broad automation and download helpers with weak safeguards.

Install only if you are comfortable giving the agent access to your Timeless account data and selected local recordings. Store the token as a secret, avoid pasting it into chats or logs, require confirmation before uploads, room mutations, exports, or cron automations, and restrict podcast/YouTube downloads to trusted public URLs and safe output directories.

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/podcast.sh:21
Finding

Unrestricted URL Fetching and Arbitrary File Overwrite

Content
View full analysis
d+=c);process.stdin.on('end',()=>{ const items=d.match(/[\s\S]*?<\/item>/g)||[]; items.slice(0,parseInt(process.argv[1])).forEach((item,i)=>{ const title=item.match(/(?:<!\[CDATA\[)?(.*?)(?:\]\]>)?<\/title>/)?.[1]||'untitled'; const url=item.match(/enclosure[^>]*url=\"([^\"]*)\"/)?.[1]||'no url'; const date=item.match(/<pubDate>(.*?)<\/pubDate>/)?.[1]||''; console.log((i+1)+'. '+title); console.log(' Date: '+date); console.log(' URL: '+url); console.log(''); }); })" "$LIMIT" ;; download) URL="${2:?Usage: podcast.sh download MP3_URL OUTPUT_PATH}" OUTPUT="${3:?}" echo "Downloading to ${OUTPUT}..." curl -sL -o "$OUTPUT" "$URL" SIZE=$(ls -lh "$OUTPUT" | awk '{print $5}') echo "Done. Size: ${SIZE}" ;; ``` ### Technical Analysis Both modes pass an unrestricted, caller-controlled URL directly to `curl`. No validation limits the scheme, destination hostname, resolved IP address, port, or redirect destination. Because redirects are enabled with `-L`, validation of only the initial URL would also be insufficient. Depending on the protocols enabled in the installed `curl`, this may permit requests to: - Loopback services such as `127.0.0.1` or `localhost` - Private network services - Link-local and cloud instance metadata services - Non-HTTP resources, including local `file://` URLs - Redirect destinations that differ from the originally supplied host The `download` operation additionally accepts an unrestricted output path and invokes `curl -o` without check ...[truncated 1442 chars]
Remediation
View remediation

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/upload.sh:28
Finding

Unescaped User-Controlled Values in JSON Request Bodies

Content
View full analysis
d+=c);process.stdin.on('end',()=>console.log(JSON.parse(d).url))") # Step 2: Upload echo "Uploading $FILENAME..." curl -s -X PUT "$URL" -H "Content-Type: $MIME" --upload-file "$FILE" > /dev/null # Step 3: Process echo "Processing..." RESULT=$(curl -s -X POST "$BASE/api/v1/conversation/process/media/" \ -H "Authorization: Token $TOKEN" \ -H "Content-Type: application/json" \ -d "{\"language\": \"$LANG\", \"filename\": \"$TITLE\"}") ``` ### Technical Analysis `FILENAME`, `LANG`, and `TITLE` are inserted directly into JSON strings without JSON encoding. Shell quoting prevents these values from becoming shell commands, but it does not make them valid or safe JSON values. A value containing a double quote, backslash, newline, or other JSON control character can terminate or alter the intended string. A crafted value can therefore: - Produce invalid JSON and disrupt uploads - Add or replace object properties if the server accepts duplicate or additional fields - Cause server-side behavior to differ from the operation represented by the script The exact effect of injected properties depends on the Timeless API schema and server-side validation. No evidence was found that this flaw permits local shell execution. ### Attack Path 1. An attacker influences the local filename, language argument, or title supplied to `upload.sh`. 2. The value includes JSON syntax such as a closing quote followed by an additional property. 3. The script interpolates the value directl ...[truncated 730 chars]
Remediation
View remediation

T08 · Insecure Dependencies

Note
Location
SKILL.md:32
Finding

Unpinned Third-Party Package Installation Guidance

Content
View full analysis
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
  • Tool MisuseTool Parameter Abuse, Chaining Abuse, Unsafe Defaults
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
Findings (29)

Tp4

High
Category
MCP Tool Poisoning
Confidence
98% confidence
Finding

The declared description centers on a broad Timeless meeting-management and transcription workflow, including capturing podcast episodes and YouTube videos into Timeless. However, this code only implements raw podcast discovery and downloading. While podcast capture is mentioned in the description, the critical represented behavior is missing: there is no code to send content into Timeless, create records, upload media, trigger transcription, or manage any Timeless entities. This makes the actual behavior materially narrower and different from the declared purpose. The code also lacks any YouTube handling. Therefore, the description does not accurately represent what this code chunk actually does.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
73% confidence
Finding

The document instructs users to manually retrieve and copy a long-lived account token tied to their user account. In an agent-skill context, encouraging direct token handling increases the risk of credential exposure through prompts, logs, screenshots, copy/paste mistakes, or accidental submission to the wrong tool, potentially granting broad access to private meetings, transcripts, and recordings.

Content

Scanner excerpt · api-reference.md (reported line 22)May include surrounding context.

md
### How to Get Your Token

1. Go to [my.timeless.day/api-token](https://my.timeless.day/api-token)
2. Copy the access token

> This token is tied to your user account. It may expire; grab a fresh one from the same page if you get 401 errors.

Tool Parameter Abuse

High
Category
Tool Misuse
Confidence
84% confidence
Finding

The skill exposes a destructive endpoint that removes resources from rooms based on user-supplied identifiers, with no mention of confirmation, ownership validation, or safeguards against ambiguous target selection. In an agent setting, this creates a real risk of tool-parameter abuse where prompt injection, misunderstanding, or malicious instruction could cause unauthorized or unintended deletion-like state changes to organizational knowledge structures.

Content

Scanner excerpt · api-reference.md (reported line 619)May include surrounding context.

11. Remove Resource from Room

text
DELETE /api/v1/spaces/{space_uuid}/resources/

Remove a conversation from a room.

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/podcast.sh (reported line 12)May include surrounding context.

sh
case "${1:-}" in
  search)
    QUERY="${2:?Usage: podcast.sh search \"query\"}"
    curl -s "https://itunes.apple.com/search?term=$(node -e "console.log(encodeURIComponent(process.argv[1]))" "$QUERY")&media=podcast&limit=10" | node -e "
      let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{
        const r=JSON.parse(d);
        r.results.forEach((p,i)=>console.log((i+1)+'. '+p.collectionName+' | FEED: '+p.feedUrl));

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

This accepts an arbitrary user-supplied FEED_URL, fetches it with curl, and processes the response, creating an SSRF primitive that can reach internal or otherwise restricted network locations from the environment where the skill runs. While the fetched content is not executed as code, skill context makes this more dangerous because podcast/RSS URLs are expected user input, so an attacker can plausibly supply internal endpoints, cloud metadata URLs, or large responses to probe services or cause resource abuse.

Content

Scanner excerpt · scripts/podcast.sh (reported line 23)May include surrounding context.

sh
episodes)
    FEED_URL="${2:?Usage: podcast.sh episodes FEED_URL [limit]}"
    LIMIT="${3:-10}"
    curl -sL "$FEED_URL" | node -e "
      let d='';process.stdin.on('data',c=>d+=c);process.stdin.on('end',()=>{
        const items=d.match(/<item>[\s\S]*?<\/item>/g)||[];
        items.slice(0,parseInt(process.argv[1])).forEach((item,i)=>{

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/upload.sh (reported line 28)May include surrounding context.

sh
# Step 1: Presigned URL
echo "Getting upload URL..."
PRESIGN=$(curl -s -X POST "$BASE/api/v1/conversation/storage/presigned-url/" \
  -H "Authorization: Token $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"file_name\": \"$FILENAME\", \"file_type\": \"$MIME\"}")

External Script Fetching

High
Category
Supply Chain
Confidence
90% confidence
Finding

Remote code is downloaded and executed. This bypasses code review and could introduce malicious code.

Content

Scanner excerpt · scripts/upload.sh (reported line 36)May include surrounding context.

sh
# Step 2: Upload
echo "Uploading $FILENAME..."
curl -s -X PUT "$URL" -H "Content-Type: $MIME" --upload-file "$FILE" > /dev/null

# Step 3: Process
echo "Processing..."

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
94% confidence
Finding

The skill clearly instructs use of shell/network-capable tooling (curl, bash, node, yt-dlp) but does not declare an explicit tool scope such as allowed tools or permissions. That increases the blast radius of the skill because an agent may invoke broader shell capabilities than users expect when handling sensitive meeting content and local files.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

| per_page | integer | Results per page (default: 20) |

bash
curl -s "https://my.timeless.day/api/v1/spaces/meeting/?include=owned&status=COMPLETED&per_page=50" \
  -H "Authorization: Token $TIMELESS_ACCESS_TOKEN"

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
76% confidence
Finding

The documentation shows language: "he" in transcript/upload-related examples, which can bias usage toward a specific language/locale. There is no accompanying note that language should be selected based on user preference or source content, nor any justification that this is a Hebrew-only skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The upload workflow sends local audio/video files to a third-party service without any prominent privacy, consent, or data-handling warning. Because recordings may contain sensitive conversations, personal data, or regulated content, silent transmission to Timeless can cause confidentiality breaches or policy violations if a user does not realize the data leaves the local environment.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The processing example sends {"language": "he"} when uploading recordings, which imposes a specific language setting on transcription behavior. The skill does not indicate that users can or should choose the language, making this a natural-language locale policy issue.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Step 1: Send Message

bash
curl -X POST "https://my.timeless.day/api/v1/agent/space/chat/" \
  -H "Authorization: Token $TIMELESS_ACCESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

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

Step 2: Poll for Response

bash
curl -s "https://my.timeless.day/api/v1/agent/threads/{thread_uuid}/" \
  -H "Authorization: Token $TIMELESS_ACCESS_TOKEN"

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
93% confidence
Finding

The automation section encourages exporting transcripts, summaries, participant data, and recording URLs to external systems without cautioning about sensitivity, authorization boundaries, or downstream handling. Automating distribution of meeting content materially increases the risk of oversharing confidential business discussions, personal data, or recordings into less controlled destinations.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference.md (reported line 168)May include surrounding context.

bash
# Private space
curl -s "https://my.timeless.day/api/v1/spaces/abc123/" \
  -H "Authorization: Token $TIMELESS_TOKEN"

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
88% confidence
Finding

The sample response uses "language": "he", and later examples also use Hebrew as the processing language, which can imply a fixed locale expectation. Because the document does not explain that language is user-selectable or limited to a region-specific use case, this may violate the policy against forcing a specific language without opt-in.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The "Upload a Recording" section describes uploading media to a presigned cloud URL and triggering transcription and AI processing, which affects user data and privacy. While the steps are clear technically, there is no explicit warning that uploaded recordings leave the local system and will be processed remotely.

Content

No source excerpt is available for this finding.

Natural-Language Policy Violations

Medium
Category
Not specified by scanner
Confidence
94% confidence
Finding

The request body for triggering processing sets "language": "he" as if it were the default invocation pattern. Without surrounding text that the language should be selected by the user or adapted to the recording, the documentation appears to enforce a specific locale.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference.md (reported line 436)May include surrounding context.

bash
# Send a question
curl -X POST "https://my.timeless.day/api/v1/agent/space/chat/" \
  -H "Authorization: Token $TIMELESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The workflow sections instruct users to export all meeting transcripts, resolve shared links, and fetch transcripts, which can expose sensitive conversation content, attendee identities, and shared workspace data. The file provides API mechanics but does not include any user-facing warning about privacy, consent, or careful handling of exported meeting data.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference.md (reported line 561)May include surrounding context.

Example

bash
curl -X POST "https://my.timeless.day/api/v1/spaces/" \
  -H "Authorization: Token $TIMELESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference.md (reported line 596)May include surrounding context.

Example

bash
curl -X POST "https://my.timeless.day/api/v1/spaces/ROOM_UUID/resources/" \
  -H "Authorization: Token $TIMELESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
60% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · api-reference.md (reported line 627)May include surrounding context.

Example

bash
curl -X DELETE "https://my.timeless.day/api/v1/spaces/ROOM_UUID/resources/" \
  -H "Authorization: Token $TIMELESS_TOKEN" \
  -H "Content-Type: application/json" \
  -d '{

External Transmission

Medium
Category
Data Exfiltration
Confidence
70% confidence
Finding

Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.

Content

Scanner excerpt · scripts/upload.sh (reported line 28)May include surrounding context.

sh
# Step 1: Presigned URL
echo "Getting upload URL..."
PRESIGN=$(curl -s -X POST "$BASE/api/v1/conversation/storage/presigned-url/" \
  -H "Authorization: Token $TOKEN" \
  -H "Content-Type: application/json" \
  -d "{\"file_name\": \"$FILENAME\", \"file_type\": \"$MIME\"}")

Static analysis

No suspicious patterns detected.