CVE-2018-25251Snes9K 0.0.9z 版本中存在一个严重的缓冲区溢出漏洞。该漏洞位于 Netplay Socket Port Number 字段处理逻辑中。由于缺乏对用户输入长度的有效验证,本地攻击者可以通过构造超长恶意字符串并粘贴到该字段,覆盖结构化异常处理程序(SEH)。成功利用此漏洞可能导致攻击者绕过安全保护机制,在目标系统上执行任意代码,从而完全控制受影响的主机。
该漏洞的根源在于 Snes9K 0.0.9z 版本在解析 Netplay Socket Port Number 字段时,使用了不安全的内存拷贝操作(例如 C 语言中的 strcpy 函数),导致程序未对输入数据的长度进行严格的边界检查。当攻击者向该字段输入特定长度的超长字符串时,数据将溢出预分配的栈缓冲区。由于该程序编译时未启用现代安全保护机制(如 SafeSEH、DEP 或 ASLR),攻击者能够精确控制溢出的数据布局。利用过程中,攻击者首先填充垃圾数据填满缓冲区,随后覆盖结构化异常处理程序(SEH)链中的 Next SEH 和 SE Handler 指针。通过将 SE Handler 指向系统模块中包含的“POP POP RET”指令序列,攻击者可以在异常发生时劫持执行流,使其跳转回溢出缓冲区中放置的 Shellcode 并执行。鉴于 CVSS 评分显示为本地无需交互,攻击者可通过脚本化输入或剪贴板注入方式触发该漏洞,从而在目标系统上实现本地权限提升或代码执行。