Skip to main content

Ferruccio - WordPress Plugin Analysis Tool

Ferruccio is a static analysis tool designed to scan WordPress plugins (directories or zip files) and generate security reports for developers and security auditors. It prioritizes high-confidence detections while offering a "suspicious" mode for deeper manual review.

Features

  • Smarter PHP Analysis:
    • Tracks function scopes to accurately verify AJAX handlers (nonce/capability checks).
    • Detects SQL injection (unprepared $wpdb calls).
    • Detects XSS (unscaped echo/print).
    • Detects insecure file uploads and object injection (unserialize).
  • JavaScript Analysis:
    • Detects DOM XSS (innerHTML, document.write).
    • Flags dangerous functions (eval, setTimeout with strings).
    • Checks for hardcoded secrets.
  • Attack Surface Mapping: Lists actions, filters, REST routes, and shortcodes.
  • Multiple Formats: Outputs reports in Text, Markdown, or JSON.
  • Extensible: Supports custom config files and offline vulnerability databases.

Installation

Requires Python 3.8+.

pip install ferruccio

Usage

CLI

# Check version
ferruccio --version

# Scan a single plugin (zip or directory)
ferruccio scan plugin.zip --wp-version 6.7 --php-version 8.2 --format text

# Scan all plugins in a directory (parallel execution)
ferruccio scan --all ./wp-content/plugins --threads 6 --format markdown > report.md

# Include low-confidence hints
ferruccio scan plugin.zip --include-suspicious --format json

# Use a config file and vulnerability DB
ferruccio scan plugin.zip --config .ferruccio.yml --vuln-db advisories.json

Library

from pathlib import Path
from ferruccio import scan_path, Scanner

# Simple scan
report = scan_path("plugin.zip", strict=True)
print(report.metadata.name, len(report.findings))

# Advanced usage
scanner = Scanner(strict=False, include_suspicious=True)
project = scanner.scan_plugins_dir(Path("./wp-content/plugins"))
print(project.summary)

Configuration

You can customize the scanner using a .ferruccio.yml file:

strict: true
include_suspicious: false
ignore_paths:
  - "tests/*"
  - "vendor/*"
deny_sinks:
  "system": "Command injection risk"

License

MIT License. See LICENSE for details.

Release files for ferruccio 114.514.1919

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for ferruccio 114.514.1919
File Size Uploaded
ferruccio-114.514.1919.tar.gz 19.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for ferruccio 114.514.1919
File Interpreter ABI Platform
ferruccio-114.514.1919-py3-none-any.whl Python 3 none any Details

Total release size: 41.8 kB

Release files / ferruccio-114.514.1919.tar.gz

Download URL ferruccio-114.514.1919.tar.gz
Size 19.8 kB
Tags Source
SHA-256 checksum
How to use checksums
1433a71a8af69ed928af5fd24c2b3451fc09c3c42df908f9069febce320cc81e
BLAKE2b-256 checksum
How to use checksums
acf171882be6a089cf90f66d42b36fcfcf61847414883b0aa7fe99e8914aeb7b
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release files / ferruccio-114.514.1919-py3-none-any.whl

Download URL ferruccio-114.514.1919-py3-none-any.whl
Size 22.0 kB
Tags Python 3
SHA-256 checksum
How to use checksums
0e8d9e03f8a008bd26680e91051438ccf718d88fc64ae8ad1c2b128412157049
BLAKE2b-256 checksum
How to use checksums
c450a12985a23e4415df9172fd3cab8ba2c21a14ceb927fbf1be2d724a9c42fc
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.12.3

Release history Release notifications | RSS feed

This release

114.514.1919 This release

2 release files

0.2.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page