GHSL-2024-264_GHSL-2024-265: 了解 AWS CLI 中的正则表达式拒绝服务漏洞 (ReDoS)

AWS CLI 中存在两个正则表达式漏洞,攻击者可以利用这些漏洞构造特定输入,使得正则表达式匹配过程耗时过长,从而导致服务拒绝响应(DoS)。以下内容详细介绍了基础概念、漏洞细节、预防措施和代码示例,帮助大家更好地理解和应对这类问题。


1. 基础知识

  • 正则表达式 (Regex) :一种用于匹配字符串中模式的工具。
  • ReDoS(正则表达式拒绝服务攻击) :利用正则表达式的性能缺陷,通过恶意输入触发大量回溯,导致程序响应变慢甚至卡死。
  • 拒绝服务 (DoS) :攻击者使服务无法处理正常请求,从而达到瘫痪服务的目的。

2. 漏洞详情

问题 1:单引号正则表达式漏洞

  • 正则表达式

    arduino 复制代码
    '(?:\\|\'|[^'])*'
  • 描述:此正则用于匹配被单引号包裹的字符串。如果输入一个特别设计的长字符串(例如大量反斜杠),匹配过程会非常耗时,从而可能导致系统拒绝服务。

  • 示例命令

    swift 复制代码
    ./aws-cli/bin/aws ec2 create-tags --tags x=x,"'\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\"" --resources yyy

    执行该命令后,匹配过程会因为输入字符串过长而耗时异常,可能导致命令无法结束。


问题 2:双引号正则表达式漏洞

  • 正则表达式

    swift 复制代码
    "(?:\\|\"|[^"])*"
  • 描述:此正则用于匹配被双引号包裹的字符串,同样存在利用大量反斜杠构造恶意输入时匹配耗时过长的问题。

  • 示例命令

    swift 复制代码
    ./aws-cli/bin/aws ec2 create-tags --tags x=x,'"\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' --resources yyy

    如上述命令,恶意输入可能导致 AWS CLI 无法及时响应。


3. 预防措施

  • 输入校验:对所有用户输入进行严格过滤和校验,避免传入构造恶意字符串。

  • 正则表达式优化:采用更高效的匹配方式,或在正则匹配前限制输入长度,防止因回溯问题耗时过长。

  • 及时升级:AWS CLI 已发布安全修复版本:

    • AWS CLI V2 版本号:2.18.14
    • AWS CLI V1 版本号:1.35.14

4. 示例代码

下面的 Python 示例展示了如何使用正则表达式匹配被单引号包裹的字符串,并演示输入长度对匹配时间的影响:

python 复制代码
import re
import time

# 漏洞正则表达式(单引号匹配版)
pattern = re.compile(r"'(?:\\|\'|[^'])*'")

# 构造一个可能触发 ReDoS 的恶意字符串(含大量反斜杠)
evil_input = "'" + "\" * 1000 + "'"

start_time = time.time()
match = pattern.fullmatch(evil_input)
end_time = time.time()

print("匹配结果:", match)
print("匹配耗时: {:.4f} 秒".format(end_time - start_time))

在实际应用中,针对这种情况建议:

  • 限制输入字符串的长度;
  • 使用更高效、经过优化的正则表达式;
  • 或者考虑使用其他方式解析输入数据。

5. 总结

  • 问题原因:AWS CLI 中两个正则表达式存在匹配耗时过长的问题,攻击者可以利用这一点构造恶意输入。
  • 影响:可能导致系统拒绝服务(DoS),影响用户正常使用。
  • 解决方案:升级到已修复版本(V2.18.14 或 V1.35.14),同时对输入数据进行严格验证和正则优化。

通过以上措施,可以有效防范 ReDoS 攻击,确保系统稳定运行。

相关推荐
勇哥java实战分享12 分钟前
短信平台 Pro 版本 ,比开源版本更强大
后端
学历真的很重要17 分钟前
LangChain V1.0 Context Engineering(上下文工程)详细指南
人工智能·后端·学习·语言模型·面试·职场和发展·langchain
计算机毕设VX:Fegn089520 分钟前
计算机毕业设计|基于springboot + vue二手家电管理系统(源码+数据库+文档)
vue.js·spring boot·后端·课程设计
上进小菜猪36 分钟前
基于 YOLOv8 的智能杂草检测识别实战 [目标检测完整源码]
后端
wzfj123451 小时前
ssh 远程pc如何不用每次都输入密码
github
韩师傅1 小时前
前端开发消亡史:AI也无法掩盖没有设计创造力的真相
前端·人工智能·后端
栈与堆2 小时前
LeetCode-1-两数之和
java·数据结构·后端·python·算法·leetcode·rust
superman超哥2 小时前
双端迭代器(DoubleEndedIterator):Rust双向遍历的优雅实现
开发语言·后端·rust·双端迭代器·rust双向遍历
1二山似2 小时前
crmeb多商户启动swoole时报‘加密文件丢失’
后端·swoole
马卡巴卡2 小时前
Java CompletableFuture 接口与原理详解
后端