0day.today - Biggest Exploit Database in the World.
Things you should know about 0day.today:
Administration of this site uses the official contacts. Beware of impostors!
- We use one main domain: http://0day.today
- Most of the materials is completely FREE
- If you want to purchase the exploit / get V.I.P. access or pay for any other service,
you need to buy or earn GOLD
Administration of this site uses the official contacts. Beware of impostors!
We DO NOT use Telegram or any messengers / social networks!
Please, beware of scammers!
Please, beware of scammers!
- Read the [ agreement ]
- Read the [ Submit ] rules
- Visit the [ faq ] page
- [ Register ] profile
- Get [ GOLD ]
- If you want to [ sell ]
- If you want to [ buy ]
- If you lost [ Account ]
- Any questions [ admin@0day.today ]
- Authorisation page
- Registration page
- Restore account page
- FAQ page
- Contacts page
- Publishing rules
- Agreement page
Mail:
Facebook:
Twitter:
Telegram:
We DO NOT use Telegram or any messengers / social networks!
You can contact us by:
Mail:
Facebook:
Twitter:
Telegram:
We DO NOT use Telegram or any messengers / social networks!
NVIDIA Driver - Escape 0x100010b Missing Bounds Check Exploit
Author
Risk
[
Security Risk Medium
]0day-ID
Category
Date add
CVE
Platform
Source: https://bugs.chromium.org/p/project-zero/issues/detail?id=927 The DxgkDdiEscape handler for escape code 0x100010b looks like: char escape_100010b(NvMiniportDeviceContext *miniport_context, HANDLE handle, unsigned int idx) { PVOID *Object; if ( !handle ) do_debug_thingo(); Object = (PVOID *)&miniport_context->UNKNOWN[8 * idx + 22696]; if ( !ObReferenceObjectByHandle(handle_, SYNCHRONIZE, )ExEventObjectType, UserMode, Object, 0i64) ) { result = 0; if ( *Object ) result = UserMode; } return result; } It essentially takes in a user mode event handle from userspace, and calls ObReferenceObjectByHandle on it, writing the object pointer to |Object|. Note that the kernel implementation of ObReferenceObjectByHandle always begins with writing NULL to this pointer regardless of whether or not the handle is valid. |Object| is calculated using a user provided index that is not bounds checked, leading to OOB write of either NULL or the KEVENT pointer: Object = (PVOID *)&miniport_context_->UNKNOWN[8 * idx + 22696]; The attached PoC causes the following crashing context on Win x64 372.54: PAGE_FAULT_IN_NONPAGED_AREA (50) ... rax=ffffe0025ea28f50 rbx=0000000000000000 rcx=0000000000000000 rdx=0000000000100000 rsi=0000000000000000 rdi=0000000000000000 rip=fffff801d8f3daf5 rsp=ffffd000203deda0 rbp=0000000000000001 r8=ffffe000506d4b50 r9=ffffe000524fb201 r10=0000000000000000 r11=ffffd000203df370 r12=0000000000000000 r13=0000000000000000 r14=0000000000000000 r15=0000000000000000 iopl=0 nv up ei pl zr na po nc nt!ObReferenceObjectByHandleWithTag+0x45: fffff801`d8f3daf5 488908 mov qword ptr [rax],rcx ds:ffffe002`5ea28f50=???????????????? To reproduce, compile as a x64 executable and run (requires WDK for D3DKMTEscape). Proof of Concept: https://github.com/offensive-security/exploit-database-bin-sploits/raw/master/sploits/40661.zip # 0day.today [2024-09-28] #