Tools
Cordyceps
Cordyceps - The parasitic fungus that finds what's taking over your WordPress. Automated plugin vulnerability scanner powered by Mycelium + Patchstack Academy. OpenClaw skill.
README
<p align="center">
<img src="https://img.shields.io/badge/version-1.0.0-brightgreen?style=for-the-badge" alt="Version"/>
<img src="https://img.shields.io/badge/platform-linux%20%7C%20windows%20%7C%20macos-blue?style=for-the-badge" alt="Platform"/>
<img src="https://img.shields.io/badge/license-MIT-orange?style=for-the-badge" alt="License"/>
<img src="https://img.shields.io/badge/openclaw-skill-purple?style=for-the-badge" alt="OpenClaw Skill"/>
</p>
<h1 align="center">
```
โโโโโโโ โโโโโโโ โโโโโโโ โโโโโโโ โโโ โโโ โโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโ
โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโโ
โโโ โโโ โโโโโโโโโโโโโโ โโโ โโโโโโโ โโโ โโโโโโ โโโโโโโโโโโโโโโโ
โโโ โโโ โโโโโโโโโโโโโโ โโโ โโโโโ โโโ โโโโโโ โโโโโโโ โโโโโโโโ
โโโโโโโโโโโโโโโโโโโโ โโโโโโโโโโโ โโโ โโโโโโโโโโโโโโโโโโโ โโโโโโโโ
โโโโโโโ โโโโโโโ โโโ โโโโโโโโโโ โโโ โโโโโโโโโโโโโโโโโโ โโโโโโโโ
```
</h1>
<h3 align="center">
<em>The parasitic fungus that finds what's taking over your WordPress</em>
</h3>
<p align="center">
<strong>Automated WordPress Plugin Vulnerability Scanner</strong><br/>
Powered by <a href="https://github.com/zhugez/Mycelium">Mycelium</a> + <a href="https://patchstack.com/academy/wordpress/vulnerabilities/">Patchstack Academy</a>
</p>
---
## What is Cordyceps?
**Cordyceps** is an [OpenClaw](https://docs.openclaw.ai) skill that automates the process of:
1. **Harvesting** popular WordPress plugins (10k+ active installs) using the [Mycelium](https://github.com/zhugez/Mycelium) bulk downloader
2. **Scanning** their PHP source code for 17 categories of security vulnerabilities
3. **Reporting** findings with severity ratings, CVSS estimates, and remediation advice
Named after the parasitic fungus from *The Last of Us* -- just as Cordyceps finds and takes over its host, this tool finds the vulnerabilities taking over WordPress plugins.
---
## Vulnerability Coverage
Cordyceps detects **17 vulnerability categories** based on the [Patchstack Academy](https://patchstack.com/academy/wordpress/vulnerabilities/) knowledge base:
| # | Category | Severity | Detection Method |
|:-:|----------|:--------:|-----------------|
| 1 | **SQL Injection** | `CRITICAL` | `$wpdb->query()` with unsanitized input, `wp_unslash()` + SQL, `%1s` bypass |
| 2 | **Cross-Site Scripting (XSS)** | `HIGH` | 6 sub-types: Shortcode, Gutenberg, Elementor, Reflected, Query Arg, Admin Notice |
| 3 | **CSRF** | `MEDIUM` | State-changing hooks without `wp_verify_nonce()` |
| 4 | **Arbitrary File Upload** | `CRITICAL` | `move_uploaded_file()`, `test_type => false`, ZIP extraction, MIME bypass |
| 5 | **Broken Access Control** | `HIGH` | `__return_true` permission, `wp_ajax_nopriv_`, nonce leakage |
| 6 | **PHP Object Injection** | `CRITICAL` | `unserialize()` / `maybe_unserialize()` with user input |
| 7 | **Local File Inclusion** | `CRITICAL` | `include`/`require` with user-controlled paths |
| 8 | **Remote Code Execution** | `CRITICAL` | `eval()`, `system()`, `call_user_func()`, dynamic calls |
| 9 | **SSRF** | `HIGH` | `wp_remote_get()` with user-controlled URLs |
| 10 | **Privilege Escalation** | `CRITICAL` | `update_option()` key control, `wp_set_auth_cookie()`, role manipulation |
| 11 | **Sensitive Data Exposure** | `MEDIUM` | Unprotected `get_post()`, predictable log files |
| 12 | **Open Redirect** | `MEDIUM` | `wp_redirect()` without `wp_safe_redirect()` |
| 13 | **Arbitrary File Read** | `HIGH` | `file_get_contents()` / `readfile()` with traversal |
| 14 | **Arbitrary File Deletion** | `HIGH` | `unlink()` / `wp_delete_file()` with user paths |
| 15 | **Content Injection** | `MEDIUM` | `do_shortcode()` with user input, unauthorized `wp_update_post()` |
| 16 | **Race Condition** | `MEDIUM` | TOCTOU gaps in financial/limit operations |
| 17 | **Type Juggling** | `MEDIUM` | `==` instead of `===` for security comparisons |
---
## Architecture
```
+------------------+
| WordPress.org |
| Plugin API |
+--------+---------+
|
+--------v---------+
| MYCELIUM | Rust-powered bulk downloader
| (Harvester) | Filters by active installs
+--------+---------+
|
+--------v---------+
| wp_extracted/ | Extracted plugin source code
| +-- plugin-a/ |
| +-- plugin-b/ |
| +-- plugin-c/ |
+--------+---------+
|
+--------------+--------------+
| |
+--------v---------+ +--------v---------+
| scanner.py | | scan.sh |
| (Python Engine) | | (Bash/ripgrep) |
| Context-aware | | Fast pattern |
| CVSS scoring | | matching |
| Auth detection | | |
+--------+---------+ +--------+---------+
| |
+--------------+--------------+
|
+--------------v--------------+
| VULNERABILITY REPORT |
| +-- vuln_report.md |
| +-- vuln_report.json |
| +-- vuln_report.csv |
+-----------------------------+
```
---
## Quick Start
### Installation
#### As OpenClaw Skill (Recommended)
```bash
# Clone to OpenClaw skills directory
git clone https://github.com/zhugez/cordyceps.git ~/.openclaw/skills/cordyceps
# Setup Mycelium binary
# Linux:
chmod +x ~/.openclaw/skills/cordyceps/mycelium-linux-amd64
sudo cp ~/.openclaw/skills/cordyceps/mycelium-linux-amd64 /usr/local/bin/mycelium
# Windows (PowerShell):
copy $env:USERPROFILE\.openclaw\skills\cordyceps\mycelium-windows-amd64.exe $env:USERPROFILE\mycelium.exe
```
#### Standalone Usage
```bash
git clone https://github.com/zhugez/cordyceps.git
cd cordyceps
chmod +x mycelium-linux-amd64 # or use mycelium-windows-amd64.exe
```
---
### Usage
#### Full Pipeline (Harvest + Scan)
```bash
# Download plugins with 10k+ active installs, then scan
python scanner.py all --min-active 10000 --pages 5 -f md json csv
```
#### Step by Step
```bash
# Step 1: Preview targets
mycelium --min-active 10000 --pages 3 --list-only
# Step 2: Harvest & extract plugins
mycelium --min-active 10000 --pages 10 --extract --workers 10
# Step 3: Scan with Python engine (detailed analysis)
python scanner.py scan -d wp_extracted -r cordyceps_report -f md json csv
# Step 3 (alt): Quick scan with Bash script
bash scan.sh scan
```
#### Quick Bash Scan
```bash
# Full pipeline via bash
bash scan.sh all
# Environment variable overrides
MIN_ACTIVE=50000 PAGES=20 bash scan.sh all
```
---
## Output Formats
| Format | File | Best For |
|--------|------|----------|
| **Markdown** | `vuln_report.md` | Human-readable reports, presentations |
| **JSON** | `vuln_report.json` | Programmatic processing, CI/CD integration |
| **CSV** | `vuln_report.csv` | Spreadsheet analysis, data science |
### Sample Report Output
```
============================================================
SCAN SUMMARY
============================================================
SQL Injection: 152
Cross-Site Scripting: 134
Local File Inclusion: 30
Type Juggling: 17
Broken Access Control: 10
Arbitrary File Upload: 9
Shortcode XSS: 4
SSRF: 1
TOTAL: 357 potential vulnerabilities
============================================================
```
---
## File Structure
```
cordyceps/
|
|-- SKILL.md # OpenClaw skill definition (17 vuln types)
|-- scanner.py # Python scanner engine (context-aware)
|-- scan.sh # Bash scanner (fast ripgrep-based)
|-- mycelium-linux-amd64 # Mycelium binary (Linux x86_64)
|-- mycelium-windows-amd64.exe # Mycelium binary (Windows x86_64)
+-- README.md # This file
```
---
## Mycelium CLI Reference
| Flag | Default | Description |
|------|---------|-------------|
| `-m, --min-active <N>` | `10000` | Minimum active installs filter |
| `-p, --pages <N>` | `50` | API pages to fetch |
| `--per-page <N>` | `100` | Plugins per page |
| `-o, --output-dir <DIR>` | `wp_zips` | Download directory |
| `-w, --workers <N>` | `5` | Parallel download workers |
| `-c, --csv-path <PATH>` | `plugins.csv` | Plugin list CSV output |
| `--list-only` | `false` | Preview only, skip downloads |
| `-e, --extract` | `false` | Auto-extract ZIPs after download |
| `--extract-dir <DIR>` | `wp_extracted` | Extraction directory |
---
## Python Scanner Options
```bash
# Download subcommand
python scanner.py download [-m MIN] [-p PAGES] [--per-page N] [-w WORKERS] \
[-o DIR] [-e DIR] [-c CSV] [--list-only]
# Scan subcommand
python scanner.py scan [-d EXTRACT_DIR] [-r REPORT_NAME] [-f {md,json,csv} ...]
# All-in-one
python scanner.py all [all download + scan options combined]
```
---
## Knowledge Base Sources
| Source | Coverage | URL |
|--------|----------|-----|
| **Patchstack Academy** | 17 vulnerability types with WordPress-specific patterns | [patchstack.com/academy](https://patchstack.com/academy/wordpress/vulnerabilities/) |
| **Mycelium** | WordPress.org plugin API bulk downloader | [github.com/zhugez/Mycelium](https://github.com/zhugez/Mycelium) |
| **OpenClaw** | AI agent skill framework | [docs.openclaw.ai](https://docs.openclaw.ai/tools/skills) |
---
## False Positive Awareness
Not all findings are true vulnerabilities. Key context to consider:
| What Looks Dangerous | Why It Might Be Safe |
|---------------------|---------
... (truncated)
tools
Comments
Sign in to leave a comment