Data di rilascio:25 febbraio 2025
Versione:.NET 8 e higher.NETFramework, tutte le versioni
Riepilogo
Microsoft ha implementato miglioramenti della sicurezza per le versioni recenti di Windows. Questi miglioramenti della sicurezza modificano la gestione del percorso temporaneo e possono causare la restituzione di determinate API .NET Framework e .NET comeSystem.IO.Path.GetTempPath()una posizione diversa dopo l'applicazione della patch.These security improvements modify temp path handling and may cause cause certain .NET Framework and .NET APIs likeSystem.IO.Path.GetTempPath()to return a different location after the patch is applied.
Azione necessaria
Non è richiesta alcuna azione da parte di .NET Framework o . applicazione basata su NET. L'applicazione trarrà automaticamente vantaggio da eventuali miglioramenti della sicurezza applicabili all'ambiente. La maggior parte delle applicazioni non osserva alcuna modifica comportamentale.
Il resto di questo articolo spiega come determinare se questi miglioramenti della sicurezza possono influire sul comportamento di runtime dell'applicazione. Questo articolo elenca anche i passaggi per personalizzare il comportamento di runtime, se necessario
Software applicabile
Questo articolo si applica al software seguente:
-
.NET 8 e versioni successive
-
.NET Framework, tutte le versioni, in base agli aggiornamenti della sicurezza di luglio 2024 e agli aggiornamenti successivi
Solo in esecuzione sulle versioni di Windows Update seguenti:
-
Windows 10, versione 22H2 quando è installato KB5052077
-
Windows Server 2019, quando è installato KB5053594
-
Windows Server 2016, quando è installato KB5053594
Questo articolo non si applica a .NET Framework o .NET in esecuzione su Windows 11, Windows Server 2022 o versione successiva.
Questo articolo non si applica a .NET quando è in esecuzione su piattaforme non Windows.
Descrizione dettagliata e dichiarazione d'impatto
Come indicato in precedenza, microsoft ha eseguito il backport dell'API GetTempPath2 di Win32 alle versioni precedenti di Windows sul mercato per fungere da sostituzione più sicura della precedente API GetTempPath di Win32. Internamente, .NET Framework e .NET si basano su queste API Win32 per fornire l'implementazione del metodo System.IO.Path.GetTempPath() : l'API win32 GetTempPath2 è preferibile se esiste; e l'API win32 GetTempPath viene utilizzata come fallback se GetTempPath2 non esiste.
Poiché questi kb rendono disponibile la nuova API GetTempPath2 Win32 sulle piattaforme applicabili, .NET Framework e .NET inizieranno a usare GetTempPath2 dopo l'installazione.
La modifica comportamentale principale è che i chiamanti che eseguono come identità SYSTEM osservano il metodo System.IO.Path.GetTempPath() restituire %WINDIR%\SystemTemp per impostazione predefinita, mentre i chiamanti che eseguono come qualsiasi altra cosa diversa dall'identità SYSTEM vedranno che il metodo continuerà a restituire il valore esistente.
Se l'applicazione soddisfa tutti i criteri seguenti, questa modifica potrebbe influire su di esse:
-
L'applicazione utilizza un runtime e una piattaforma del sistema operativo elencati sotto la precedente intestazione "Software applicabile"; e
-
L'applicazione viene eseguita come identità SYSTEM; e
-
Impostare manualmente la variabile di ambiente %TMP% o %TEMP% per reindirizzare il percorso di file temp standard. Vedere la sezione Osservazioni della documentazione sull'API Win32 GetTempPath .
Se soddisfi tutti questi criteri, una volta installate le kb di Windows, puoi osservare la scrittura dell'applicazione in una directory temporanea diversa da quella prevista.
Questa modifica comportamentale può essere visibile tramite .NET Framework o . API fornita da NET che alla fine si basa su GetTempPath2. I punti di ingresso più comuni sono:
Non si tratta di un elenco esaustivo dei metodi i cui comportamenti potrebbero cambiare dopo l'installazione delle kb.
Determinare se un'applicazione viene eseguita sotto l'identità SYSTEM
Esistono diversi meccanismi per determinare l'identità di un'applicazione .NET Framework o .NET
Applicazioni Web basate su IIS
IIS fa riferimento all'identità SYSTEM come "LOCALSYSTEM". In Gestione IIS (inetmgr.exe) passare alla scheda Pool di applicazioni per visualizzare tutti i pool di app e le identità associate. È anche possibile selezionare "Identità" nell'elenco a discesa Raggruppa per per semplificare la visualizzazione dei pool di app in esecuzione come identità LOCALSYSTEM.
Lo screenshot seguente mostra un esempio di pool di app ("MyAppPool") configurato per l'esecuzione come LOCALSYSTEM. Tutte le applicazioni in esecuzione all'interno di questo pool di app verranno eseguite come identità SYSTEM.
È anche possibile accedere a queste informazioni a livello di programmazione da una sessione di PowerShell con privilegi elevati usando lo script seguente.
Import-Module IISAdministration Get-IISAppPool | where {$_.ProcessModel.IdentityType -eq "LocalSystem"}
In un computer configurato con un pool di app "MyAppPool" a livello di SISTEMA, come illustrato nello screenshot precedente, questo script di PowerShell stampa quanto segue, mostrando che "MyAppPool" è in esecuzione sotto l'identità SYSTEM.
Name Status CLR Ver Pipeline Mode Start Mode ---- ------ ------- ------------- ---------- MyAppPool Started v4.0 Integrated OnDemand
Servizi Windows
Se .NET Framework o . L'applicazione basata su NET è registrata come servizio Windows, puoi usare il gestore dei servizi per visualizzare l'identità associata.
Da un prompt dei comandi con privilegi elevati eseguire services.msc. Viene visualizzata l'interfaccia utente di Gestione servizi.
Se la colonna Accedi come elenca "Sistema locale" per l'identità del servizio, il servizio è in esecuzione sotto l'identità SYSTEM.
È anche possibile eseguire query su questi dati tramite PowerShell usando il cmdlet Get-Service . Ad esempio, per eseguire una query su queste informazioni per un servizio denominato MyService, usare il comando seguente.
(Get-Service MyService).UserName -ieq "LocalSystem"
Se il servizio è registrato per l'esecuzione con l'identità SYSTEM, verrà stampato True sulla console.
Altri meccanismi
Strumenti come Gestione attività (taskmgr.exe) o Sysinternals Process Explorer possono anche stabilire se un'applicazione è in esecuzione sotto l'identità SYSTEM.
In Gestione attività, utilizzare la visualizzazione Dettagli per elencare tutti i processi in esecuzione nel sistema, quindi individuare il processo di interesse e guardare la voce sotto la colonna Nome utente .
Se il valore Nome utente è "SISTEMA", il processo è in esecuzione sotto l'identità SYSTEM.
In alternativa, in Sysinternals Process Explorer individuare il processo di interesse e immettere la visualizzazione Proprietà , quindi osservare il campo Utente nella scheda Immagine .
Se il valore User è "NT AUTHORITY\SYSTEM", il processo è in esecuzione sotto l'identità SYSTEM.
Modifica del percorso temporaneo per i processi a livello di SISTEMA
Lo script di PowerShell seguente illustra come creare una nuova directory C:\NewSystemTemp\ e limitare l'accesso alla directory solo ai processi in esecuzione sotto l'identità SYSTEM. Non tentare di modificare gli ACL di una directory che è già popolata con file.
Questo script deve essere eseguito da una sessione di PowerShell con privilegi elevati.
mkdir C:\NewSystemTemp\ $acl = New-Object System.Security.AccessControl.DirectorySecurity $acl.SetSecurityDescriptorSddlForm("O:SYG:SYD:PAI(A;OICI;FA;;;SY)(A;OICI;FA;;;BA)") Set-Acl C:\NewSystemTemp\ -AclObject $acl
È possibile verificare che l'operazione sia riuscita eseguendo il comando
icacls C:\NewSystemTemp\
Che produrrà il seguente output che mostra il successo:
C:\NewSystemTemp\ NT AUTHORITY\SYSTEM:(OI)(CI)(F) BUILTIN\Administrators:(OI)(CI)(F) Successfully processed 1 files; Failed processing 0 files
Dopo aver creato la directory, impostare la variabile di ambiente %SYSTEMTEMP% con ambito a livello di sistema. Puoi impostare questa opzione tramite l'interfaccia utente di System Pannello di controllo oppure a livello di programmazione tramite PowerShell:
[Environment]::SetEnvironmentVariable("SYSTEMTEMP", "C:\NewSystemTemp", [EnvironmentVariableTarget]::Machine)
Riavvia quindi il computer.
La modifica della variabile di ambiente %SYSTEMTEMP%non modifica il valore restituito di System.IO.Path.GetTempPath() per le applicazioni .NET Framework e .NET in esecuzione come identità diversa da SYSTEM. Tali applicazioni continueranno a seguire la stessa logica di risoluzione che hanno sempre, inclusa l'onorare la %TMP% o %TEMP% variabili di ambiente, se presenti.
Analogamente, l'impostazione della variabile di ambiente %TMP% o %TEMP% non modifica il valore restituito di System.IO.Path.GetTempPath() per le applicazioni .NET Framework e .NET in esecuzione come identità SYSTEM.
Per ulteriori informazioni
Per altre informazioni sui comportamenti di .NET Framework e .NET, vedere la documentazione di .NET in Path.GetTempPath.
Per altre informazioni sul comportamento del sistema operativo Windows sottostante, vedi la documentazione di Windows sull'API GetTempPath2 di Win32.