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 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.

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-114.514.1919.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-114.514.1919-py3-none-any.whl (22.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: ferruccio-114.514.1919.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-114.514.1919.tar.gz
Algorithm Hash digest
SHA256 1433a71a8af69ed928af5fd24c2b3451fc09c3c42df908f9069febce320cc81e
MD5 9aa395f1b9cd159c524b11bc0491eac2
BLAKE2b-256 acf171882be6a089cf90f66d42b36fcfcf61847414883b0aa7fe99e8914aeb7b

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for ferruccio-114.514.1919-py3-none-any.whl
Algorithm Hash digest
SHA256 0e8d9e03f8a008bd26680e91051438ccf718d88fc64ae8ad1c2b128412157049
MD5 b9cd15b54d029b12a6f01658ecab0e66
BLAKE2b-256 c450a12985a23e4415df9172fd3cab8ba2c21a14ceb927fbf1be2d724a9c42fc

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