T03 · Remote Payload Retrieval and Execution
- Location
references/compilation-guide.md:30- Finding
Unverified Remote Installer Is Piped Directly into a Shell
- Content
View full analysis
- Remediation
View remediation
Security audit
Security checks for vulnerabilities and agentic risk
This looks like a legitimate academic report-writing skill, but it needs review because it recommends an unsafe remote installer and can automatically run broad repo-reading, file-writing, background-agent, and external citation-checking workflows.
Install only after reviewing the workflow. Run it on a copy of your research repo or a dedicated output directory, require confirmation before launching background agents or compiling, avoid the curl-to-shell installer, pin dependencies in a virtual environment, and disable or avoid citation API checks for confidential or unpublished bibliography data.
references/compilation-guide.md:30Unverified Remote Installer Is Piped Directly into a Shell
README.md:39Python Dependency Installation Is Unpinned and Not Integrity-Verified
The description and code do not align in primary purpose. The declared skill is about producing large academic reports with a multi-wave authoring pipeline and parallel subagents. This code does none of that: it only analyzes .bib files, queries external scholarly databases, scores match confidence, flags red flags, and emits reports/exit codes. Citation checking could plausibly support an academic-writing workflow, but here it is the entire implemented behavior, not a minor supporting detail within the declared 3-wave thesis-writing system. The code also accesses undeclared external network resources (CrossRef, Semantic Scholar, OpenAlex) and lacks the key advertised capabilities of writing chapters, extracting repo data, parallelization, and LaTeX compilation/auditing. Therefore this is a clear description-behavior mismatch.
The description presents a broad end-to-end thesis/dissertation writing pipeline with multiple waves and parallel subagents. The actual code chunk implements only one narrow support component: cross-reference auditing for LaTeX projects. While that aligns with part of the declared Wave 2 auditing claim, it does not perform the skill’s primary declared function of producing 40–100+ page academic reports, extracting repo data, coordinating parallel chapter-writing agents, or compiling LaTeX. The code also advertises a '--fix-prefix' usage mode in the docstring but does not implement it, further indicating the implementation is narrower than described. Therefore the declared description materially overstates the actual behavior of this code chunk.
This code chunk does not implement the declared primary purpose. Rather than orchestrating multi-wave academic report generation, it tests a citation-checking subsystem that evaluates whether bibliography entries are real, suspicious, or fabricated. The behavior centers on metadata validation (DOI, year, authors, title similarity) and external verification calls, which is materially different from writing thesis chapters or compiling LaTeX. While citation checking could be a supporting feature in an academic-writing tool, this specific chunk is narrowly focused on validating references and lacks the core declared capabilities, so the description does not accurately represent the code shown.
Fetching and executing an external script in one step creates a supply-chain risk: if the hosting domain, TLS endpoint, or delivered content is compromised, arbitrary commands will run locally with the user's privileges. Because this is framed as a recommended Linux installation path, the skill materially increases the chance that users will execute unreviewed code.
# Option A: pre-built binary
curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | sh
# Option B: from source via cargo
cargo install tectonic
The | sh construct is the dangerous part of the command because it turns remote content into immediate shell input, bypassing normal review and increasing the blast radius of any compromise. In a how-to reference, this chaining pattern is particularly unsafe because it normalizes a hazardous operational practice rather than a one-off debugging step.
# Option A: pre-built binary
curl --proto '=https' --tlsv1.2 -fsSL https://drop-sh.fullyjustified.net | sh
# Option B: from source via cargo
cargo install tectonic
Skill establishes unauthorized persistence across sessions via cron jobs, startup scripts, or state files. Session persistence allows an attacker to maintain access beyond the current interaction.
## What it does
Point it at your research repo. It launches parallel agents to extract data, write chapters simultaneously, compile LaTeX, and audit cross-references:
The README advertises extracting data from a research repo, writing chapters, and compiling output, but does not clearly warn that these steps may create or modify files in the user's working tree. Users may invoke it expecting advisory help and instead cause substantial generated content or build artifacts to be written to their repository.
The README says the skill can be invoked either with an explicit command or by broadly describing report needs, which creates an overly permissive trigger surface. In an agent environment, that can cause the skill to activate during ordinary academic-assistance requests and perform multi-step actions the user did not clearly authorize.
The example phrase 'Write my FYP report based on this repo' is close to normal user speech and may match many benign requests for help drafting a report. Because the skill performs broad automated actions, this increases the risk of accidental invocation and unintended file modifications or costly agent execution.
The skill describes actions that inherently require reading repository files and making network requests for citation verification, but it declares no explicit tool scope or permissions boundaries. In an agent environment, that omission can cause overbroad access, unclear operator expectations, and accidental exposure of local research data or outbound requests to third-party services.
The document states that every citation must be verified against at least two independent sources, but the implementation later accepts a single source if a DOI exists. This mismatch can cause users to overtrust the tool and include insufficiently verified references, undermining academic integrity and making fabricated or incorrect citations more likely to slip through.
The workflow claims verification confirms title, authors, year, and venue across sources, but the code only uses title similarity to select matches and does not actually compare most metadata fields between sources. This can falsely mark the wrong paper as verified when titles are similar, especially for preprints, revised versions, or works with common names.
Subtle instructions detected that may alter agent decision-making or introduce hidden biases.
Accept: application/x-bibtex
This returns publisher-authoritative BibTeX — always prefer this over hand-crafted entries.
### Step 4: Validate Claims
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
class CitationManager:
"""Search, verify, and retrieve academic citations from multiple APIs."""
SEMANTIC_SCHOLAR_BASE = "https://api.semanticscholar.org/graph/v1"
CROSSREF_BASE = "https://api.crossref.org/works"
ARXIV_BASE = "http://export.arxiv.org/api/query"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
class CitationManager:
"""Search, verify, and retrieve academic citations from multiple APIs."""
SEMANTIC_SCHOLAR_BASE = "https://api.semanticscholar.org/graph/v1"
CROSSREF_BASE = "https://api.crossref.org/works"
ARXIV_BASE = "http://export.arxiv.org/api/query"
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"""Search, verify, and retrieve academic citations from multiple APIs."""
SEMANTIC_SCHOLAR_BASE = "https://api.semanticscholar.org/graph/v1"
CROSSREF_BASE = "https://api.crossref.org/works"
ARXIV_BASE = "http://export.arxiv.org/api/query"
def __init__(self, email: Optional[str] = None, s2_api_key: Optional[str] = None):
Data is being sent to an external URL. This could be legitimate telemetry or data exfiltration. Manual review is recommended.
"""Search, verify, and retrieve academic citations from multiple APIs."""
SEMANTIC_SCHOLAR_BASE = "https://api.semanticscholar.org/graph/v1"
CROSSREF_BASE = "https://api.crossref.org/works"
ARXIV_BASE = "http://export.arxiv.org/api/query"
def __init__(self, email: Optional[str] = None, s2_api_key: Optional[str] = None):
The guide instructs users to pipe a remotely fetched script directly into the shell, which removes any opportunity to inspect the script before execution and gives the remote server immediate code execution on the user's machine. In a documentation file for a build/report-writing skill, users are likely to copy-paste commands verbatim, making this especially risky even if the upstream project is legitimate.
This code transmits user-supplied citation data, including DOI values, to the external CrossRef API. In an academic-report skill, bibliography entries can contain unpublished paper titles, internal references, or sensitive research metadata, so sending them off-host creates a real confidentiality and data-governance risk even though the network use is part of the tool's intended function.
try:
# If DOI is provided, verify directly
if entry.doi:
url = f"https://api.crossref.org/works/{entry.doi}"
resp = requests.get(url, headers=HEADERS, timeout=10)
if resp.status_code == 200:
data = resp.json()["message"]
This request sends citation titles derived from local .bib files to CrossRef search endpoints. Because titles themselves may reveal embargoed research topics, thesis contents, or proprietary project names, the external transmission is a legitimate security/privacy issue in this skill context, which recursively processes report directories and could expose many entries at once.
for search_title in search_titles:
query = urllib.parse.quote(search_title)
url = f"https://api.crossref.org/works?query.title={query}&rows=5"
resp = requests.get(url, headers=HEADERS, timeout=15)
if resp.status_code == 200:
items = resp.json().get("message", {}).get("items", [])
This code sends full citation titles to Semantic Scholar over the network for search. The behavior is expected for citation verification, but it still exposes potentially sensitive academic metadata to a third party and expands the disclosure surface beyond a single provider.
) -> Optional[dict]:
"""Search Semantic Scholar. Covers 200M+ papers with author disambiguation."""
query = urllib.parse.quote(entry.title)
url = f"https://api.semanticscholar.org/graph/v1/paper/search?query={query}&limit=3&fields=title,authors,year,externalIds"
for attempt in range(2):
try:
This OpenAlex lookup transmits citation titles externally, contributing to cumulative metadata leakage across multiple public services. In the context of a thesis/dissertation automation skill, the tool may process large research repositories, increasing the volume and sensitivity of information disclosed.
for search_title in search_titles:
try:
query = urllib.parse.quote(search_title)
url = f"https://api.openalex.org/works?filter=title.search:{query}&per_page=5"
resp = requests.get(
url,
headers={**HEADERS, "Accept": "application/json"},
The integration tests call external citation-verification APIs and transmit bibliographic metadata from local test inputs to third-party services, but the script does not present a clear privacy/consent warning before doing so. In an academic-report skill, repository contents may include unpublished or sensitive references, so automatic outbound transmission can leak research topics, drafts, or confidential citation data during routine test execution.
No suspicious patterns detected.