Skip to main content

A static analysis tool for WordPress plugins

Project description

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 .

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.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

ferruccio-11.4.514.tar.gz (19.8 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

ferruccio-11.4.514-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

Details for the file ferruccio-11.4.514.tar.gz.

File metadata

  • Download URL: ferruccio-11.4.514.tar.gz
  • Upload date:
  • Size: 19.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for ferruccio-11.4.514.tar.gz
Algorithm Hash digest
SHA256 b924f070fb171b9291276fac9ce4a049d86f9e1b30e3109cec1ea634cc45af2d
MD5 e10fe14bc0e5fd0d5fbe9d1696eb7959
BLAKE2b-256 59946adb22afdc8a1381d2ed73f671234cb4bc530655c2bdab8741d1552ce236

See more details on using hashes here.

File details

Details for the file ferruccio-11.4.514-py3-none-any.whl.

File metadata

  • Download URL: ferruccio-11.4.514-py3-none-any.whl
  • Upload date:
  • Size: 21.9 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.12.3

File hashes

Hashes for ferruccio-11.4.514-py3-none-any.whl
Algorithm Hash digest
SHA256 a520672ce8ab412100a57a93449573871977b7b1be422336da59858a881ea315
MD5 bf32fa75416403529f9ebc3cbfdbb38e
BLAKE2b-256 ba92acefefd9d3bc41e3d886d0dbf9bea278eb6be7e0722dbf2b62e631197797

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page