Back to skill

Security audit

Nyne Deep Research

Security checks for vulnerabilities and agentic risk

Overview

This skill does what it says, but it enables deep profiling of real people with weak privacy, consent, credential, and data-handling safeguards.

Install only if you have a legitimate, authorized reason to send a person's identifiers to Nyne and receive a detailed dossier about them. Avoid using it for covert profiling, harassment, discrimination, or sensitive decisions; prefer temporary credentials, do not print secret fragments, and avoid saving full results to predictable temp files or webhook destinations you do not control.

Vulnerability Patterns
  • 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
  • Embedded Malicious CodeShips malicious scripts inside the skill and executes them locally
Findings (3)

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:110
Finding

Predictable Temporary File Exposes Sensitive Intelligence Dossiers

Content
View full analysis
/tmp/nyne_response.json STATUS=$(jq -r '.data.status' /tmp/nyne_response.json) echo "Status: $STATUS ($SECONDS_WAITED seconds elapsed)" if [ "$STATUS" = "completed" ]; then jq '.data.result' /tmp/nyne_response.json break elif [ "$STATUS" = "failed" ]; then echo "Research failed." jq . /tmp/nyne_response.json ``` The same fixed path is also used by the polling example at `SKILL.md:239-253` and referenced throughout `SKILL.md:365-393`. ### Technical Analysis The API response is written to the predictable shared path `/tmp/nyne_response.json`. The documented response can contain email addresses, phone numbers, social profiles, employment and education history, political leanings, psychographic details, relationships, and other sensitive personal information. The instructions do not securely create the file, set restrictive permissions, verify that the path is a regular file owned by the current user, or remove the file after use. Because shell redirection follows symbolic links, a local attacker may be able to pre-create the path as a symlink and redirect the write. Depending on operating-system protections and process privileges, this could overwrite another writable file. A local process may also monitor or read the predictable file if its permissions allow access. The file remains on disk after processing, increasing the period during which the dossier can be recovered or accessed. ### Attack Path 1. An attacker with local access monitors the predictable `/tmp/nyne_response.json` path or creates it before the victi ...[truncated 1180 chars]
Remediation
View remediation
"$RESPONSE_FILE" STATUS=$(jq -r '.data.status' "$RESPONSE_FILE") ``` Additional hardening measures: - Never use a constant filename in a shared temporary directory. - Check that temporary-file creation succeeds before sending the API request. - Quote every reference to the generated path. - Keep `umask 077` active while handling dossier data. - Avoid writing the full response to disk where streaming or in-memory processing is practical. - Redact unnecessary personal fields before displaying or retaining results. - Define and enforce an explicit retention policy for any intentionally saved dossier. ]]>

T09 · Insecure Skill Coding Practices

Warning
Location
SKILL.md:52
Finding

API Credentials Are Persisted in an Unprotected Plaintext File

Content
View full analysis
> ~/.nyne_env echo 'export NYNE_API_SECRET="your-api-secret"' >> ~/.nyne_env source ~/.nyne_env ``` ### Technical Analysis The setup instructions recommend persisting the Nyne API key and secret in a plaintext shell file. They do not set or verify restrictive file permissions, validate file ownership, or ensure that `~/.nyne_env` is a regular file rather than a symbolic link. The resulting permissions depend on the user's current `umask` and any pre-existing file permissions. If the file is group-readable or world-readable, another local account can obtain both credentials. Appending to an unverified path can also be unsafe if an attacker can manipulate the file or its parent directory. Using `source ~/.nyne_env` executes the file as shell code. If another local principal can modify that file, the next sourcing operation executes attacker-controlled commands with the victim user's privileges. ### Attack Path 1. The victim follows the documented instructions and stores the API key and secret in `~/.nyne_env`. 2. The file is created or reused without an explicit permission or ownership check. 3. Another local user or compromised process reads the file if permissions permit. 4. The attacker extracts `NYNE_API_KEY` and `NYNE_API_SECRET`. 5. The attacker uses those credentials to submit unauthorized research requests, consume account credits, or retrieve data accessible through the account. 6. If the attacker can modify the file, the attacker inserts shell commands that execute when the victim next runs `source ~/.nyne_env`. ### Impact Assessment Credential theft grants the attacker the API access associated with the victim's Nyne account. This may permit unauthorized person-research requests, cr ...[truncated 420 chars]
Remediation
View remediation
&2 exit 1 fi umask 077 install -m 600 /dev/null "$CREDENTIAL_FILE" || exit 1 printf '%s\n' \ 'export NYNE_API_KEY="your-api-key"' \ 'export NYNE_API_SECRET="your-api-secret"' \ > "$CREDENTIAL_FILE" chmod 600 "$CREDENTIAL_FILE" ``` Further safeguards should include: - Verify that the file is owned by the current user before reading or replacing it. - Do not append credentials to an existing, unverified path. - Keep the file outside version-controlled directories. - Rotate credentials immediately if exposure is suspected. - Use narrowly scoped and revocable credentials where supported. - Avoid sourcing writable configuration files. Parse data-only configuration rather than executing it as shell code. ]]>

T09 · Insecure Skill Coding Practices

Note
Location
SKILL.md:61
Finding

Credential Prefixes Are Disclosed in Terminal and Log Output

Content
View full analysis
Remediation
View remediation
&2 exit 1 fi ``` For stronger verification, make a minimally privileged authentication or account-status request and report only whether authentication succeeded. Ensure that diagnostic logs never include authorization headers, environment-variable values, or secret fragments. ]]>
Vulnerability Patterns
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
  • Rogue AgentSelf-Modification, Session Persistence
  • Supply ChainUnpinned Dependencies, External Script Fetching, Obfuscated Code
Findings (23)

Missing User Warnings

High
Category
Not specified by scanner
Confidence
98% confidence
Finding

The skill explicitly facilitates submitting third-party personal identifiers (email, phone, social URLs, name/company/city) to an external profiling service, yet its description contains no user warning about transmitting personal data or generating sensitive intelligence dossiers. This omission materially increases the risk of non-consensual surveillance, privacy harm, and misuse because users are not prompted to consider consent, legality, or sensitivity before using the skill.

Content

No source excerpt is available for this finding.

Missing User Warnings

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

The agent instructions tell the model to present maximum depth and display every section in full, including psychographic, personal-life, social-graph, relationship, warning, and 'creepy-good insights' sections, with no privacy guardrails. That instruction encourages unnecessary disclosure of highly sensitive personal profiling data and defeats data minimization, making misuse substantially easier.

Content

No source excerpt is available for this finding.

Ssd 3

High
Category
Not specified by scanner
Confidence
99% confidence
Finding

These instructions direct the agent to reveal the entire dossier sequentially, including personal life, social graph, key relationships, warnings/landmines, and psychographic profiling, instead of minimizing private data. In the context of a person-intelligence tool, this substantially raises the chance of doxxing, stalking, manipulation, or discriminatory profiling by operationalizing sensitive inferences for end users.

Content

No source excerpt is available for this finding.

Credential Access

High
Category
Privilege Escalation
Confidence
92% confidence
Finding

The skill instructs users to persist API credentials in a sourced local file, which normalizes long-lived secret storage and increases the chance of accidental disclosure through shell history, misconfigured permissions, backups, or shared environments. While common operational guidance, it is risky in agent contexts because secrets may be broadly accessible or inadvertently exfiltrated by other tools.

Content

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

To persist across sessions, add the exports to your shell profile (~/.zshrc, ~/.bashrc, etc.) or create a .env file and source it:

bash
# Create .env file (keep out of version control)
echo 'export NYNE_API_KEY="your-api-key"' >> ~/.nyne_env
echo 'export NYNE_API_SECRET="your-api-secret"' >> ~/.nyne_env
source ~/.nyne_env

Session Persistence

Medium
Category
Rogue Agent
Confidence
85% confidence
Finding

The instructions encourage persisting credentials across sessions by modifying shell profiles or sourcing a local env file, which broadens the lifetime and exposure of secrets beyond the immediate task. Persistent environment configuration can unintentionally grant unrelated sessions or tools access to the API credentials.

Content

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

export NYNE_API_SECRET="your-api-secret"

text

To persist across sessions, add the exports to your shell profile (`~/.zshrc`, `~/.bashrc`, etc.) or create a `.env` file and source it:
```bash
# Create .env file (keep out of version control)
echo 'export NYNE_API_KEY="your-api-key"' >> ~/.nyne_env

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This code sends user-supplied personal identifiers to api.nyne.ai over the network to initiate profiling. While external transmission is the core function of the skill, it is still security-relevant because the transmitted data is highly sensitive and the documentation does not include strong consent, notice, or minimization safeguards.

Content

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

md
}

# Submit research request
REQUEST_ID=$(curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This code sends user-supplied personal identifiers to api.nyne.ai over the network to initiate profiling. While external transmission is the core function of the skill, it is still security-relevant because the transmitted data is highly sensitive and the documentation does not include strong consent, notice, or minimization safeguards.

Content

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

md
}

# Submit research request
REQUEST_ID=$(curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

Polling the external endpoint retrieves the completed dossier from Nyne, which may contain sensitive personal data, and writes it to a local temporary file. This extends the exposure surface because sensitive results are both transmitted from the third-party service and stored locally without any caution about handling or disposal.

Content

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

md
# Poll until complete (checks every 5s, times out after 10 min)
SECONDS_WAITED=0
while [ $SECONDS_WAITED -lt 600 ]; do
  curl -s "https://api.nyne.ai/person/deep-research?request_id=$REQUEST_ID" \
    -H "X-API-Key: $NYNE_API_KEY" \
    -H "X-API-Secret: $NYNE_API_SECRET" | nyne_parse > /tmp/nyne_response.json
  STATUS=$(jq -r '.data.status' /tmp/nyne_response.json)

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 134)May include surrounding context.

Submit Research (POST)

Endpoint: POST https://api.nyne.ai/person/deep-research

Headers:

text

External Transmission

Medium
Category
Data Exfiltration
Confidence
50% 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 217)May include surrounding context.

Submit Research (POST)

Endpoint: POST https://api.nyne.ai/person/deep-research

Headers:

text

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
91% confidence
Finding

The documented callback_url parameter enables the service to POST completed results to an external webhook, but the skill provides no warning that sensitive dossier data may be automatically transmitted to another system. This creates a real risk of inadvertent exfiltration, especially if users supply third-party or misconfigured webhook endpoints.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This example transmits an email address for a third party to an external profiling API. The danger comes from enabling non-consensual research on real people using direct identifiers without a warning or validation step, which can expose users and subjects to privacy and compliance risks.

Content

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

By email:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

This example transmits an email address for a third party to an external profiling API. The danger comes from enabling non-consensual research on real people using direct identifiers without a warning or validation step, which can expose users and subjects to privacy and compliance risks.

Content

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

By email:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This example sends a social media profile URL to an external service for deep profiling. Social URLs are still personal data, and the surrounding instructions normalize third-party enrichment and inference generation without any notice about sensitivity or acceptable-use constraints.

Content

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

By social media URL:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This example sends a social media profile URL to an external service for deep profiling. Social URLs are still personal data, and the surrounding instructions normalize third-party enrichment and inference generation without any notice about sensitivity or acceptable-use constraints.

Content

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

By social media URL:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This example transmits multiple social profile URLs, increasing the breadth of data aggregation and enabling more comprehensive cross-platform profiling. The absence of warnings or limits around combining identifiers makes the skill more dangerous in practice because it facilitates richer dossiers on third parties.

Content

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

By multiple social URLs:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
94% confidence
Finding

This example transmits multiple social profile URLs, increasing the breadth of data aggregation and enabling more comprehensive cross-platform profiling. The absence of warnings or limits around combining identifiers makes the skill more dangerous in practice because it facilitates richer dossiers on third parties.

Content

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

By multiple social URLs:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This example sends a person's name plus employer to disambiguate identity for external profiling, which supports targeted research on real individuals. The risk is amplified because employer context can reduce ambiguity and improve matching accuracy, making non-consensual identification easier.

Content

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

By name + company:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

This example sends a person's name plus employer to disambiguate identity for external profiling, which supports targeted research on real individuals. The risk is amplified because employer context can reduce ambiguity and improve matching accuracy, making non-consensual identification easier.

Content

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

By name + company:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This example transmits a phone number, a highly sensitive and strongly identifying datum, to an external API for dossier generation. Using phone numbers materially increases privacy risk, potential re-identification, and misuse potential compared with less specific identifiers.

Content

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

By phone:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
96% confidence
Finding

This example transmits a phone number, a highly sensitive and strongly identifying datum, to an external API for dossier generation. Using phone numbers materially increases privacy risk, potential re-identification, and misuse potential compared with less specific identifiers.

Content

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

By phone:

bash
curl -s -X POST "https://api.nyne.ai/person/deep-research" \
  -H "Content-Type: application/json" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" \

External Transmission

Medium
Category
Data Exfiltration
Confidence
88% confidence
Finding

This example retrieves sensitive status/result data from the external service. Although the request itself is expected behavior, the skill lacks guidance on limiting who can access returned request IDs and outputs, which can expose sensitive dossier results if shared or logged carelessly.

Content

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

Check status once

bash
curl -s "https://api.nyne.ai/person/deep-research?request_id=$REQUEST_ID" \
  -H "X-API-Key: $NYNE_API_KEY" \
  -H "X-API-Secret: $NYNE_API_SECRET" | nyne_parse | jq '{status: .data.status, completed: .data.completed}'

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

The full polling loop repeatedly retrieves sensitive dossier data and stores it in /tmp/nyne_response.json, increasing the window and surface for local exposure. On multi-user systems or shared agent environments, predictable temp-file handling can leak private results to other processes or users.

Content

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

md
TIMEOUT=600  # 10 minutes

while [ $SECONDS_WAITED -lt $TIMEOUT ]; do
  curl -s "https://api.nyne.ai/person/deep-research?request_id=$REQUEST_ID" \
    -H "X-API-Key: $NYNE_API_KEY" \
    -H "X-API-Secret: $NYNE_API_SECRET" | nyne_parse > /tmp/nyne_response.json
  STATUS=$(jq -r '.data.status' /tmp/nyne_response.json)

Static analysis

No suspicious patterns detected.