聚焦源代码安全,网罗国内外最新资讯!

编译:奇安信代码卫士团队

ModSecurity 是由 Trustwave 维护的开源 WAF 引擎。安全研究员 Ervin Hegedüs ModSecurity中发现了几个 cookie 解析问题,几天后 Andrea Menin 指出其中一个问题可导致运行 ModSecurity 版本 3.0 2.0.3 的服务器拒绝服务攻击。

漏洞详情

针对该漏洞的利用将把恶意 HTTP “Cookie”标头发送到易受攻击的服务器中,它将导致 out_of_range 异常,在结合 nginx 使用的常见 ModSecurity 用例中,将导致 nginx 工作线程(负责处理请求的线程)崩溃。反复向服务器发送这类请求将导致工作线程反崩溃,而如果发送请求的速度快于工作线程能够恢复的速度,将导致服务器拒绝服务后果。

发现过程

漏洞始于Ervin 运行 OWASP 规则集 (CRS) 回归测试时发现的一个 bug,他对比 ModSecurity v2和 v3 时发现了行为差异:“CRS 有一个回归测试案例,请求中仅包含单个字符串,而并没有“=”作为 HTTPCookie。Modsecurity3版本结果失败,因为如果Cookie 标头部分未包含“=”,则它不会被当做 cookie 处理。

在调查该代码时,Ervin发现了其它几个问题并决定着手推出修复方案,“当我完成代码和回归测试后,我想确保自己想到了所有可能的 cookie 字符串。为执行最简单的检查,我做了一个小工具,它包含新旧 cookie 解析方法以及源自 libmodsecurity3 源的 helper 函数。它使我能够看出新旧实现之间的差别。”

Andrea表示,“Ervin在二进制文件中复现了 libModSecurity cookie 解析器及其修复版本,该二进制文件从第一个参数读取一个 cookie 字符串,并对其进行解析,比较“老旧”和新型解析器之间的结果。Ervin 让我检查他的补丁,以寻求其它绕过方法。如你所知,在 cookie 字符串中,每个名称和值都通过一个 = 分割,而每个 cookie 名称/值对之间用 ; 分隔。经过几次测试后,我开始放置随机序列 ; 和 = 试图使其崩溃。通过发送 ;=;,不会发生任何情况,只会删除第一个 ;,事情就开始出错了。”

之后,他们就遇到了上述提到的 out_of_bounds 异常情况。

Andrea表示,“我们立即想到这个‘outof range’是如何影响正在运行的 webserver的,而且它是否会导致拒绝服务后果。因此,我已经在运行 Nginx +libModSecurity 的 docker 容器上通过 curl […] 发送请求进行了测试,但我没有从 web 服务器获得任何响应,甚至没有响应标头。通过读取 Nginx error_log 可以清楚地看到,我先前的请求杀死了Nginx 工作进程,该进程在日志上写入了相同的‘out of range’错误。从这里开始,对于我来说,仅通过发送带有 curl 的多个请求并连续杀死所有重新生成的 Nginx 工作进程,就很容易卡住 Nginx。”

修复方案

更新至 ModSecurity v3.0.4。

如果用户使用的 ModSecurity是从 GitHub 编译的,则v3/master 分支中也包含了解决方案。

如果用户修复了该漏洞但并未升级至 3.0.4,则可在之前的稳定版本 ModSecurity v3.0.3 基础上应用补丁文件:https://github.com/SpiderLabs/Misc/blob/master/ModSecurity_cookie_parsing_fix_303.patch。

       

推荐阅读

突发:俄罗斯警方突袭开源 Web 服务器 NGINX 的莫斯科代表处,拘留两名联合创始人

只需某些特定的Nginx + PHP-FPM 配置,即可触发PHP 远程代码执行漏洞

原文链接

https://www.trustwave.com/en-us/resources/blogs/spiderlabs-blog/modsecurity-denial-of-service-details-cve-2019-19886/

题图:Pixabay License

转载请注明“转自奇安信代码卫士 www.codesafe.cn”。

奇安信代码卫士 (codesafe)

国内首个专注于软件开发安全的产品线。

点个“在看”,bounty 不停~

看我如何发现开源 WAF引擎ModSecurity 中的DoS 漏洞相关推荐

  1. Linux 部署开源WAF模块 ModSecurity

    简介   ModSecurity是由 Trustwave 的 SpiderLabs 开发的用于 Apache.IIS 和 Nginx 的开源.跨平台 Web 应用程序防火墙 (WAF) 引擎,被称为W ...

  2. 研究员发现macOS 版本Safari 浏览器中的严重漏洞,获奖10.5万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 安全研究员 Ryan Pickren 在 macOS 版本的 Safari 浏览器中发现了一个漏洞,可被恶意网站用于访问受害者的已登录在线账户甚 ...

  3. Apache HTTP 过滤器filter、开源WAF(ModSecurity)、Apache 模块开发

    文章目录 一.安全基础 1. 什么是XSS攻击 2. SQL Injection 3. OWASP的核心规则集 二.ModSecurity 1. ModSecurity简介 1.1 ModSecuri ...

  4. 挖洞经验 | 看我如何发现“小火车托马斯”智能玩具APP聊天应用漏洞

    最近,我向智能玩具厂商ToyTalk提交了两个APP相关的漏洞并获得了$1750美金奖励,目前,漏洞已被成功修复,在此我打算公开详细的漏洞发现过程,以便其他APP开发人员将这种脆弱性威胁纳入开发过程的 ...

  5. 20岁黑客发现苹果核心 web 应用中的严重漏洞,获奖$3.6万

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 现年20岁的黑客 "Stealthy" 称,发现了影响苹果核心 web 应用中的多个严重的HTTP请求走私漏洞,获得3.6万 ...

  6. AB压力测试开源WAF性能分析

    AB压力测试简介 ab -n 10000 -c 100 http://172.28.13.40/myzoo/index.php ab -n 10000 -c 100 http://172.27.20. ...

  7. 黑客发现瑞士电子选举系统中的多个漏洞并获奖2.7万美元

     聚焦源代码安全,网罗国内外最新资讯! 编译:代码卫士 研究人员已经从瑞士新推出的电子选举系统漏洞奖励计划中赚取了数千欧元的奖励. 20多年前,瑞士出现电子选举,不过负责电子选举的瑞士邮政已经在着手推 ...

  8. drools规则引擎可视化_一文看懂开源工作流引擎 Flowable「转」

    原文链接:[https://xie.infoq.cn/article/ece75889c715e0bc87a73e44c]. 一.工作流引擎使用场景 工作流在企业管理系统中是高频使用的功能,一个最常见 ...

  9. Java开源模板引擎

    Velocity Velocity是一个基于java的模板引擎(template engine).它允许任何人仅仅简单的使用模板语言(template language)来引用由java代码定义的对象 ...

最新文章

  1. 【转】SAP S4HANA Cloud被IDC评为全球SaaS和云ERP系统领导者
  2. caffe生成voc格式lmdb
  3. localstorage存储大小_Cookie 已凉,Web 存储该这么做!
  4. Vue——this.$nextTick()
  5. 采用信号量机制实现消费者与生产者的线程同步_Java线程通信
  6. python append函数 循环_Python中循环后使用list.append数据被覆盖问题的解决
  7. Ubuntu 14.04 配置caffe环境
  8. 为节省内存,动态添加view布局和控件
  9. linux 下安装adobe flash的关键。
  10. SVN学习2020.8.9
  11. 如何将手机投屏到电脑_使用向日葵软件如何将手机投屏到电脑上
  12. JAVA并发编程实践-中文-高清-带书签-完整版
  13. 第十一章 枚举与泛型 总结
  14. 【OCR】中文街景数据集、场景文本定位识别新网络:End2End-PSL
  15. Objective-C和C/C++混合编译
  16. 下载网页所有图片的最简单的方法
  17. Marlin固件之二:源代码详解与移植
  18. 暗原色原理去雾matlab代码(Matlab)
  19. 微信小程序全栈开发实践 第二章 微信小程序组件介绍及使用 -- 2.3 rich-text 组件,以及如何单击预览它的节点图片并保存
  20. 川崎机器人f控制柜接线图_川崎机器人PROFINET总线通信图文教程

热门文章

  1. CentOS 安装Sqlite3
  2. 再学 GDI+[41]: 文本输出 - 控制输出字符的个数
  3. HTML CSS——margin和padding的学习
  4. 云开发初探 —— 更简便的小程序开发模式
  5. 视频信息查看,帧信息查看
  6. c#.net利用RNGCryptoServiceProvider产生任意范围强随机数的办法
  7. Oracle Tuning ( instance 级别 ) 01
  8. bootstraptable 怎么在特定行添加数据_手把手教你做一个“渣”数据师,用Python代替老情人Excel...
  9. Linux 中 crontab 详解及示例(收藏)
  10. cocos2dx游戏开发简单入门视频教程 (cocos2d-x)- 第1天