Perché phpMyAdmin esposto su HTTP è come lasciare l'archivio aperto sulla strada

Nerd Level: 2/5
Perché phpMyAdmin esposto su HTTP è come lasciare l'archivio aperto sulla strada

Ho avuto la malaugurata esperienza di vedere ancora nel 2025 un phpMyAdmin esposto su http://123.123.123.123/phpmyadmin/: HTTP senza HTTPS, IP pubblico, accesso diretto. E ogni volta che lo vedo penso che forse sto sbagliando qualcosa io, ma è una di quelle cose che sembrano innocue finché non succede il casino.


Il Magazzino sulla Strada Principale

Immagina che la tua azienda abbia un magazzino con tutti gli archivi: contratti, dati clienti (protetti da gdpr), fatture, progetti, tutto quello che serve per mandare avanti il business.

Ora immagina di metterlo sulla statale (IP pubblico, raggiungibile da chiunque), con una bellissima vetrata senza sorveglianza (HTTP, nessuna encryption), con la chiave appesa fuori (form login esposto, nessun 2FA), e con un bel cartello luminoso “ARCHIVIO AZIENDALE CON DATI SEGRETI” (/phpmyadmin/ nell’URL): non è la strategia vincente per non farsi rubare nulla.


Problema #1: Tutti Vedono Cosa Entra ed Esce (Man-in-the-Middle)

HTTP = Tutto in chiaro: quando accedi a phpMyAdmin via HTTP, la password viaggia in chiaro sulla rete, il che significa che chiunque sia sulla stessa rete WiFi (bar, aeroporto, coworking) può intercettare il traffico e leggere username, password, le richieste che fai al database (dammi i nomi utente degli ultimi dieci iscritti al gestionale), dati che scarichi (i nomi degli ultimi dieci iscritti).

È come urlare la combinazione della cassaforte mentre entri nel magazzino: prima o poi passa quello che ti sente e se la segna.

Rischio reale:

  • Dipendente in smart working dal bar → password intercettata
  • Cliente connesso al WiFi pubblico → sessione hijacked
  • Problemi alla rete interet Fastweb Eolo chi per esso → credentials rubate

Problema #2: La Porta ha un bersaglio disegnato sopra e non è manco blindata (Nessun Firewall, IP Diretto)

Se phpMyAdmin è raggiungibile da IP pubblico, chiunque nel mondo può provare ad accedere; non serve essere un “target” specifico, perché script automatici scansionano tutti gli IP di internet 24/7 cercando phpMyAdmin esposti, e quando trovano il tuo provano le solite combinazioni: admin:admin, root:root, root:password, root:123456, fino a dictionary attack con 10.000 password comuni.

La porta è sulla statale, chiunque passa può provare a entrare, e alcuni passano 1000 volte al giorno provando chiavi diverse finché una non funziona.

Rischio reale:

  • Brute force automatico - Script provano migliaia di combinazioni
  • Bot che scansionano IP casuali - Non sei target, sei solo un IP nella lista
  • Credential stuffing - Provano password rubate da altri breach

Problema #3: Il Cartello “QUI CI SONO I DATI” (phpMyAdmin Discovery)

/phpmyadmin/ è un percorso standard. Gli scanner lo sanno. Cercano:

  • http://IP/phpmyadmin/
  • http://IP/pma/
  • http://IP/admin/
  • http://IP/mysql/

Trovarlo è triviale. È come mettere un cartello “ARCHIVIO” davanti al magazzino. Non serve ingegno, basta guardare.

Analogia magazzino: Invece di nascondere il magazzino, hai messo cartello luminoso sulla strada.

Rischio reale:

  • Ci sono dei motori di ricerca come google ma solo per queste cose: Shodan, Censys, e altri scansionano internet e indicizzano phpMyAdmin esposti
  • Ricerca: "phpMyAdmin" port:80 → lista di migliaia di server vulnerabili
  • Il tuo è nella lista

Problema #4: Nessuna Chiusura di Emergenza (No Rate Limiting, No 2FA)

phpMyAdmin standard non ha nessun limite tentativi login, nessun blocco IP dopo N errori, nessun 2FA, nessun alert quando qualcuno prova ad accedere; è come avere una porta che si apre con una combinazione dove se sbagli non suona nessun allarme, quindi puoi provare 10.000 combinazioni senza che nessuno venga avvisato, e se azzecchi entri.

Rischio reale:

  • Bot provano 10.000 password in un’ora → nessuno se ne accorge
  • Se indovinano → accesso completo al database
  • Possono scaricare tutto, modificare tutto, cancellare tutto
  • Te ne accorgi quando un cliente ti chiama dicendo “il sito non funziona più”
  • Potresti non accorgertene mai e stanno consultando e portandosi fuori tutti i dati
  • magari stanno modificando dati silenziosamente cambiando i termini di contratti commerciali, o segnalando come pagati ordini che non lo sono

Cosa Succede se Entrano?

Hai database production. phpMyAdmin dà accesso completo:

  • SELECT * FROM users → scaricano tutti gli utenti
  • SELECT * FROM orders → scaricano tutti gli ordini
  • DROP TABLE users → cancellano tabelle
  • UPDATE users SET email='attacker@evil.com' → cambiano dati
  • INSERT INTO admins ... → si creano account admin

Analogia magazzino: Se entrano, possono:

  • Copiare tutti i documenti
  • Modificare contratti
  • Bruciare l’archivio
  • Prendere controllo del magazzino
  • Dormirci dentro per anni e non lo puoi sapere

Impatto business:

  • GDPR violation → fino a €20M o 4% fatturato annuo
  • Data breach notification → devi avvisare clienti entro 72h
  • Reputazione distrutta → “hanno rubato i nostri dati”
  • Downtime → sito offline finché ripristini backup (se esistono)
  • Ricatto → “paga 5 BTC o pubblichiamo il database”

“Ma Tanto Siamo Piccoli, Chi Ci Attacca?”

Questa è la mia preferita, e quella in cui l’analogia con il magazzino sulla statale un po’ sparisce.

Nessuno vi attacca direttamente. Siete solo un IP nella lista.

La cosa che l’informatica cambia rispetto al mondo reale è che puoi tirare su un condominio, spostarlo, trasformarlo in millisecondi. E puoi avere un numero impressionante di bot che vanno a scandagliare se ci sono situazioni in cui infettare o rubare. Script automatici scansionano 4 miliardi di IP (tutto IPv4) cercando phpMyAdmin, WordPress admin, router non protetti, telecamere IP, qualsiasi cosa. Se anche l’azienda è piccola e ha 3 cose in croce il bot ci prova, butta tutto all’aria o vi cancella tutto per il gusto di provare. Non è che qualcuno si sveglia la mattina e dice “Oggi attacco la ditta di impianti elettrici di Domodossola”. È che uno script fa partire una scansione che prova tutti gli IP del mondo, e il vostro risponde.

Non serve essere famosi. Serve solo essere scansionabili.

Dati reali:

  • Shodan indicizza ~50.000 phpMyAdmin esposti su IP pubblici
  • Bot provano login su milioni di IP al giorno
  • Trovare il tuo richiede zero sforzo

La Soluzione (Non È Difficile)

Fix Immediato (oggi)

  1. Togli phpMyAdmin dal pubblico
    • Accesso VPN, whitelist IP e simili
    • O dietro HTTP basic auth + HTTPS
    • O almeno captcha dai
  2. Aggiungi HTTPS
    • Let’s Encrypt gratuito
    • 10 minuti di setup
    • Non ci sono scuse
  3. Cambia path
    • /phpmyadmin//admin-panel-9f8a7b2c/ (random)
    • Security by obscurity? No. Defense in depth.

Fix Corretto (questa settimana)

  1. VPN obbligatoria
    • WireGuard o OpenVPN
    • Accesso database solo da VPN
  2. 2FA su phpMyAdmin
    • Plugin Google Authenticator
    • Anche se rubano password, non entrano
  3. Monitoring
    • Alert se qualcuno prova login da IP sconosciuto
    • Fail2ban che blocca IP dopo 5 errori

“Abbiamo Sempre Fatto Così e Non È Mai Successo Niente”

Ah, questa è una delle frasi più belle delle aziende storiche (magari statali) - di solito subito prima di “ci hanno bucato”.

Significa solo che non hai ancora incontrato il bot giusto.

Rientrano in atteggiamenti simili frasi come “Guido da 20 anni e non ho mai fatto incidenti” e “mio nonno fumava tutti i giorni ed è campato fino a 95 anni”


TL;DR

phpMyAdmin esposto su http://IP-pubblico/phpmyadmin/ è:

HTTP → Password in chiaro sulla rete ❌ IP pubblico → Chiunque può provare ad accedere ❌ Path standard → Bot lo trovano automaticamente ❌ No rate limiting → Brute force senza limiti ❌ No 2FA → Password unica barriera

Risultato: È come lasciare il magazzino con tutti i dati aziendali aperto sulla strada con la chiave appesa fuori.

Fix: VPN + HTTPS + 2FA + monitoring (alemno un paio di questi). Non è difficile, richiede 1 ora di setup, ti salva da disastri.


P.S.: Se dopo aver letto questo articolo continui a lasciare phpMyAdmin esposto su HTTP con IP pubblico ti entrano nessuna assicurazione ti copre - “negligenza grave” è il termine tecnico. E quando chiami l’assistenza dicendo “ci hanno bucato”, ti dirà esattamente quello che c’è scritto qui sopra ma ti costerà 10 volte di più aggiustare il casino.