From 7d8584727ad15bada4ed19a8277f0bc5b8fdca5f Mon Sep 17 00:00:00 2001 From: "Jason A. Donenfeld" Date: Thu, 16 May 2019 13:06:58 +0200 Subject: service: token elevation stuff is upstream Signed-off-by: Jason A. Donenfeld --- service/service_manager.go | 21 ++++++++++++++------- 1 file changed, 14 insertions(+), 7 deletions(-) (limited to 'service/service_manager.go') diff --git a/service/service_manager.go b/service/service_manager.go index dcc8a908..5ffd8615 100644 --- a/service/service_manager.go +++ b/service/service_manager.go @@ -111,14 +111,21 @@ func (service *managerService) Execute(args []string, r <-chan svc.ChangeRequest userToken.Close() return } - //TODO: The environment that Go gets from CreateEnvironmentBlock seems to have the same PATH as the userToken. Aren't there attacks? - elevatedToken, err := getElevatedToken(userToken) - if err != nil { - log.Printf("Unable to elevate token: %v", err) - return - } - if elevatedToken != userToken { + var elevatedToken windows.Token + if userToken.IsElevated() { + elevatedToken = userToken + } else { + elevatedToken, err = userToken.GetLinkedToken() userToken.Close() + if err != nil { + log.Printf("Unable to elevate token: %v", err) + return + } + if !elevatedToken.IsElevated() { + elevatedToken.Close() + log.Println("Linked token is not elevated") + return + } } defer elevatedToken.Close() userToken = 0 -- cgit v1.2.3-59-g8ed1b