Vulnerability Scanning WordPress: Automatizzare la Sicurezza con Script

11 aprile 20265 minSicurezza
In breveAI

Il 36% degli hack WordPress avviene a causa di plugin vulnerabili. Lo scanning automatico delle vulnerabilità può aiutare a prevenire queste infezioni, controllando regolarmente i plugin installati e avvisando in caso di vulnerabilità note. Questo aiuta a chiudere il gap di sicurezza e proteggere il tuo sito web.

Il 36% degli Hack WordPress Passa da un Plugin Vulnerabile. Lo Scan Automatico Li Trova Prima.

Il dato Sucuri è chiaro: un terzo delle infezioni WordPress viene da plugin con vulnerabilità note. Non zero-day. Vulnerabilità pubblicate, con CVE assegnato, con patch disponibile. Ma il sito non era aggiornato.

Il vulnerability scanning automatico chiude questo gap: controlla regolarmente i plugin installati contro il database delle vulnerabilità note e ti avvisa prima che qualcuno le sfrutti.

I 3 Approcci al Vulnerability Scanning

Approccio 1: WPScan Database + WP-CLI

WPScan mantiene il database di vulnerabilità WordPress più completo. La API free permette 25 richieste/giorno (sufficiente per un sito).

#!/bin/bash
# vulnerability-scan.sh - Controlla plugin contro WPScan DB
WPSCAN_TOKEN="il-tuo-token-api"
SITE_PATH="/var/www/html"

cd "$SITE_PATH"

# Lista plugin con versione
wp plugin list --fields=name,version --format=csv | tail -n +2 | while IFS=',' read -r name version; do
    # Query WPScan API
    response=$(curl -s "https://wpscan.com/api/v3/plugins/$name" \
        -H "Authorization: Token token=$WPSCAN_TOKEN")
    
    # Controlla se ci sono vulnerabilità per questa versione
    vulns=$(echo "$response" | jq -r ".\"$name\".vulnerabilities[]? | select(.fixed_in != null) | select(.fixed_in > \"$version\") | .title" 2>/dev/null)
    
    if [ -n "$vulns" ]; then
        echo "⚠️  $name ($version): VULNERABILE"
        echo "$vulns" | head -3
        echo ""
    fi
done

Schedulalo con cron (giornaliero) e invia i risultati via email se ci sono vulnerabilità.

Approccio 2: Patchstack (virtual patching)

Patchstack non solo trova le vulnerabilità: le patcha virtualmente. Quando una vulnerabilità viene pubblicata e il plugin non ha ancora rilasciato l’aggiornamento, Patchstack applica una regola WAF che blocca lo sfruttamento.

È come avere un cerotto sulla ferita finché il chirurgo non arriva.

Piano Community (free): alert vulnerabilità. Piano Developer ($5/sito/mese): virtual patching + dashboard multi-sito.

Approccio 3: AI-Powered Analysis

Combina i dati WPScan con Claude API per un’analisi più intelligente:

function ai_vulnerability_analysis(): string {
    $claude = $GLOBALS['claude'];
    
    // Raccogli lista plugin con versione
    ob_start();
    WP_CLI::run_command(['plugin', 'list', '--format=json']);
    $plugins = json_decode(ob_get_clean(), true);
    
    // Raccogli info WordPress
    $wp_version = get_bloginfo('version');
    $php_version = phpversion();
    
    $prompt = "Analizza questa installazione WordPress per rischi di sicurezza:\n\n"
        . "WordPress: {$wp_version}\n"
        . "PHP: {$php_version}\n"
        . "Plugin installati:\n" . json_encode($plugins, JSON_PRETTY_PRINT) . "\n\n"
        . "Per ogni plugin, valuta:\n"
        . "1. È ancora mantenuto? (ultima release > 12 mesi = warning)\n"
        . "2. Ha vulnerabilità note recenti?\n"
        . "3. Rischio complessivo: basso/medio/alto\n"
        . "4. Azione consigliata (aggiorna/sostituisci/rimuovi/ok)\n\n"
        . "Rispondi con la lista dei plugin a rischio medio o alto.";
    
    $result = $claude->query($prompt, [
        'system' => 'Sei un security auditor WordPress. Conosci le vulnerabilità note dei plugin. Sii specifico e pratico.',
        'max_tokens' => 2048
    ]);
    
    return $result['content'];
}

L’AI aggiunge un livello di analisi che gli scanner automatici non fanno: valuta se un plugin è ancora mantenuto, se la versione PHP è compatibile con le patch di sicurezza, e suggerisce alternative per plugin abbandonati.

Automazione per Multi-Sito

Se gestisci 30 siti, non puoi fare scan manuali. Ecco lo script per scannerizzare tutti i siti e generare un report unico:

#!/bin/bash
# scan-all-sites.sh
SITES=(
    "/var/www/site1"
    "/var/www/site2"
    "/var/www/site3"
)

REPORT="/tmp/vulnerability-report-$(date +%Y-%m-%d).txt"
echo "Vulnerability Scan Report - $(date)" > "$REPORT"
echo "=================================" >> "$REPORT"

VULN_COUNT=0

for site in "${SITES[@]}"; do
    site_name=$(basename "$site")
    echo "" >> "$REPORT"
    echo "--- $site_name ---" >> "$REPORT"
    
    cd "$site"
    
    # Plugin con aggiornamenti disponibili
    updates=$(wp plugin list --update=available --fields=name,version,update_version --format=table 2>/dev/null)
    
    if [ -n "$updates" ]; then
        echo "$updates" >> "$REPORT"
        VULN_COUNT=$((VULN_COUNT + $(echo "$updates" | wc -l) - 1))
    else
        echo "Tutti i plugin aggiornati ✅" >> "$REPORT"
    fi
    
    # Plugin inattivi (potenziale rischio)
    inactive=$(wp plugin list --status=inactive --fields=name --format=csv 2>/dev/null | tail -n +2)
    if [ -n "$inactive" ]; then
        echo "Plugin inattivi (rimuovere): $inactive" >> "$REPORT"
    fi
done

echo "" >> "$REPORT"
echo "Totale plugin da aggiornare: $VULN_COUNT" >> "$REPORT"

# Invia il report
if [ "$VULN_COUNT" -gt 0 ]; then
    mail -s "⚠️ $VULN_COUNT plugin da aggiornare" admin@tuaagenzia.com < "$REPORT"
fi

Il Database delle Vulnerabilità

Dove trovare le vulnerabilità WordPress note:

Fonte Copertura API Costo
WPScan La più completa per WordPress ✅ REST API Free (25 req/giorno)
Patchstack DB WordPress + componenti ✅ REST API Free (solo DB)
Wordfence Intelligence WordPress ✅ Feed Free
NVD (NIST) Tutti i software ✅ REST API Free

Checklist Vulnerability Management

  1. Giornaliero: scan automatico plugin contro WPScan DB (cron)
  2. Settimanale: review dei risultati, aggiornamento plugin con patch disponibili
  3. Mensile: review plugin inattivi (disinstallare), review plugin non mantenuti (sostituire)
  4. Trimestrale: audit completo con AI analysis + pen test manuale su siti critici

FAQ

WPScan free basta per un'agenzia?

Il free tier (25 API call/giorno) basta per 1-2 siti (20 plugin ciascuno = ~40 call). Per 30 siti serve il piano a pagamento o l'approccio WP-CLI che controlla solo gli update disponibili (senza API, ma meno preciso sulle CVE specifiche).

Plugin inattivi sono un rischio?

Sì. Un plugin inattivo ha ancora i suoi file PHP sul server. Se ha una vulnerabilità, è sfruttabile anche se disattivato. Regola: se non lo usi, disinstallalo (non solo disattivarlo).

Quanto costa un vulnerability scan professionale?

Automated scan: $0-50/mese (tool sopra). Pen test professionale: $500-5000 a seconda dello scope. Per siti standard, gli automated scan sono sufficienti. Per siti PA, e-commerce, o con dati sensibili, un pen test annuale è raccomandato.

Gestisci i siti WordPress dei tuoi clienti?

AgencyPilot ti dà report AI, uptime monitoring, backup e portale clienti in un’unica dashboard. Gratis per 3 siti.

Prova gratis
Leggi anche
Tutti gli articoli
Tutti gli articoli