Back to skill

Security audit

Calendar Extractor

Security checks for vulnerabilities and agentic risk

Overview

This appears to be a real calendar-extraction skill, but it needs Review because enabling it can automatically read voice and keyboard transcripts and push pending calendar items without a run-time approval gate.

Install only if you are comfortable with HiJavis automatically processing recent or embedded voice and keyboard transcripts when the skill is enabled, writing extracted events as pending calendar rows, and sending event cards to chat before you confirm them. Check the app's privacy, retention, and disable controls first.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
  • Unauthorized Access and Privilege EscalationObtains permissions beyond the task's legitimate needs
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Excessive AgencyUnrestricted Tool Access, Autonomous Decision Making, Scope Creep
  • Memory PoisoningPersistent Context Injection, Context Window Stuffing, Memory Manipulation
  • Trigger AbuseOverly Broad Trigger, Shadow Command Trigger, Keyword Baiting Trigger
Findings (29)

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
fier, no route matching. This skill's own agent decides for itself, using this `SKILL.md`, whether the unit is worth acting on; if not, it does nothing (see "Ho

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
fier, no route matching. This skill's own agent decides for itself, using this `SKILL.md`, whether the unit is worth acting on; if not, it does nothing (see "Ho

Vague Triggers

High
Category
Not specified by scanner
Confidence
95% confidence
Finding

The skill is configured to auto-run on every completed voice/keyboard unit and explicitly lets its own agent decide whether a transcript is 'worth acting on.' That creates broad, self-authorized access to sensitive transcript content and can trigger extraction/push behavior from ordinary conversations without an explicit user action at the time of processing.

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 38)May include surrounding context.

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Ae1

High
Category
analysis-evasion
Confidence
100% confidence
Finding

Referenced artifact was not completely inspected

Content

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

md
node scripts/calendar-extractor.js fetch [--hours N] [--limit N]

Memory Manipulation

High
Category
Memory Poisoning
Confidence
90% confidence
Finding

Skill manipulates agent memory, state, or stored context. Memory corruption can alter personality, override safety rules, or cause unpredictable behavior.

Content

Scanner excerpt · scripts/calendar-extractor.js (reported line 145)May include surrounding context.

js
try {
    return readJson(p);
  } catch (e) {
    // A truncated/corrupt state file (e.g. a kill mid-write before the atomic
    // rename landed, on an older volume) must not brick every future run.
    // `seen` is best-effort dedup state, so start fresh.
    console.error(`⚠️ state file unreadable, starting fresh: ${e.message}`);

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 · test/data.test.js (reported line 25)May include surrounding context.

js
}

test('sanitizeId rejects path-traversal userIds (exits non-zero)', () => {
  for (const bad of ['../etc/passwd', '..', 'a/../../b', 'foo/bar']) {
    const r = runGuard(`d.sanitizeId(${JSON.stringify(bad)})`);
    assert.notEqual(r.status, 0, `"${bad}" must be rejected`);
    assert.match(r.stderr, /Invalid userId/);

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 · test/data.test.js (reported line 37)May include surrounding context.

js
}

test('sanitizeId rejects path-traversal userIds (exits non-zero)', () => {
  for (const bad of ['../etc/passwd', '..', 'a/../../b', 'foo/bar']) {
    const r = runGuard(`d.sanitizeId(${JSON.stringify(bad)})`);
    assert.notEqual(r.status, 0, `"${bad}" must be rejected`);
    assert.match(r.stderr, /Invalid userId/);

Anti-Refusal Statement

High
Category
Anti-Refusal
Confidence
80% confidence
Finding

Skill instructs the agent to omit warnings, disclaimers, or ethical commentary. Stripping safety caveats hides risk from the user and is a common jailbreak preamble.

Content

Scanner excerpt · test/update.test.js (reported line 460)May include surrounding context.

js
try {
    const tz = await resolveUserTz({ explicitTz: 'America/Los_Angeles' });
    assert.equal(tz, 'America/Los_Angeles');
    assert.equal(errs.length, 0, 'no warning when a real zone is found');
  } finally {
    console.error = origErr;
  }

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The README explicitly states that the app listens to conversations, scans recent recordings, and processes meetings, but it does not provide a clear privacy notice, consent model, retention policy, or disclosure about how sensitive audio and extracted event data are handled. Because this skill operates on inherently sensitive personal and third-party conversation data, the lack of prominent privacy and consent disclosures increases the risk of covert or overbroad collection and user misunderstanding.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
87% confidence
Finding

The skill description advertises extraction and pushing behavior, but it does not present a prominent user warning about automatic background access to the last 24 hours of transcripts and delivery into iOS chat threads. Because the skill also supports dispatcher-driven automatic execution, insufficient disclosure materially raises privacy and surprise risks.

Content

No source excerpt is available for this finding.

Vague Triggers

Medium
Category
Not specified by scanner
Confidence
89% confidence
Finding

The route matching text uses generic concepts like meetings, appointments, events, agenda, and dates/times mentioned, which are common in normal conversation. In context, this increases the chance of unintended activation and processing of unrelated transcripts, causing privacy-invasive overcollection and accidental event creation.

Content

No source excerpt is available for this finding.

Autonomous Decision Making

Medium
Category
Excessive Agency
Confidence
85% confidence
Finding

Skill enables autonomous high-impact decisions without human-in-the-loop verification. Critical operations (destructive commands, financial transactions, data deletion) should require explicit user confirmation.

Content

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

md
# anchor — print the CURRENT relative-date anchor (resolve "today / 6 pm / tomorrow" on an edit turn)
node scripts/calendar-extractor.js anchor            # optional: --tz <IANA> for the card's calendar zone

# update — edit ONE pushed card in place (verbatim dedup_key, full merged patch, auto-confirm)
echo '{"dedup_key":"<verbatim>","patch":{...}}' | node scripts/calendar-extractor.js update

# Optional: explicit userId / multi-profile (back-compat — prepend the ID)

Static analysis

Detected: suspicious.dangerous_exec, suspicious.env_credential_access

Shell command execution detected (child_process).

Critical
Code
suspicious.dangerous_exec
Location
test/data.test.js:19

Environment variable access combined with network send.

Critical
Code
suspicious.env_credential_access
Location
scripts/calendar-extractor.js:78