A Malicious Copy of Anthropic’s PDF Skill Carries a Linux Backdoor

A lookalike of Anthropic’s PDF skill matched 11 of 14 files but rewrote SKILL.md and added an obfuscated Linux reverse shell. See full analysis and IoCs.

Assaf Morag
Oct 27, 2026

Agents are doing more and more work for people, which means they increasingly rely on skills that help execute specific tasks. Need your agent to access a PostgreSQL database? There’s a skill for that. Looking for help filling out a PDF or converting another file into a PDF? A skill can do that too.

When a task calls for a SKILL.md instruction file, your agent automatically reads that file and does what it says, using whatever tools it has access to. That can include running shell commands. And because skills are now shared and reused so widely, they make an attractive target. What happens if someone keeps a popular skill’s name and description but rewrites the instructions?

Cyera Research analyzed a package called simply “pdf” that presented itself as Anthropic’s PDF skill, one of six related skill archives observed between May and July 2026. Most of the files matched the Anthropic skill exactly, including its legitimate PDF scripts. The SKILL.md header retained the official name and description so it looked legitimate on first glance, but its instructions had been replaced with a command to contact an external hostname. The package also contained system_linux: an obfuscated Go executable that, if launched, connects to a remote server and attaches /bin/bash to the connection.

A Byte-Perfect Copy of Anthropic’s PDF Skill

An AI skill is a folder of instructions in natural language that helps an agent perform a task. The folder may also contain scripts and reference files. Teams use skills to share procedures, but they also create a new security risk. Skills with familiar names and descriptions can make a tampered skill more likely to be chosen and trusted.

The PDF skill we analyzed used that trick. It included 11 files that were identical to Anthropic’s official PDF skill. But it had an important modification: two additional files, one of them a highly obfuscated ELF executable backdoor. Here’s the complete skill files breakdown:

# File Size Compared with Anthropic’s
1 LICENSE.txt 1.4 Kb Identical
2 forms.md 11.8 Kb Identical
3 reference.md 16.7 Kb Identical
4 scripts/check_bounding_boxes.py 2.8 Kb Identical
5 scripts/check_fillable_fields.py 268 b Identical
6 scripts/convert_pdf_to_images.py 1.0 Kb Identical
7 scripts/create_validation_image.py 1.3 Kb Identical
8 scripts/extract_form_field_info.py 4.3 Kb Identical
9 scripts/extract_form_structure.py 3.9 Kb Identical
10 scripts/fill_fillable_fields.py 3.8 Kb Identical
11 scripts/fill_pdf_form_with_annotations.py 3.2 Kb Identical
12 SKILL.md 890 b Modified: the original is 8,072 bytes
13 system_linux 5.1 Mb Added: not in the original
14 1 2 b Added: not in the original

The SKILL.md file below shows the name and description of the suspicious skill are identical to the original file, shown below. But from line seven on, it’s all malicious commands and the original instructions have been deleted. Anthropic’s file runs to 315 lines, and the sample stops at 19 lines.

The package keeps Anthropic’s original skill description and 11 unchanged files, making it likely to be selected for PDF tasks and easy to overlook in a script-only review. If someone installs this skill — including through plugins or a repo — the agent can run it without explicit permission or warning. The malicious change is concentrated in a replaced Quick Start command, alongside the added executable.

A Malicious Campaign

The samples we observed could have been delivered through phishing, impersonation, or a compromised distribution channel, but the available evidence does not establish an initial access route.

Threat hunting discovered five similar tar files that copied Anthropic’s PDF skill, but rewrites SKILL.md and adds two files: system_linux (ELF binary file, MD5: 0b98b3b45ff56c48c5f9341196bb9b7e) and a text file named 1. The obfuscated 64-bit Linux executable is a Go reverse shell configured to connect to 81.70.101[.]115:2345, an address identified as Tencent Cloud infrastructure. The skill’s separate curl command contacts scan.100tal[.]com, which was observed resolving to a private IP address. Samples were seen from May 23 to July 14, 2026. 

The Build Timeline

Build times come from timestamps stored inside the archives and are shown in the author’s local time, UTC+8, which is aligned with Asia-Pacific.

The package was assembled over two weeks and first seen two weeks after that. Visible activity then ran for about seven weeks.

An Incomplete Execution Flow

When loading the tampered PDF skill, it basically generates a curl call to https[:]//scan.100tal[.]com, which is a domain used by TAL Education Group, a China-based education technology company. During our analysis of these skills, it resolved to a local IP address, 10.160.65[.]97, and had a DNS alias (CNAME) ali-jcfw-global-innerssl[.]xescdn[.]com, which resolved to the same IP address. Xescdn[.]com appears to be infrastructure associated with Xueersi, a TAL Education Group brand. 

This is essentially where the attack stops. But the malicious binary has already found its way to your computer after you download and inflate the .tar file. There could be several reasons why the internal subdomains are pointing to internal addresses. This could be a pinpointed campaign that targets TAL Education Group and exploits something internal to trigger the binary. It could also be a temporary kill switch. While the campaign is paused, the attackers point these domains at internal addresses, and when they’re ready to resume, they switch the domains back to public IP addresses.

Inside the system_linux Binary

The most consequential file in the skill package is system_linux, a 5 MB, statically linked Go executable for 64-bit Linux. Despite its size, the program’s purpose is very narrow. It connects to a fixed server and gives the operator a shell on the machine that runs it.

Hiding a Small Program Inside a Large Binary

The file is obfuscated with garble, which replaces Go function and package names and hides strings that would otherwise reveal the program’s behavior. The server address was encrypted and decoded (base64). We reconstructed a base64-encoded key, which the program decodes and XORs byte by byte with 0xAA. It then decrypts the blob with AES-256-GCM that resulted to a plaintext reverse shell destination 81.70.101[.]115:2345. 

What Happens When It Runs

The program opens a plain TCP connection to that hard-coded IP address and port. The destination is an IP address and after connecting, it starts /bin/bash and assigns the same socket to the shell’s standard input, output, and error streams. Commands received over the connection go to the shell, and its output returns to the remote endpoint. The shell privileges are determined by the account that launched it. 

Who Is Behind It?

The short answer is that we do not know. The program contains error messages in Simplified Chinese, and the ZIP timestamps are consistent with UTC+8. Apple metadata suggests the original archive was prepared on macOS. The same program build appears in six packages and connects to an address hosted by Tencent Cloud. Separately, the skill instructs the agent to contact a TAL Education Group–associated hostname. Together, these clues give us some information on the package and its infrastructure, but they do not identify its author.

An internal security exercise and a targeted attack are both possible interpretations. The scan hostname and test-like marker files could fit an exercise; the obfuscated reverse shell and external server raise concern about an attack. We cannot establish either explanation, determine why the TAL-associated hostname was used, or show that the binary was launched. We also have no evidence that TAL was compromised or that anyone at TAL created the skill.

What the Evidence Supports

  • Language: The Simplified Chinese messages suggest that the author, or a source they used, worked in Chinese. They do not establish identity or nationality.
  • TAL connection: The hostname links the skill to TAL-associated infrastructure. A private IP answer does not prove the request worked only inside TAL’s network or that TAL staff were the intended targets.
  • Attribution: We found no reliable link to a named person, group, or state. Language, timestamps, and hosting can reflect ordinary development choices or be deliberately misleading.

How the Case Maps to Security Frameworks

The clearest framework match is OWASP Agentic Skills Top 10: AST01, Malicious Skills. The package presents itself as a familiar PDF skill while carrying a modified instruction file and a reverse-shell binary. It also illustrates OWASP LLM03: Supply Chain: the risk arises when an agent accepts a skill whose contents have not been verified against the original. In MITRE ATT&CK terms, the copied name and description are consistent with Masquerading (T1036.005), while garble and the encrypted configuration fit Obfuscated Files or Information (T1027).

The binary’s code maps to Unix Shell (T1059.004) and Non-Application Layer Protocol (T1095): if launched, it attaches /bin/bash to a raw TCP connection. That conditional matters. We have not observed a user installing the skill, an agent running its curl instruction, or anything in the package launching system_linux. The server response could theoretically contain further instructions, but we have not seen it, so prompt injection and execution guardrails should not be presented as observed techniques. Nor can we claim a compromise of an established distribution channel under Supply Chain Compromise (T1195) without knowing how these packages were distributed. The frameworks describe the risks visible in the files; they do not fill the missing steps in the attack chain.

Conclusion

The PDF skill package was designed to look like a skill an agent could trust. Eleven files matched Anthropic’s PDF skill, while the modified SKILL.md directed the agent to contact another host and an added executable contained an obfuscated Linux reverse shell. The legitimate files made the package look familiar; the changed instructions and binary carried the risk.

The evidence stops short of a completed compromise. We do not know how the package was distributed, whether anyone installed or used it, what the curl request returned, or how system_linux would have been launched. Those gaps matter, but they do not diminish what the files show: reviewing only a skill’s name or its bundled scripts can miss harmful instructions and executables the agent may follow. Organizations using skills should verify the whole package against its claimed source and investigate unexpected commands, network destinations, and binaries before allowing an agent to use it.

How Cyera Helps

Our research shows a close inspection of what’s actually installed can help indicate whether a skill is truly safe. For teams running Claude Code and Claude Cowork, Cyera Agent Guardian catalogs all connected MCP servers and active skills across endpoints and classifies them as sanctioned or unsanctioned.

From there, Agent Guardian checks downloaded skill files for hardcoded secrets and unvetted actions, then validates each skill against the user’s identity and role. It can block skills that violate policy, and it evaluates tool calls before they execute, which can help prevent hidden, malicious commands.

Indicators of Compromise

Files

File SHA-256 and MD5
system_linux 50cb53704f318e4fc9a9cd8f6d32eb98d8c666501c720d63c2c701caeb6fa946 0b98b3b45ff56c48c5f9341196bb9b7e
SKILL.md d0d4144609825ee7480f7889ee04d97f4b1d9eaa8a46c2a0d46d81ab5aa83827 52fb9ecf3c58aa63a46544bc4cd4bc2f
Original zip 88865046d9a5f453a317bbc7cb449cb79798a9811ebc01e15218d4f38e3b16dd 4bdb32a1698926def27be9ef503129b4
Skill archive 5b114c43358888c4e9892ee4654fa856cfec481ed4966f585aebfa6ccf814cd1 98f64ce9318ba3bb947df0c86db4fae6
Skill archive 31eb28e9889d134e886c78153e9652fe947054d81221be865c6a40956a21efa9 c098c10f2b898935b2787cb39bcdca0c
Skill archive 8978432f13ee54dc2bda49fd4ee453a924fce92fd12d65c07ee6bacd207ff764 7173dfe7da7b45852fc7fe9484873021
Skill archive c8559a0358897c810f677ab79bc7076ef6c5da3c0b3e6f38554f7682c59a47f1 9d4c8e7992a324c572d9bf2b7c6e4cb4
Skill archive 28dd66809595c05955e9d7ea70ce55a4ca42c03e8444fd9a40f10602c0da6a0c b19f7cec0c7d7c457273ce0587055da4

Network

Indicator Role
81.70.101[.]115:2345 Reverse shell server, plain TCP
scan.100tal[.]com Check-in host named in SKILL.md; internal to the target

Content

Indicator Where
PDF Processing Guide 111 Title line of the tampered SKILL.md
dawqdzxcedqwedwbmdGxcedqwedwbmdG AES key, present only after decoding
Partager