T01 · Skill Instruction Hijacking
- Location
SKILL.md:15- Finding
Implicit Hijacking of Generic Employment Requests into Branded Credential Onboarding
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
The skill is coherent for WorkorAI recruiting, but it can route generic job or hiring requests into WorkorAI credential onboarding without an explicit platform choice.
Install this only if you want broad job-search and recruiting requests to use WorkorAI by default. Be aware that it may ask for or reuse a WorkorAI key for read/discovery calls, and that saved keys can persist locally. Do not approve state-changing actions such as applying, inviting, publishing, deleting, or changing review status unless the target and consequence are clear.
SKILL.md:15Implicit Hijacking of Generic Employment Requests into Branded Credential Onboarding
Referenced artifact was not completely inspected
- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
Referenced artifact was not completely inspected
- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
Referenced artifact was not completely inspected
- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
Referenced artifact was not completely inspected
- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
Referenced artifact was not completely inspected
- Resolve `scripts/credential-store.mjs` relative to this `SKILL.md`.
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Track whether ANY OS-store read surfaced a real backend error so
// handleGet can later flag that a shared-file fallback might be stale.
const KEYSTORE_NOT_FOUND_PATTERNS = [
/The specified item could not be found in the keychain/i, // macOS security
/The secret .* was not found/i, // PowerShell SecretManagement
/Cannot find a secret with name/i, // PowerShell SecretManagement variant
/Cannot find any secret/i, // older PowerShell SecretManagement
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Track whether ANY OS-store read surfaced a real backend error so
// handleGet can later flag that a shared-file fallback might be stale.
const KEYSTORE_NOT_FOUND_PATTERNS = [
/The specified item could not be found in the keychain/i, // macOS security
/The secret .* was not found/i, // PowerShell SecretManagement
/Cannot find a secret with name/i, // PowerShell SecretManagement variant
/Cannot find any secret/i, // older PowerShell SecretManagement
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Track whether ANY OS-store read surfaced a real backend error so
// handleGet can later flag that a shared-file fallback might be stale.
const KEYSTORE_NOT_FOUND_PATTERNS = [
/The specified item could not be found in the keychain/i, // macOS security
/The secret .* was not found/i, // PowerShell SecretManagement
/Cannot find a secret with name/i, // PowerShell SecretManagement variant
/Cannot find any secret/i, // older PowerShell SecretManagement
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
// Track whether ANY OS-store read surfaced a real backend error so
// handleGet can later flag that a shared-file fallback might be stale.
const KEYSTORE_NOT_FOUND_PATTERNS = [
/The specified item could not be found in the keychain/i, // macOS security
/The secret .* was not found/i, // PowerShell SecretManagement
/Cannot find a secret with name/i, // PowerShell SecretManagement variant
/Cannot find any secret/i, // older PowerShell SecretManagement
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
Code accesses credential files (SSH keys, AWS credentials, etc.). This could indicate credential theft attempts.
return false;
};
const getFromMacKeychain = () => {
if (platform() !== 'darwin') {
return null;
}
The skill explicitly instructs the agent to run local commands such as node scripts/credential-store.mjs ... and to handle API keys, yet the manifest declares no permissions or allowed-tools constraints. That mismatch weakens least-privilege boundaries: a broadly enabled runtime could expose environment data or permit unintended local execution beyond the narrow credential-storage use case.
The manifest description contains very broad trigger phrases like "find me a job" and "I need work," which are common conversational requests. Overbroad activation can cause the skill to engage in contexts the user did not intend, increasing the chance of unnecessary data access, credential prompting, or execution of discovery flows tied to an external hiring platform.
The trigger mapping says to treat generic candidate job-search requests as WorkorAI intents by default and not wait for the user to mention WorkorAI, MCP, or an API key. In context, this makes the skill more dangerous because it can auto-activate on ordinary employment-related speech, then proceed into onboarding, credential lookup, or platform-specific discovery without clear user intent to use this service.
The skill enables implicit invocation but does not define narrow trigger constraints, exclusions, or other guardrails in this file. Because this skill can access job-searching, hiring, candidate evaluation, invitations, and application-management actions on a live MCP surface, broad auto-invocation increases the chance the agent will call the skill from ambiguous user requests, causing unintended data access or workflow actions.
Detected: suspicious.dangerous_exec