Back to skill

Security audit

Abstract Searcher

Security checks for vulnerabilities and agentic risk

Overview

The skill performs a coherent bibliography-enrichment task, but it asks agents to use the user's real Chrome login sessions and automatically sends bibliography metadata to several external services without strong scoping or consent controls.

Install only if you are comfortable sharing bibliography-derived search terms with arXiv, OpenAlex, CrossRef, Semantic Scholar, Google Scholar, and potentially publisher sites. Avoid using it on confidential, unpublished, or enterprise bibliographies unless you can restrict network access. Do not allow the browser fallback to use your normal Chrome profile or institutional login unless you intentionally want those sessions used.

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

T09 · Insecure Skill Coding Practices

Warning
Location
scripts/add_abstracts.py:52
Finding

Untrusted Abstract Injection Through Plaintext arXiv Transport

Content
View full analysis
str: """Clean abstract text for BibTeX""" # Remove excessive whitespace text = re.sub(r'\s+', ' ', text).strip() # Remove or escape problematic characters (minimal) text = text.replace('\n', ' ') text = text.replace('\r', ' ') # Escape curly braces that aren't already escaped # text = text.replace('{', '\\{').replace('}', '\\}') return text ``` ```python if abstract: clean_abs = clean_abstract(abstract) lines.append(f" abstract={{{clean_abs}}},") ``` ### Technical Analysis Because the arXiv request is made over plaintext HTTP, it lacks transport confidentiality and server authentication. An attacker able to intercept or modify network traffic can replace the API response with forged XML. The script performs only a lenient title check and accepts the supplied summary as the abstract. `clean_abstract()` normalizes whitespace but does not safely encode BibTeX syntax, braces, or LaTeX control sequences. Brace escaping is explicitly commented out. Consequently, a forged abstract can terminate or restructure the generated field or introduce attacker-controlled LaTeX content. The Python script itself does not ex ...[truncated 1755 chars]
Remediation
View remediation
Vulnerability Patterns
  • Data ExfiltrationExternal Transmission, Env Variable Harvesting, File System Enumeration
  • MCP Least PrivilegeUnderdeclared Capability, Wildcard Permission, Missing Permission Declaration
  • MCP Tool PoisoningHidden Instructions, Unicode Deception, Parameter Description Injection
  • Prompt InjectionInstruction Override, Hidden Instructions, Exfiltration Commands
  • Privilege EscalationExcessive Permissions, Sudo/Root Execution, Credential Access
Findings (12)

Tp4

High
Category
MCP Tool Poisoning
Confidence
93% confidence
Finding

The documented behavior does not fully match the declared purpose: it uses OpenAlex without clear disclosure and instructs a browser-based Google Scholar fallback using the user's real Chrome profile, while the description understates that risk. Behavior mismatches are dangerous because they impair informed consent and can conceal privacy-sensitive actions or tool usage beyond what a user expects.

Content

No source excerpt is available for this finding.

Undeclared Tool Scope

Medium
Category
MCP Least Privilege
Confidence
91% confidence
Finding

The skill declares no explicit tool scope despite clearly requiring file access and multiple outbound network calls. This weakens user and platform oversight because consumers of the skill are not given an accurate permissions boundary, increasing the chance that the skill is run with broader capabilities than expected.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

This skill sends paper titles and related query data to Semantic Scholar, which is an external third party. Even if the data is not highly sensitive in most cases, bibliographic inputs can still reveal research interests, unpublished work, or user-specific document contents when transmitted externally.

Content

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

md
## API Sources (No keys required)

1. **arXiv API**: `http://export.arxiv.org/api/query?search_query=...`
2. **Semantic Scholar**: `https://api.semanticscholar.org/graph/v1/paper/search?query=...`
3. **CrossRef**: `https://api.crossref.org/works?query.title=...`
4. **OpenAlex**: `https://api.openalex.org/works?search=...`

External Transmission

Medium
Category
Data Exfiltration
Confidence
83% confidence
Finding

This skill transmits bibliographic search terms to CrossRef, an external service, which creates a data exposure channel outside the local environment. In research or enterprise contexts, even paper-title queries may disclose confidential topics, draft citations, or project direction.

Content

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

md
1. **arXiv API**: `http://export.arxiv.org/api/query?search_query=...`
2. **Semantic Scholar**: `https://api.semanticscholar.org/graph/v1/paper/search?query=...`
3. **CrossRef**: `https://api.crossref.org/works?query.title=...`
4. **OpenAlex**: `https://api.openalex.org/works?search=...`

## Browser Fallback (IMPORTANT!)

External Transmission

Medium
Category
Data Exfiltration
Confidence
84% confidence
Finding

The skill sends search data to OpenAlex, another third-party endpoint not prominently disclosed in the top-level description. The context makes this more concerning because the skill is processing user-supplied bibliography content, and external transmission of that content may reveal sensitive research themes or unpublished references.

Content

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

md
1. **arXiv API**: `http://export.arxiv.org/api/query?search_query=...`
2. **Semantic Scholar**: `https://api.semanticscholar.org/graph/v1/paper/search?query=...`
3. **CrossRef**: `https://api.crossref.org/works?query.title=...`
4. **OpenAlex**: `https://api.openalex.org/works?search=...`

## Browser Fallback (IMPORTANT!)

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
95% confidence
Finding

The browser fallback tells the operator to use a real Chrome profile with existing login sessions to access third-party sites, including potentially subscription-backed publishers, but does not give a clear up-front warning about the privacy and account risks. This is dangerous because the skill may cause searches and page visits to be performed under the user's identity, exposing query data, institutional access, and session context to external sites.

Content

No source excerpt is available for this finding.

External Transmission

Medium
Category
Data Exfiltration
Confidence
90% confidence
Finding

This request sends user-supplied bibliography metadata to Semantic Scholar over the network. While expected for the feature, it is still an external data transmission path that can disclose sensitive research topics or author associations when run on private or prepublication bibliographies.

Content

Scanner excerpt · scripts/add_abstracts.py (reported line 86)May include surrounding context.

python
search_title = re.sub(r'[^\w\s]', ' ', title).strip()
        # Use first 100 chars of title
        search_title = search_title[:100]
        url = f'https://api.semanticscholar.org/graph/v1/paper/search?query={urllib.parse.quote(search_title)}&fields=title,abstract&limit=5'
        
        req = urllib.request.Request(url, headers={
            'User-Agent': 'AbstractSearcher/1.0',

External Transmission

Medium
Category
Data Exfiltration
Confidence
93% confidence
Finding

The CrossRef lookup sends the paper title and, when present, the first author name to an external service. Author names can increase identifiability and sensitivity of the query, making this a meaningful privacy exposure for confidential bibliographies.

Content

Scanner excerpt · scripts/add_abstracts.py (reported line 129)May include surrounding context.

python
first_author = author.split(' and ')[0].split(',')[0].strip()
            query_parts.append(f'query.author={urllib.parse.quote(first_author)}')
        
        url = f'https://api.crossref.org/works?{"&".join(query_parts)}&rows=5'
        
        req = urllib.request.Request(url, headers={
            'User-Agent': 'AbstractSearcher/1.0 (mailto:contact@example.com)'

External Transmission

Medium
Category
Data Exfiltration
Confidence
95% confidence
Finding

The OpenAlex request transmits bibliography titles to a third-party API, and this provider is not declared in the skill metadata. The undisclosed outbound transfer increases privacy risk because users may not realize their local bibliography contents are being shared beyond the named services.

Content

Scanner excerpt · scripts/add_abstracts.py (reported line 160)May include surrounding context.

python
"""Search OpenAlex for abstract (open alternative to Semantic Scholar)"""
    try:
        search_title = re.sub(r'[^\w\s]', ' ', title).strip()[:150]
        url = f'https://api.openalex.org/works?search={urllib.parse.quote(search_title)}&per_page=5'
        
        req = urllib.request.Request(url, headers={
            'User-Agent': 'AbstractSearcher/1.0',

Description-Behavior Mismatch

Medium
Category
Not specified by scanner
Confidence
97% confidence
Finding

The stated skill purpose says it searches academic databases 'with browser fallback,' implying a non-API fallback path when database queries fail. The orchestrator only tries API calls to arXiv, OpenAlex, CrossRef, and Semantic Scholar, then returns None, so the advertised browser fallback behavior is absent.

Content

No source excerpt is available for this finding.

Missing User Warnings

Medium
Category
Not specified by scanner
Confidence
96% confidence
Finding

The script automatically transmits BibTeX-derived metadata such as paper titles and possibly author names to multiple external APIs without explicit user warning or consent. In many research or enterprise environments, bibliographies can reveal confidential projects, reading interests, collaboration networks, or unpublished work, so silent exfiltration to third parties creates a real privacy and data-governance risk.

Content

No source excerpt is available for this finding.

Description-Behavior Mismatch

Low
Category
Not specified by scanner
Confidence
94% confidence
Finding

The manifest limits the academic database sources to arXiv, Semantic Scholar, and CrossRef, with browser fallback. The implementation adds a fourth external source, OpenAlex, which is a real behavior expansion beyond the described scope rather than an obvious implementation detail of those named sources.

Content

No source excerpt is available for this finding.

Static analysis

No suspicious patterns detected.