CVE-2018-25258RGui 3.5.0版本中存在严重的本地缓冲区溢出漏洞。该漏洞位于GUI首选项对话框中,攻击者可以通过在“菜单和消息的语言”字段中精心构造恶意输入来触发基于栈的缓冲区溢出。由于程序未能正确验证输入长度,导致异常处理程序(SEH)被覆盖。攻击者可利用此漏洞绕过数据执行保护(DEP),通过ROP链调用VirtualAlloc分配内存并执行任意代码,从而完全控制受影响的系统。
该漏洞利用了RGui 3.5.0在处理GUI配置文件输入时的边界检查缺失。具体而言,当程序读取“Language for menus and messages”字段的值时,使用了不安全的函数将其复制到栈缓冲区中,而未限制输入数据的长度。攻击者可以发送超长字符串覆盖栈上的返回地址或结构化异常处理(SEH)记录。利用过程分为几个阶段:首先,通过精确控制溢出长度覆盖SEH处理程序指针;其次,利用部分覆盖技术跳入POP POP RET指令序列以获取控制权;接着,构建面向返回编程(ROP)链。由于RGui启用了DEP,直接在栈上执行Shellcode会被阻止,因此ROP链的主要功能是调用Windows API函数VirtualAlloc,在内存中申请具有可执行权限的内存页;最后,将Shellcode搬运到该内存区域并跳转执行,从而实现任意代码执行,无需用户交互即可获得系统最高权限。