
WordPress security scanner with AI-powered analysis, ethical compliance framework, and professional reporting.
Ethical WordPress vulnerability scanner — real-time CVE correlation, OWASP mapping, AI-powered analysis, and consent-based testing.
Quick Start · Documentation · Docker · AI Features · Star on GitHub
Scan overview · severity breakdown |
Findings · CVE/OWASP badges · filter bar |
Argus is a production-ready WordPress security scanner that puts ethics first. Built for penetration testers, security researchers, and WordPress administrators, it combines traditional vulnerability scanning with cutting-edge AI analysis to deliver actionable insights.
--diff last compares scans to track remediation progress# One command, comprehensive analysis
python -m argus --target https://example.com --html
Track remediation progress between scans:
# Compare this scan against the previous one
python -m argus --target https://example.com --html --diff last
# Or reference a specific scan ID
python -m argus --target https://example.com --html --diff 42
The diff section shows:
Choose your AI provider based on your needs:
Analysis Modes:
--ai-agent): Enriched with live NVD CVE data and WPVulnerability.net lookups (free APIs)--ai-compare): Side-by-side analysis from multiple providers in parallel--ai-stream): Real-time token output as the AI generates--ai-budget): Cost cap enforcement with configurable abort thresholdJSON Reports (Machine-Readable)
{
"tool": "argus",
"version": "0.2.0",
"target": "https://example.com",
"summary": {"critical": 3, "high": 5, "medium": 8, "low": 6, "info": 5},
"findings": [
{
"id": "ARGUS-WP-012",
"title": "Vulnerable plugin: elementor v3.5.0 (31 CVEs)",
"severity": "critical",
"owasp": {"id": "A06", "name": "Vulnerable and Outdated Components"},
"latest_version": "3.28.1",
"cve": ["CVE-2022-1329", "CVE-2022-29455"],
"vulnerabilities": [
{"title": "Elementor < 3.4.8 — Authenticated RCE", "cvss": 8.8, "cve_id": "CVE-2022-1329"}
]
}
],
"diff": {"ref_scan_id": 41, "new": [...], "fixed": [...], "persisting": [...]}
}
HTML Reports (Human-Friendly, v0.2.0)
Argus enforces ethical hacking through technology. Aggressive scanning and AI analysis require proof of ownership:
# 1. Generate token
python -m argus --gen-consent example.com
# 2. Place token on your server
echo "verify-abc123..." > .well-known/verify-abc123.txt
# 3. Verify ownership
python -m argus --verify-consent http --domain example.com --token verify-abc123
# 4. Now you can use aggressive mode
python -m argus --target https://example.com --aggressive --use-ai
SQLite database tracks everything:
finding_code indexai_costs table (v0.2.0+)--diff comparisons# Query recent scans
sqlite3 ~/.argos/argos.db "SELECT * FROM v_recent_scans LIMIT 10"
# Find critical issues
sqlite3 ~/.argos/argos.db "SELECT * FROM v_critical_findings"
1. Clone the repository
git clone https://github.com/rodhnin/argus-wp-watcher.git
cd argus-wp-watcher
2. (Optional) Install venv if not already available
# Debian/Ubuntu
sudo apt update && sudo apt install -y python3-venv
# Fedora/RHEL
sudo dnf install python3-virtualenv
# macOS (via Homebrew)
brew install [email protected]
3. Create and activate virtual environment
python3 -m venv .venv
source .venv/bin/activate
# You should see (.venv) in your terminal prompt
4. Upgrade pip
python -m pip install --upgrade pip
5. Install dependencies
python -m pip install -r requirements.txt
6. Configure API keys (if using cloud AI)
# OpenAI
export OPENAI_API_KEY="sk-..."
# Anthropic
export ANTHROPIC_API_KEY="sk-ant-..."
7. Verify installation
python -m argus --version
# Output: Argus v0.2.0
# Basic scan (safe mode, no consent required)
python -m argus --target https://example.com
# With HTML report
python -m argus --target https://example.com --html
# With AI analysis (requires consent token)
python -m argus --target https://example.com --use-ai --html
🎉 Success! Check ~/.argos/reports/ for your reports.
# Safe mode (default) - Non-intrusive checks
python -m argus --target https://example.com
# Generate HTML report
python -m argus --target https://example.com --html
# Increase verbosity for debugging
python -m argus --target https://example.com -vv
# Control scan speed (1-20 req/s)
python -m argus --target https://example.com --rate 10
# Control concurrency (1-20 threads)
python -m argus --target https://example.com --threads 8
# Custom timeout
python -m argus --target https://example.com --timeout 60
# Custom output directory
python -m argus --target https://example.com --report-dir ./my-reports
Step 1: Set your API key
export OPENAI_API_KEY="sk-..."
Step 2: Test your setup
# Verify AI works with default model (gpt-4o-mini-2024-07-18)
python -m argus.core.ai openai
Step 3: Run AI-powered scan
# Both analyses in one scan (~$0.006 with default model)
python -m argus --target https://example.com --use-ai --html
# Technical only (for security teams)
python -m argus --target https://example.com --use-ai --ai-tone technical --html
# Executive only (for management)
python -m argus --target https://example.com --use-ai --ai-tone non_technical --html
# Override model or provider at runtime
python -m argus --target https://example.com --use-ai --ai-model gpt-4o --html
python -m argus --target https://example.com --use-ai --ai-provider anthropic --html
# Stream output in real time
python -m argus --target https://example.com --use-ai --ai-stream
# Agent mode with NVD CVE lookup (free)
python -m argus --target https://example.com --use-ai --ai-agent --html
# Compare two providers side by side
python -m argus --target https://example.com \
--use-ai --ai-compare openai,anthropic --html
# Budget cap ($0.05 max)
python -m argus --target https://example.com --use-ai --ai-budget 0.05
# Step 1: Generate consent token
python -m argus --gen-consent example.com
# Output: Token: verify-a3f9b2c1d8e4...
# Step 2: Place token on your server
# Create: https://example.com/.well-known/verify-a3f9b2c1d8e4.txt
# Content: verify-a3f9b2c1d8e4
# Step 3: Verify consent
python -m argus --verify-consent http \
--domain example.com \
--token verify-a3f9b2c1d8e4
# Step 4: Run aggressive scan
python -m argus --target https://example.com --aggressive
Argus uses LangChain 1.0.0 with support for multiple AI providers, giving you flexibility based on your security, privacy, and budget requirements.
Best for: Production use
export OPENAI_API_KEY="sk-..."
python -m pip install langchain-openai==1.0.0
Best for: Enhanced privacy
export ANTHROPIC_API_KEY="sk-ant-..."
python -m pip install langchain-anthropic==1.0.0
Best for: Complete privacy
# Install Ollama: https://ollama.ai
ollama pull llama3.2
python -m pip install "langchain-ollama>=0.3.0,<0.4.0"
Automatic Sanitization Before sending data to AI providers, Argus automatically removes:
Opt-In Only
--use-ai flagFor Maximum Privacy Use Ollama locally. While slower and less accurate, your scan data never leaves your machine.
Option A — CLI flags (runtime override, no file editing)
# Switch to Anthropic for this scan only
python -m argus --target https://example.com --use-ai --ai-provider anthropic --ai-model claude-3-5-haiku-20241022
# Switch to local Ollama
python -m argus --target https://example.com --use-ai --ai-provider ollama --ai-model llama3.2
Option B — config/defaults.yaml (change the persistent default)
ai:
langchain:
provider: "ollama" # Changed from "openai"
model: "llama3.2" # Ollama model
ollama_base_url: "http://localhost:11434"
Coming in v0.3.0: Interactive configuration menu (Metasploit-style)
# Future feature
argus --show-options
argus --set ai.provider=anthropic
argus --save-profile privacy-mode
⚠️ NEVER scan production sites without written permission!
Use our Docker lab to practice safely:
# Navigate to docker directory
cd docker
# Option 1: Use interactive script
./deploy.sh
# Select option 2 (Testing Lab)
# Option 2: Manual deployment
docker compose -f compose.testing.yml up -d
# Wait for services to start (~60-90 seconds)
docker compose -f compose.testing.yml logs -f wordpress
# Setup WordPress
# Open http://localhost:8080 in your browser
# Complete WordPress installation
# Username: admin
# Password: (choose a strong password)
# Create vulnerable conditions for testing
docker compose -f compose.testing.yml exec wordpress bash -c \
"cp /var/www/html/wp-config.php /var/www/html/wp-config.php.bak"
# Return to project root
cd ..
# Run scan against lab
python -m argus --target http://localhost:8080 --html
# Try AI analysis (requires API key)
python -m argus --target http://localhost:8080 --use-ai --html
cd docker
docker compose -f compose.testing.yml down -v # -v removes all data
For detailed testing scenarios, see docs/TESTING_GUIDE.md
Only scan systems you own or have explicit written permission to test.
Argus implements technical controls to prevent misuse:
Unauthorized access to computer systems is illegal in most jurisdictions:
For complete ethical guidelines, see docs/ETHICS.md
Argus provides three deployment modes via an interactive script:
Use the interactive deployment script:
cd docker
./deploy.sh
Menu options:
1 → Production scanner only2 → Testing lab (WordPress + MariaDB) only3 → Both environments4 → Stop all services5 → Remove all containers and data (reset)Deploy just the Argus scanner for scanning external WordPress sites:
cd docker
./deploy.sh
# Select option 1
Or manually:
docker compose up -d
Scan a target:
docker compose exec argus python -m argus --target https://example.com
With AI analysis:
docker compose exec argus python -m argus --target https://example.com --use-ai
Stop:
docker compose down
⚠️ WARNING: This environment is INTENTIONALLY VULNERABLE for testing purposes. DO NOT expose to public internet!
Deploy the testing lab:
cd docker
./deploy.sh
# Select option 2
Or manually:
docker compose -f compose.testing.yml up -d
What gets deployed:
Access:
Scan the test environment:
# Scan from HOST (recommended)
python -m argus --target http://localhost:8080
# Note: Scanner container is NOT deployed in option 2
# To scan from container, use option 3 (Both)
Stop and remove:
docker compose -f compose.testing.yml down -v
Deploy production scanner + testing lab together:
cd docker
./deploy.sh
# Select option 3
What gets deployed:
Scan external sites from production scanner:
docker compose exec argus python -m argus --target https://example.com
Scan the testing lab from production scanner:
docker compose exec argus python -m argus --target http://wordpress
Stop all:
cd docker
./deploy.sh
# Select option 4
~/.argos/
├── reports/
│ ├── argus_report_example_20251020_143022.json # Machine-readable
│ └── argus_report_example_20251020_143022.html # Human-friendly
├── argos.db # SQLite database
└── logs/
└── argus.log # Scan logs
{
"tool": "argus",
"version": "0.2.0",
"target": "https://example-wp-site.com",
"date": "2026-04-15T18:45:30Z",
"mode": "safe",
"summary": {
"critical": 1,
"high": 2,
"medium": 4,
"low": 3,
"info": 5
},
"findings": [
{
"id": "ARGUS-WP-012",
"title": "Vulnerable plugin: contact-form-7 v5.3.1 (6 CVEs)",
"severity": "critical",
"confidence": "high",
"owasp": { "id": "A06", "name": "Vulnerable and Outdated Components" },
"latest_version": "5.9.8",
"cve": ["CVE-2021-39346", "CVE-2020-35489"],
"vulnerabilities": [
{
"title": "Contact Form 7 < 5.3.2 — Unrestricted File Upload",
"cvss": 9.8,
"cve_id": "CVE-2020-35489",
"cwe": ["CWE-434"]
}
],
"description": "Plugin 'contact-form-7' v5.3.1 has 6 known CVEs. Highest CVSS: 9.8 (Critical).",
"evidence": {
"type": "path",
"value": "https://example-wp-site.com/wp-content/plugins/contact-form-7/readme.txt",
"context": "Version detected via readme.txt"
},
"recommendation": "Update contact-form-7 to 5.9.8 (latest stable). Immediate action required.",
"affected_component": "contact-form-7 5.3.1"
},
{
"id": "ARGUS-WP-030",
"title": "wp-config.php backup exposed",
"severity": "critical",
"confidence": "high",
"owasp": { "id": "A05", "name": "Security Misconfiguration" },
"description": "WordPress configuration file backup is publicly accessible.",
"evidence": {
"type": "url",
"value": "https://example-wp-site.com/wp-config.php.bak",
"context": "HTTP 200, Size: 2847 bytes"
},
"recommendation": "Remove immediately and rotate all credentials.",
"affected_component": "wp-config.php.bak"
},
{
"id": "ARGUS-WP-050",
"title": "Missing security header: HSTS",
"severity": "medium",
"confidence": "high",
"owasp": { "id": "A02", "name": "Cryptographic Failures" },
"description": "HSTS header is not set.",
"evidence": {
"type": "header",
"value": "Strict-Transport-Security: [not set]",
"context": "Header missing in HTTP response"
},
"recommendation": "Add: Strict-Transport-Security: max-age=31536000; includeSubDomains; preload"
}
],
"diff": {
"ref_scan_id": 41,
"ref_date": "2026-04-10T10:00:00Z",
"ref_mode": "safe",
"current_mode": "safe",
"mode_mismatch": false,
"new": [{ "id": "ARGUS-WP-012", "title": "Vulnerable plugin: contact-form-7...", "severity": "critical" }],
"fixed": [],
"persisting": [{ "id": "ARGUS-WP-050", "title": "Missing security header: HSTS", "severity": "medium" }]
},
"notes": {
"scan_duration_seconds": 26.4,
"requests_sent": 312,
"rate_limit_applied": true,
"scope_limitations": "Scan limited to publicly accessible pages.",
"false_positive_disclaimer": "Manual verification recommended before remediation."
}
}
For the complete schema reference see docs/REPORT_FORMAT.md and
schema/report.schema.json.
argus-wp-watcher/
│
├── argus/ # Main application package
│ ├── checks/ # Security check modules
│ │ ├── config.py # Configuration auditing (XML-RPC, debug, editor)
│ │ ├── crawl.py # Web crawl checks (robots, sitemap, comments) [v0.2.0]
│ │ ├── files.py # Sensitive file detection (74 safe / 437 aggressive paths)
│ │ ├── fingerprint.py # WordPress detection + CVE check for core
│ │ ├── headers.py # Security headers analysis
│ │ ├── login.py # Login security checks (2FA, CAPTCHA, brute-force) [v0.2.0]
│ │ ├── plugins.py # Plugin/theme enumeration + CVE correlation [v0.2.0]
│ │ └── users.py # User enumeration
│ │
│ ├── core/ # Core infrastructure
│ │ ├── ai.py # AI integration (LangChain, streaming, agent, compare)
│ │ ├── config.py # Configuration management
│ │ ├── consent.py # Consent token system
│ │ ├── db.py # SQLite database interface
│ │ ├── diff.py # Scan diff computation (new/fixed/persisting) [v0.2.0]
│ │ ├── http_client.py # Rate-limited HTTP client
│ │ ├── logging.py # Structured logging
│ │ ├── owasp.py # OWASP Top 10 2021 mapping for all finding IDs [v0.2.0]
│ │ ├── report.py # Report generation (JSON + HTML)
│ │ └── vuln_db.py # CVE lookup (WPVulnerability.net + NVD) [v0.2.0]
│ │
│ ├── __main__.py # Entry point
│ ├── cli.py # CLI argument parser
│ └── scanner.py # Main scan orchestrator
│
├── config/ # Configuration files
│ ├── defaults.yaml # Default settings
│ └── prompts/ # AI prompt templates
│ ├── technical.txt # Technical analysis prompt
│ └── non_technical.txt # Executive summary prompt
│
├── db/
│ └── migrate.sql # Database schema
│
├── assets/
│ └── ascii.txt # ASCII art branding
│
├── docker/ # Docker deployment
│ ├── compose.yml # Production scanner compose
│ ├── compose.testing.yml # Vulnerable WordPress lab
│ ├── deploy.sh # Interactive deployment script
│ ├── setup-lab.sh # Automated vulnerable lab setup [v0.2.0]
│ └── Dockerfile # Production image
│
├── docs/ # Documentation
│ ├── AI_INTEGRATION.md # AI setup guide
│ ├── CONSENT.md # Consent system details
│ ├── DATABASE_GUIDE.md # Database reference
│ ├── ETHICS.md # Ethical guidelines
│ ├── REPORT_FORMAT.md # Report specification
│ ├── ROADMAP.md # Development roadmap
│ └── TESTING_GUIDE.md # Safe testing practices
│
├── schema/
│ └── report.schema.json # JSON report schema
│
├── scripts/
│ └── cli-examples.md # CLI usage examples
│
├── templates/
│ └── report.html.j2 # HTML report template
│
├── CHANGELOG.md # Version history
├── LICENSE # MIT License
├── README.md # This file
├── requirements.txt # Python dependencies
└── setup.py # Package installer
Status: 🎉 Released
Status: 🎉 Released
--diff last / --diff ID with new/fixed/persisting, mode mismatch warning~/.argos/costs.json, DB cost records (ai_costs table)--ai-stream for real-time token output--ai-compare openai,anthropic — parallel side-by-side analysis--ai-agent with live NVD + WPVulnerability.net tool callsFocus: Usability, scale, interactive AI
--show-options, --set)argus db scans list, argus db findings search)Planned improvements:
--set, --show-options) for dynamic provider switchingFocus: ML, automation, advanced AI
Commercial product for enterprises
IN PROCESS
For detailed feature descriptions, see ROADMAP.md
We welcome contributions! Whether it's:
git checkout -b feature/amazing-feature)git commit -m 'Add amazing feature')git push origin feature/amazing-feature)# Clone your fork
git clone https://github.com/YOUR-USERNAME/argus-wp-watcher.git
cd argus-wp-watcher
# Install development dependencies
python -m pip install -r requirements.txt
python -m pip install pytest black flake8 mypy
# Run code formatting
black argus/
# Run linting
flake8 argus/
mypy argus/
# Run tests (when available)
pytest tests/
Found a bug? Have a feature request?
Open an issue: https://github.com/rodhnin/argus-wp-watcher/issues
Please include:
python -m argus --version)python --version)Comprehensive documentation available in the docs/ directory:
This project is licensed under the MIT License - see the LICENSE file for details.
MIT License
Copyright (c) 2025 Rodney Dhavid Jimenez Chacin
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
IMPORTANT: This tool is for authorized security testing only.
By using Argus, you acknowledge and agree that:
If you discover vulnerabilities using Argus:
Don't scan. If you're unsure whether you have permission, you probably don't.
Argus stands on the shoulders of giants:
Special thanks to all security researchers who practice and promote ethical hacking.
Rodney Dhavid Jimenez Chacin (rodhnin)
For questions, feedback, or collaboration inquiries, please visit rodhnin.com to contact me.
Built with ❤️ for ethical hackers and WordPress administrators worldwide
⭐ Star this repo if you find it useful! ⭐
Report Bug • Request Feature • Documentation
Argus v0.2.0 — May 2026
| Check Category | Safe Mode | Aggressive | Details |
|---|
| WordPress Detection | ✅ | ✅ | Version fingerprinting via meta tags, readme, RSS, assets |
| Plugins & Themes | 100 plugins | 447 plugins | Version detection (4 methods) + real-time CVE/CVSS correlation |
| Sensitive Files | 74 paths | 437 paths | wp-config backups, .env, SQL dumps, .git, debug logs, PHP tools |
| User Enumeration | 3 methods | 6 methods | Author IDOR, REST API, HTML parsing + oEmbed, login error, XML-RPC |
| Security Headers | ✅ | ✅ | HSTS, CSP, X-Frame-Options, Referrer-Policy, Permissions-Policy |
| Misconfigurations | ✅ | ✅ | XML-RPC, debug mode, directory listing, file editor |
| Login Security | ❌ | ✅ | 2FA, CAPTCHA, brute-force protection, open registration, password policy |
| Web Crawl | ❌ | ✅ | robots.txt, sitemap.xml, HTML comments, link discovery (depth 1) |
| Provider | Best For | Speed | Cost/scan | Privacy |
|---|
| OpenAI gpt-4o-mini (default) | Best value | ⚡ ~40s | 💰 ~$0.006 | 🔒 Standard |
| OpenAI gpt-4o | Production quality | ⚡ ~40s | 💰 ~$0.05 | 🔒 Standard |
| Anthropic claude-3-5-haiku | Privacy-focused | ⚡ ~55s | 💰 ~$0.02 | 🔒 Enhanced |
| Ollama (Local) | Complete privacy | 🐢 ~28min | 💰 Free | 🔐 100% Offline |
| Mode | Checks | Consent Required | Rate Limit |
|---|
| Safe | Non-intrusive | ❌ No | 5 req/s |
| Aggressive | Deep scanning | ✅ Yes | 10 req/s |
| AI Analysis | Vulnerability analysis | ✅ Yes | N/A |
| Document | Description |
|---|
| AI_INTEGRATION.md | Complete AI setup guide (all 3 providers) |
| CONSENT.md | Consent token system technical details |
| DATABASE_GUIDE.md | SQLite schema, queries, management |
| ETHICS.md | Legal framework and ethical guidelines |
| REPORT_FORMAT.md | JSON schema and HTML specifications |
| TESTING_GUIDE.md | Safe testing with Docker lab |
| ROADMAP.md | Future features and development plans |