Negli audit capita di vedere l’avviso “manca HSTS” sull’endpoint MS Deploy (HTTPS 8172). In questa guida spieghiamo perché non puoi aggiungere direttamente l’header Strict‑Transport‑Security e quali alternative concrete adottare per sicurezza e compliance.
Panoramica: HSTS e il servizio MS Deploy sulla porta 8172
Obiettivo tipico: imporre la policy HSTS per ridurre i rischi di downgrade e garantire che le richieste passino sempre su HTTPS.
Contesto: quando pubblichi applicazioni con Visual Studio, Azure DevOps, Web Matrix o msdeploy.exe
, il traffico va verso l’endpoint di pubblicazione esposto dal server IIS tramite il Web Management Service (WMSvc) in ascolto su HTTPS 8172. Questo endpoint non è un “Sito” IIS e non transita nella pipeline delle richieste gestita da Site/Virtual Directory.
Domanda iniziale: “Posso aggiungere l’header Strict-Transport-Security
(HSTS) alle risposte dell’endpoint 8172?”
Risposta breve
No, non esiste un modo supportato per aggiungere HSTS direttamente all’endpoint MS Deploy su 8172. Il servizio non utilizza la pipeline dei siti IIS (dove normalmente si configurano le intestazioni personalizzate) e non è pensato per client browser. La mancanza di HSTS su 8172 non indebolisce il canale di pubblicazione, che è già cifrato con TLS e non espone HTTP in chiaro.
Perché HSTS non è applicabile direttamente
- Non è un web server pubblico: MS Deploy/WMSvc è un endpoint di gestione. Non c’è un Site o Virtual Directory a cui applicare le “HTTP Response Headers”. Le richieste non attraversano moduli come URL Rewrite, Request Filtering o impostazioni di Custom Headers.
- HSTS è un’istruzione per browser: serve a dire ai browser “per questo host usa sempre HTTPS”. Gli agent di distribuzione (es.
msdeploy.exe
) non interpretano HSTS e connettono direttamente l’URLhttps://server:8172/MsDeploy.axd
via TLS. - Nessun downgrade a HTTP: l’endpoint 8172 non espone la porta 80. Anche senza HSTS, non esiste un percorso “in chiaro” verso lo stesso servizio. Il canale è già TLS end‑to‑end.
- Pipeline diversa da IIS Site: HSTS, in IIS, si imposta a livello di sito o di application. Il listener 8172 usa HTTP.SYS e il servizio di gestione, non il motore di siti IIS. Non è disponibile un punto di configurazione supportato per iniettare l’header nelle risposte di WMSvc.
Chiarimento tecnico su HSTS
- L’header HSTS viene inviato dal server solo dopo una connessione HTTPS riuscita. Contiene almeno
max-age
e, opzionalmente,includeSubDomains
epreload
:Strict-Transport-Security: max-age=31536000; includeSubDomains; preload
- Gli strumenti di scansione che segnalano “manca HSTS” su
https://server:8172
stanno applicando un controllo pensato per siti web pubblici a un endpoint amministrativo. - La presenza o assenza di HSTS non cambia la forza crittografica di TLS, né la validità del certificato server, né le modalità di autenticazione (Windows/Basic/Client Cert) usate da MS Deploy.
Alternative praticabili e raccomandazioni
Se il tuo obiettivo è aumentare la sicurezza del canale o allinearti a requisiti aziendali/compliance, ecco cosa puoi fare concretamente.
Rafforzare TLS (Schannel) su Windows Server
Assicurati di abilitare solo protocolli e cifrari moderni. In ambienti recenti è raccomandato TLS 1.2 e, se supportato dalla tua piattaforma, anche TLS 1.3.
Disabilitare protocolli legacy e forzare TLS 1.2/1.3
Attenzione: prima di procedere, verifica la compatibilità di tutti i client (build agent, macchine di sviluppo, pipeline CI/CD). Esegui un backup del registro.
:: Esegui da un prompt elevato (Administrator)
:: Disabilita TLS 1.0 e 1.1
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.0\Server" /v Enabled /t REG_DWORD /d 0 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.1\Server" /v Enabled /t REG_DWORD /d 0 /f
:: Abilita TLS 1.2 (server)
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v Enabled /t REG_DWORD /d 1 /f
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.2\Server" /v DisabledByDefault /t REG_DWORD /d 0 /f
:: (Opzionale) Abilita TLS 1.3 se supportato dall’OS
reg add "HKLM\SYSTEM\CurrentControlSet\Control\SecurityProviders\SCHANNEL\Protocols\TLS 1.3\Server" /v Enabled /t REG_DWORD /d 1 /f
Ordinamento delle suite di cifratura
Su versioni moderne di Windows, l’ordinamento delle cipher suite può essere controllato via criteri. Esempio (PowerShell elevato):
# Esempio minimale: ECDHE + AES-GCM
$preferred = @(
"TLSECDHERSAWITHAES128GCM_SHA256",
"TLSECDHERSAWITHAES256GCM_SHA384"
) -join ","
New-Item -Path "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" -Force | Out-Null
Set-ItemProperty -Path "HKLM:\SOFTWARE\Policies\Microsoft\Cryptography\Configuration\SSL\00010002" -Name "Functions" -Value $preferred
Riavvia il server per applicare integralmente le modifiche.
Certificato server per 8172: verifica, binding e rinnovo
Il servizio su 8172 usa HTTP.SYS; il certificato viene associato al listener tramite binding. Puoi ispezionarlo con netsh
:
netsh http show sslcert ipport=0.0.0.0:8172
Se serve aggiornare il binding (es. rinnovo o cambio CA), esporta il nuovo certificato (con chiave privata) nella macchina, trova il suo Thumbprint e applica:
:: Sostituisci {THUMBPRINT} e {APPID} con i tuoi valori
netsh http delete sslcert ipport=0.0.0.0:8172
netsh http add sslcert ipport=0.0.0.0:8172 certhash={THUMBPRINT} appid={APPID} certstorename=MY
Best practice:
- Usa un certificato con CN/SAN che corrisponda esattamente al nome host usato dai client (
ComputerName=https://nome-host:8172/MsDeploy.axd
). - Automatizza il rinnovo (es. ACME) e pianifica una verifica di health dopo ogni sostituzione del certificato.
Autenticazione e autorizzazioni
- Autenticazione: prediligi Windows/NTLM o, se usi Basic, mantienilo solo su HTTPS e limita le credenziali a un account di pubblicazione con privilegi minimi.
- Deleghe: in IIS, usa “Management Service Delegation” per consentire al solo utente/gruppo autorizzato i provider necessari (es.
contentPath, iisApp
) e lo scope del sito specifico. - Client certificate (mTLS): supportato in scenari specifici e non comune. Valutalo solo se indispensabile e documenta l’impatto operativo (gestione dei certificati client e mapping degli utenti).
Isolamento e controllo di rete
Se l’endpoint è raggiungibile dall’esterno, riduci la superficie d’attacco:
- Firewall host: consenti 8172 solo a IP sorgente noti (sedi, VPN, build agent).
- Perimetro: preferisci l’accesso via VPN o bastion host; evita l’esposizione diretta da Internet se non strettamente necessaria.
- Rate limiting: se disponibile a livello di edge/WAF, limita connessioni e richieste per prevenire brute force.
Esempio rapido di regola firewall (cmd elevato):
netsh advfirewall firewall add rule name="Allow-8172-Deploy" dir=in action=allow protocol=TCP localport=8172 remoteip=203.0.113.10/32 enable=yes
netsh advfirewall firewall add rule name="Block-8172-Else" dir=in action=block protocol=TCP localport=8172 enable=yes
Uniformare le policy (incluso HSTS) con un reverse proxy
Se la tua azienda impone HSTS su tutti gli endpoint e vuoi che gli scanner vedano l’header anche su 8172, la strada praticabile è posizionare un reverse proxy/WAF davanti a WMSvc. Il proxy termina TLS, aggiunge HSTS e inoltra al backend 8172 su connessione TLS re‑criptata.
Architettura di riferimento
Client (msdeploy.exe / VS) ──TLS──> Reverse Proxy (443)
└─ aggiunge HSTS, CSP, ecc.
└─ valida certificati client (opzionale)
└─ re‑encrypt ──TLS──> Backend WMSvc :8172
Considerazioni operative
- Compatibilità protocollo: MS Deploy usa richieste con body consistente e può inviare header come
Expect: 100-Continue
. Verifica che il proxy supporti HTTP/1.1 e tenga vivi i flussi lunghi (upload pacchetti grandi). - Timeout: alza send/receive timeout e dimensioni massime (es.
clientmaxbody_size
o equivalenti). - Header HSTS al proxy: aggiungi
Strict-Transport-Security
con direttivaalways
/add_header
persistente emax-age
adeguato (almeno 6–12 mesi). Esempio generico:add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
- mTLS: se richiedi certificati client, falli terminare al proxy. WMSvc non è progettato per ricevere tramite header “forwarded client cert” come farebbe un’applicazione custom.
Esempio di reverse proxy con re‑encrypt
# Schema generico (concetti), adattare al proprio prodotto di proxy/WAF
listen 443 ssl http2;
server_name deploy.example.tld;
Politiche di sicurezza al bordo
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
add_header X-Content-Type-Options "nosniff" always;
Inoltro al backend WMSvc (TLS 8172)
location / {
proxy_pass [https://backend.internal:8172](https://backend.internal:8172);
proxysslserver_name on;
proxysetheader Host $host;
proxyhttpversion 1.1;
proxyrequestbuffering off; # riduce buffering durante upload
proxyreadtimeout 1h;
proxysendtimeout 1h;
}
Nota: MS Deploy è “sensibile” a proxy troppo aggressivi su buffering/timeout. Testa con pacchetti di dimensioni reali prima di andare in produzione.
Gestire i report degli scanner di vulnerabilità
Se l’unico “finding” rimasto è “manca HSTS su 8172”, documenta perché è not applicable e quali controlli compensativi hai attuato. Ecco un testo di esempio che puoi adattare:
L’endpoint MS Deploy (HTTPS 8172) non è un sito web né serve contenuti a browser; è un canale amministrativo di pubblicazione protetto da TLS. L’header HSTS è pensato per browser e non viene interpretato dai client di distribuzione. L’endpoint non espone HTTP in chiaro, quindi non esiste rischio di downgrade. Sono stati implementati controlli compensativi: TLS 1.2/1.3, cipher suite moderne, certificati validi e regole firewall che limitano gli IP sorgente. Lo scanner viene aggiornato con esclusione mirata per questa classe di endpoint.
Tabella decisionale: cosa fare in base all’obiettivo
Obiettivo | Azione consigliata | Note operative |
---|---|---|
Rafforzare la sicurezza del canale | Abilita TLS 1.2/1.3, disabilita 1.0/1.1, ordina le cipher suite, controlla il binding del certificato. | Verifica compatibilità dei client; pianifica riavvio. |
Uniformare policy (HSTS, header di sicurezza) | Metti un reverse proxy/WAF davanti a 8172 e aggiungi gli header lato proxy. | Attenzione a timeout/buffering; valuta mTLS solo al proxy. |
Eliminare finding “manca HSTS” | Registra un’esclusione nello scanner spiegando che l’endpoint non è per browser; allega i controlli compensativi implementati. | Allinea la policy interna per distinguere endpoint amministrativi da siti pubblici. |
Ridurre la superficie di attacco | Restringi 8172 a IP/segmenti noti via firewall e metti l’host dietro VPN o bastion. | Monitora tentativi di login e rate limiting al perimetro. |
Domande frequenti
Posso abilitare HSTS con web.config o “HTTP Response Headers” di IIS?
No. Queste impostazioni si applicano ai Site/Application IIS. L’endpoint 8172 è servito dal Web Management Service e non attraversa quella pipeline.
Esiste un modo di aggiungere header a livello di sistema (HTTP.SYS) per 8172?
No, non c’è un meccanismo supportato per iniettare arbitrariamente nuove intestazioni nelle risposte di WMSvc tramite HTTP.SYS. Le impostazioni documentate non includono la personalizzazione di header applicativi come HSTS.
Se attivo HSTS a livello di dominio (preload) risolvo il finding sul 8172?
Di solito no. Gli scanner eseguono richieste dirette su https://host:8172
e si aspettano di ricevere Strict-Transport-Security
in quella specifica risposta. Un preload di dominio non fa comparire l’header su 8172 e non modifica la risposta del servizio.
Qual è il rischio reale senza HSTS su 8172?
Limitato: non esiste una contropartita HTTP dello stesso servizio e i client non sono browser. I rischi da considerare sono altri (certificati deboli, protocolli legacy, credenziali ampie, esposizione non necessaria).
Meglio “Basic over HTTPS” o “Windows/NTLM” per MS Deploy?
Preferisci Windows/NTLM in ambienti di dominio. Se usi Basic, tienilo confinato a TLS e a utenti dedicati con privilegi minimi, ruotando regolarmente le credenziali.
Verifiche pratiche
Esegui queste verifiche dopo il hardening:
- Negoziazione TLS:
tshark -o tls.keylog_file:tls.keys -d tcp.port==8172,ssl -i any oppure: powershell -c "Test-NetConnection -ComputerName nome-host -Port 8172"
- Binding certificato:
netsh http show sslcert ipport=0.0.0.0:8172
- Header di risposta osservabili (per completezza):
curl -vkI "https://nome-host:8172/MsDeploy.axd" Atteso: risposta 401/403 senza HSTS; conferma che il certificato e la catena siano corretti.
Checklist operativa
- Conferma che 8172 sia necessario e documenta i flussi (chi pubblica cosa, da dove).
- Abilita TLS 1.2/1.3, disabilita protocolli obsoleti, ordina le cipher suite.
- Installa un certificato server valido (CN/SAN corretti) e automatizza il rinnovo.
- Limita l’accesso via firewall a IP/segmenti autorizzati; preferisci VPN o bastion.
- Configura la delega minima necessaria in IIS (“Management Service Delegation”).
- Se richiesto dalla policy, anteponi un reverse proxy che aggiunga HSTS e altri header.
- Aggiorna lo scanner con una exception motivata per gli endpoint amministrativi.
- Monitora gli accessi e fallimenti di autenticazione; abilita alert su anomalie.
In sintesi
- Non c’è un metodo supportato per aggiungere l’header HSTS direttamente al servizio MS Deploy su porta 8172, perché non transita nella pipeline dei siti IIS.
- La sicurezza del canale non dipende da HSTS: l’endpoint usa già TLS e non espone HTTP.
- Se serve compliance: usa un reverse proxy per applicare HSTS (e altre intestazioni) oppure giustifica un’esclusione specifica nel tool di scansione, elencando i controlli compensativi.
Morale: HSTS protegge i client web; sugli endpoint di deployment è più importante tenere TLS aggiornato, limitare gli ingressi con firewall e usare autenticazione forte e deleghe minime.
Appendice: esempi e snippet utili
Impostazioni minime di HSTS (lato reverse proxy)
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains" always;
Esempio di avvio rapido per testare una pubblicazione
Per verificare che l’hardening non impatti il flusso di rilascio, prova un deploy “what‑if”:
msdeploy.exe -verb:sync ^
-source:contentPath="C:\Pacchetti\MyApp" ^
-dest:auto,ComputerName="https://nome-host:8172/MsDeploy.axd?site=Default%20Web%20Site",AuthType=NTLM ^
-whatif
Se usi Basic:
msdeploy.exe -verb:sync ^
-source:package="C:\Pacchetti\MyApp.zip" ^
-dest:auto,ComputerName="https://nome-host:8172/MsDeploy.axd?site=Default%20Web%20Site",AuthType=Basic,UserName="DOMINIO\utente",Password="*" ^
-allowUntrusted:false
Timeout tipici lato proxy
# Esempi di parametri da alzare per deploy di grandi dimensioni
proxyreadtimeout 3600s;
proxysendtimeout 3600s;
clientmaxbody_size 0; # nessun limite lato proxy
Modello di nota per il change management
Titolo: Hardening TLS su endpoint MS Deploy (8172)
Scopo: disabilitare TLS 1.0/1.1, forzare TLS 1.2/1.3, riordinare cipher suite, verificare binding certificato.
Impatto: potenziale incompatibilità con client legacy.
Rollback: ripristino chiavi di registro precedenti e riavvio del servizio/server.
Indicatori di buona sicurezza
- Solo TLS 1.2/1.3 negoziati.
- Certificato con CA attendibile e catena completa.
- Accesso limitato a IP/segmenti previsti.
- Deleghe MS Deploy minime e specifiche per sito.
- Log di accesso monitorati; alert su errori ripetuti.
Takeaway operativo: non inseguire HSTS dove non ha valore. Metti in sicurezza ciò che conta (TLS, identità, confini di rete) e usa il reverse proxy solo se necessario per allinearti a policy uniformi o per “zittire” controlli pensati per i siti web pubblici.